From 9ee6300b44eebf4155ddffdac3c3bd2491d5b02c Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 9 Dec 2025 23:57:31 +0100 Subject: [PATCH 01/28] increase version for next increment --- .../custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml | 2 +- .../sapcxtools/sapcommercetoolkit/external-dependencies.xml | 2 +- .../bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml | 2 +- .../sapcxtools/sapcxbackoffice/external-dependencies.xml | 2 +- .../bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml | 2 +- .../sapcxtools/sapcxenvconfig/external-dependencies.xml | 2 +- .../bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml | 2 +- .../sapcxtools/sapcxreporting/external-dependencies.xml | 2 +- .../bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml | 2 +- .../custom/sapcxtools/sapcxsearch/external-dependencies.xml | 2 +- .../bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml | 2 +- .../sapcxtools/sapcxsinglesignon/external-dependencies.xml | 2 +- .../bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml | 2 +- .../custom/sapcxtools/sapcxssoauth0/external-dependencies.xml | 4 ++-- .../bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml | 2 +- .../custom/sapcxtools/sapcxtemplate/external-dependencies.xml | 2 +- sonar-project.properties | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml index f612629f..1cc948c4 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml @@ -1,7 +1,7 @@ + name="sapcommercetoolkit" version="5.0.0-snapshot" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml index 7f9ccf81..886ba0f7 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcommercetoolkit - 4.4.0 + 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml index ff94db64..e6eb0c3a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml @@ -1,7 +1,7 @@ + name="sapcxbackoffice" version="5.0.0-snapshot" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml index f1b57acb..e07cc73d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxbackoffice - 4.4.0 + 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml index 56ec022d..e9fca2ab 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml @@ -1,7 +1,7 @@ + name="sapcxenvconfig" version="5.0.0-snapshot" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml index 6b485118..86512d38 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxenvconfig - 4.4.0 + 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml index 0e42956a..218d51d9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml @@ -1,7 +1,7 @@ + name="sapcxreporting" version="5.0.0-snapshot" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml index 290834be..2a776a7c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxreporting - 4.4.0 + 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml index feef8873..d9aaef25 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml @@ -1,7 +1,7 @@ + name="sapcxsearch" version="5.0.0-snapshot" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml index f7f0286f..c52a1288 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxsearch - 4.4.0 + 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml index 0d955150..bec2ef64 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml index 942dc9b8..8ce6d7c9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxsinglesignon - 4.4.0 + 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml index a8bc8288..2697e617 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml index 7679f464..537092d5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxssoauth0 - 4.4.0 + 5.0.0-snapshot jar @@ -14,7 +14,7 @@ com.auth0 java-jwt - 4.4.0 + 5.0.0-snapshot com.squareup.okhttp3 diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml index 37b8de86..441273a9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml index 63f5a35a..fcb6092f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 tools.sapcx sapcxtemplate - 4.4.0 + 5.0.0-snapshot jar diff --git a/sonar-project.properties b/sonar-project.properties index 60be04b8..375d5818 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -3,7 +3,7 @@ sonar.organization=sapcxtools # This is the name and version displayed in the SonarCloud UI. sonar.projectName=sapcxtools-workspace -sonar.projectVersion=4.4.0 +sonar.projectVersion=5.0.0-snapshot # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. sonar.sources=core-customize/hybris/bin/custom/sapcxtools From bd496192c0d74620c877e26e9ea9787f73588cf9 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Wed, 10 Dec 2025 00:05:28 +0100 Subject: [PATCH 02/28] upgrade to JDK21 --- .../backwards-compatibility-java17.yml | 2 +- .github/workflows/buildandtest.yml | 6 ++-- .github/workflows/code-analysis.yml | 6 ++-- .github/workflows/dependency-check.yml | 6 ++-- core-customize/manifest.json | 35 +++++++++++++------ 5 files changed, 35 insertions(+), 20 deletions(-) diff --git a/.github/workflows/backwards-compatibility-java17.yml b/.github/workflows/backwards-compatibility-java17.yml index 0ac488e7..8836843b 100644 --- a/.github/workflows/backwards-compatibility-java17.yml +++ b/.github/workflows/backwards-compatibility-java17.yml @@ -28,7 +28,7 @@ jobs: - name: Set up JDK 17 uses: actions/setup-java@v4 with: - distribution: "adopt" + distribution: "sapmachine" java-version: "17" cache: "gradle" - name: Validate Gradle wrapper diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index d6a25cd0..add2974f 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -23,11 +23,11 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Set up JDK 17 + - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: "adopt" - java-version: "17" + distribution: "sapmachine" + java-version-file: "core-customize/.java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v3 diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index 8d242409..5e791596 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -12,11 +12,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: "adopt" - java-version: "17" + distribution: "sapmachine" + java-version-file: "core-customize/.java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v3 diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 30360ab1..89b7e04f 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -22,11 +22,11 @@ jobs: extension: ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxsearch", "sapcxenvconfig", "sapcxsinglesignon"] steps: - uses: actions/checkout@v4 - - name: Set up JDK 17 + - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: "adopt" - java-version: "17" + distribution: "sapmachine" + java-version-file: "core-customize/.java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v3 diff --git a/core-customize/manifest.json b/core-customize/manifest.json index a0a70fee..9467334f 100644 --- a/core-customize/manifest.json +++ b/core-customize/manifest.json @@ -1,5 +1,5 @@ { - "commerceSuiteVersion": "2211.47", + "commerceSuiteVersion": "2211-jdk21.4", "extensionPacks": [], "extensions": [], "properties": [], @@ -50,28 +50,34 @@ }, "aspects": [{ "name": "backoffice", - "webapps": [{ + "webapps": [ + { "contextPath": "/hac", "name": "hac" }, + { + "contextPath": "/backoffice", + "name": "backoffice" + }, { "contextPath": "/medias", "name": "mediaweb" }, { - "contextPath": "/backoffice", - "name": "backoffice" + "contextPath": "/authorizationserver", + "name": "authorizationserver" }, { - "contextPath": "/authorizationserver", - "name": "oauth2" + "contextPath": "/resourceserver", + "name": "resourceserver" } ] }, { "name": "backgroundProcessing", "properties": [], - "webapps": [{ + "webapps": [ + { "contextPath": "/hac", "name": "hac" }, @@ -84,17 +90,26 @@ { "name": "api", "properties": [], - "webapps": [{ + "webapps": [ + { + "contextPath": "/hac", + "name": "hac" + }, + { "contextPath": "/occ", "name": "commercewebservices" }, + { + "contextPath": "/medias", + "name": "mediaweb" + }, { "contextPath": "/authorizationserver", "name": "oauth2" }, { - "contextPath": "/medias", - "name": "mediaweb" + "contextPath": "/resourceserver", + "name": "resourceserver" } ] } From a1dc574dabcbe0fa0751f1a558d0c574fff0f653 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 16 Dec 2025 14:13:14 +0100 Subject: [PATCH 03/28] adjust build tools and platform version for JDK21 --- .../backwards-compatibility-java17.yml | 79 ---------- .gitignore | 2 +- .java-version | 2 +- .node-version | 2 +- README.md | 3 - build.gradle.kts | 4 +- core-customize/build.gradle.kts | 142 ++++++++++-------- core-customize/manifest.json | 6 +- sonar-project.properties | 2 +- 9 files changed, 93 insertions(+), 149 deletions(-) delete mode 100644 .github/workflows/backwards-compatibility-java17.yml diff --git a/.github/workflows/backwards-compatibility-java17.yml b/.github/workflows/backwards-compatibility-java17.yml deleted file mode 100644 index 8836843b..00000000 --- a/.github/workflows/backwards-compatibility-java17.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: Backwards Compatibility (JDK 17) - -on: - push: - branches: [develop] - paths: - - "core-customize/manifest.json" - - "core-customize/hybris/bin/custom/sapcxtools/**/*.java" - - "core-customize/hybris/bin/custom/sapcxtools/**/*-beans.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/*-items.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/extensioninfo.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/external-dependencies.xml" - pull_request: - branches: [main, develop] - schedule: - - cron: "0 15 * * 0,3" - workflow_dispatch: - -jobs: - compatibility: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - version: ["2211.47"] - steps: - - uses: actions/checkout@v4 - - name: Set up JDK 17 - uses: actions/setup-java@v4 - with: - distribution: "sapmachine" - java-version: "17" - cache: "gradle" - - name: Validate Gradle wrapper - uses: gradle/actions/wrapper-validation@v3 - - name: Set up cache for SAP artifacts - uses: actions/cache@v4 - with: - key: sap-artifacts-cache-${{ hashFiles('core-customize/manifest.json') }}-${{ matrix.version }} - path: dependencies - - name: Configure SAP version - run: | - sed -i 's/\"commerceSuiteVersion\": \"[^\"]*\"/\"commerceSuiteVersion\": \"${{ matrix.version }}\"/' core-customize/manifest.json - - name: SAP download config - env: - SAPCX_ARTEFACT_BASEURL: ${{ secrets.SAPCX_ARTEFACT_BASEURL }} - SAPCX_ARTEFACT_USER: ${{ secrets.SAPCX_ARTEFACT_USER }} - SAPCX_ARTEFACT_PASSWORD: ${{ secrets.SAPCX_ARTEFACT_PASSWORD }} - shell: bash - run: | - mkdir -p ${HOME}/.gradle - echo "GRADLE_USER_HOME=${HOME}/.gradle" >> $GITHUB_ENV - echo "SAPCX_ARTEFACT_BASEURL=${SAPCX_ARTEFACT_BASEURL}" >> ${HOME}/.gradle/gradle.properties - echo "SAPCX_ARTEFACT_USER=${SAPCX_ARTEFACT_USER}" >> ${HOME}/.gradle/gradle.properties - echo "SAPCX_ARTEFACT_PASSWORD=${SAPCX_ARTEFACT_PASSWORD}" >> ${HOME}/.gradle/gradle.properties - - name: SAP Commerce environment - run: | - echo "HYBRIS_OPT_CONFIG_DIR=$GITHUB_WORKSPACE/core-customize/hybris/config/local-config" >> $GITHUB_ENV - echo "HYBRIS_BIN_DIR=$GITHUB_WORKSPACE/core-customize/hybris/bin" >> $GITHUB_ENV - echo "HYBRIS_CONF_DIR=$GITHUB_WORKSPACE/core-customize/hybris/config" >> $GITHUB_ENV - echo "HYBRIS_LOG_DIR=$GITHUB_WORKSPACE/core-customize/hybris/log" >> $GITHUB_ENV - - name: Bootstrap platform - run: ./gradlew setupLocalDevelopment - - name: Build platform - run: ./gradlew yall - - name: Run unit tests - run: | - cat $GITHUB_WORKSPACE/ci/config/testing-unit.properties > $HYBRIS_CONF_DIR/local-config/99-local.properties - ./gradlew yunittests - - # Target never fails, therefore, check for test errors and fail if errors were found - for file in $HYBRIS_LOG_DIR/junit/test-results/unit/*.xml; do if [ "$(grep -cE '<(error|failure)' "${file}")" -gt 0 ]; then exit 1; fi; done - - name: Run integration tests - run: | - cat $GITHUB_WORKSPACE/ci/config/testing-integration.properties > $HYBRIS_CONF_DIR/local-config/99-local.properties - ./gradlew yintegrationtests - - # Target never fails, therefore, check for test errors and fail if errors were found - for file in $HYBRIS_LOG_DIR/junit/test-results/integration/*.xml; do if [ "$(grep -cE '<(error|failure)' "${file}")" -gt 0 ]; then exit 1; fi; done diff --git a/.gitignore b/.gitignore index 1b39e82b..c0f255f8 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,7 @@ core-customize/hybris/roles/ core-customize/hybris/log/ core-customize/hybris/temp/ core-customize/hybris/data/ -core-customize/hybris/config/local-config/9[0-9]-local.properties +core-customize/hybris/config/local-config/ # only allow sapcxtools extension core-customize/hybris/bin/modules/ diff --git a/.java-version b/.java-version index 8e2afd34..962d54c3 100644 --- a/.java-version +++ b/.java-version @@ -1 +1 @@ -17 \ No newline at end of file +21.0.9-sapmchn \ No newline at end of file diff --git a/.node-version b/.node-version index 58a4133d..adb55585 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -16.13.0 +22.14.0 \ No newline at end of file diff --git a/README.md b/README.md index a046c1e0..156b8c49 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,7 @@ [![Build & Test](https://github.com/sapcxtools/workspace/actions/workflows/buildandtest.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/buildandtest.yml) [![Code Analysis](https://github.com/sapcxtools/workspace/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/code-analysis.yml) [![Code Coverage](https://codecov.io/gh/sapcxtools/workspace/branch/main/graph/badge.svg?token=F1BIK8R7NZ)](https://codecov.io/gh/sapcxtools/workspace) - [![Dependency Check](https://github.com/sapcxtools/workspace/actions/workflows/dependency-check.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/dependency-check.yml) -[![Backwards Compatibility](https://github.com/sapcxtools/workspace/actions/workflows/backwards-compatibility-java17.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/backwards-compatibility-java17.yml) -[![Backwards Compatibility](https://github.com/sapcxtools/workspace/actions/workflows/backwards-compatibility-java11.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/backwards-compatibility-java11.yml) All extensions available in this repository are built with high test coverage and do not influence the behavior of your project without changes to your configuration. This is guaranteed and intended by design, because the extensions diff --git a/build.gradle.kts b/build.gradle.kts index 6a574fcb..503d62fb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("com.diffplug.spotless") version("6.25.0") + id("com.diffplug.spotless") version("8.1.0") } repositories { @@ -26,6 +26,6 @@ spotless { // "js-storefront/*/src/**/*.ts", // "js-storefront/*/src/**/*.html" // ) - // prettier("2.5.1").configFile(frontendFormatterConfigFile) + // prettier("3.5.3").configFile(frontendFormatterConfigFile) //} } \ No newline at end of file diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index 6aa0e6e1..7bf203c5 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -1,32 +1,76 @@ import org.apache.tools.ant.taskdefs.condition.Os import de.undercouch.gradle.tasks.download.Download +import de.undercouch.gradle.tasks.download.VerifyAction import java.time.Instant import java.util.Base64 plugins { - id("sap.commerce.build") version("4.0.0") - id("sap.commerce.build.ccv2") version("4.0.0") - id("de.undercouch.download") version("5.5.0") + id("sap.commerce.build") version("5.0.2") + id("sap.commerce.build.ccv2") version("5.0.2") + id("de.undercouch.download") version("5.6.0") + `maven-publish` } -val DEPENDENCY_FOLDER = "../dependencies" +val dependencyDir = "../dependencies" +val workingDir = project.projectDir +val binDir = "${workingDir}/hybris/bin" + repositories { - flatDir { dirs(DEPENDENCY_FOLDER) } + flatDir { dirs(dependencyDir) } mavenCentral() } +hybris { + // what files should be deleted when cleaning up the platform? + // (cloudhofolders will be downloaded by custom configuration) + cleanGlob.set("glob:**hybris/bin/{modules**,platform**,cloudhotfolders**}") + + // what should be unpacked from the platform zip files? + bootstrapInclude.set( + listOf( + "hybris/**", // + "azurecloudhotfolder/**", // + "cloudcommons/**", // + "cloudhotfolder/**" // + ) + ) + + // what should excluded when unpacking? + // the default value is a npm package folder that includes UTF-8 filenames, which lead to problems on linux + bootstrapExclude.set( + listOf( + "hybris/bin/ext-content/npmancillary/resources/npm/node_modules/http-server/node_modules/ecstatic/test/**" + ) + ) + + // Control the sparse platform bootstrap. + // When enabled, the commerce extensions are extracted from the distribution zip on a as-needed basis. + // Only extensions that are actually used in the project (either directly listed in the localextensions.xml or + // required by other extensions) are extracted. + // The platform itself is always extracted. + // When this mode is enabled, the bootstrapInclude configuration property is ignored. + sparseBootstrap { + enabled = true + alwaysIncluded = listOf() + } +} + +tasks.ybuild { + group = "build" +} + if (project.hasProperty("SAPCX_ARTEFACT_BASEURL") && project.hasProperty("SAPCX_ARTEFACT_USER") && project.hasProperty("SAPCX_ARTEFACT_PASSWORD")) { val BASEURL = project.property("SAPCX_ARTEFACT_BASEURL") as String val USER = project.property("SAPCX_ARTEFACT_USER") as String val PASSWORD = project.property("SAPCX_ARTEFACT_PASSWORD") as String val AUTHORIZATION = Base64.getEncoder().encodeToString((USER + ":" + PASSWORD).toByteArray()) - val COMMERCE_VERSION = CCV2.manifest.commerceSuiteVersion + val COMMERCE_VERSION = CCV2.manifest.effectiveVersion tasks.register("downloadPlatform") { src(BASEURL + "/commerce/hybris-commerce-suite-${COMMERCE_VERSION}.zip") - dest(file("${DEPENDENCY_FOLDER}/hybris-commerce-suite-${COMMERCE_VERSION}.zip")) + dest(file("${dependencyDir}/hybris-commerce-suite-${COMMERCE_VERSION}.zip")) header("Authorization", "Basic ${AUTHORIZATION}") overwrite(false) tempAndMove(true) @@ -43,7 +87,7 @@ if (project.hasProperty("SAPCX_ARTEFACT_BASEURL") && project.hasProperty("SAPCX_ val INTEXTPACK_VERSION = CCV2.manifest.extensionPacks.first{"hybris-commerce-integrations".equals(it.name)}.version tasks.register("downloadIntExtPack") { src(BASEURL + "/integration/hybris-commerce-integrations-${INTEXTPACK_VERSION}.zip") - dest(file("${DEPENDENCY_FOLDER}/hybris-commerce-integrations-${INTEXTPACK_VERSION}.zip")) + dest(file("${dependencyDir}/hybris-commerce-integrations-${INTEXTPACK_VERSION}.zip")) header("Authorization", "Basic ${AUTHORIZATION}") overwrite(false) tempAndMove(true) @@ -66,60 +110,26 @@ tasks.register("generateLocalProperties") { } } -val symlinkConfigTask = tasks.register("symlinkConfig") -val hybrisConfig = file("hybris/config") +val symlinkConfigTask: TaskProvider = tasks.register("symlinkConfig") val localConfig = file("hybris/config/local-config") -val homeDirectory = file(project.gradle.gradleUserHomeDir.parent) mapOf( - "10-local.properties" to "cloud/common.properties", - "20-local.properties" to "cloud/persona/development.properties", - "50-local.properties" to "cloud/local-dev.properties", - "90-local.properties" to "local/90-local.properties", - "91-local.properties" to "local/91-local.properties", - "92-local.properties" to "local/92-local.properties", - "93-local.properties" to "local/93-local.properties", - "94-local.properties" to "local/94-local.properties", - "95-local.properties" to "local/95-local.properties", - "96-local.properties" to "local/96-local.properties", - "97-local.properties" to "local/97-local.properties", - "98-local.properties" to "local/98-local.properties" + "10-local.properties" to file("hybris/config/cloud/common.properties"), + "20-local.properties" to file("hybris/config/cloud/persona/development.properties") ).forEach{ - val link = it.key - var path = file(hybrisConfig.absolutePath + "/" + it.value) - if (!path.exists()) { - path = file(homeDirectory.absolutePath + "/.sap-commerce/local-config/" + it.key) - } - - if (path.exists()) { - val symlinkTask = tasks.register("symlink-${link}") { - val relPath = path.relativeTo(localConfig) - if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "ln -sfn ${relPath} ${link}") - } else { - // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ - val windowsPath = relPath.toString().replace("[/]".toRegex(), "\\") - commandLine("cmd", "/c", """mklink "${link}" "${windowsPath}" """) - } - workingDir(localConfig) - dependsOn("generateLocalProperties") - } - symlinkConfigTask.configure { - dependsOn(symlinkTask) - } - } else { - // Unlink if no longer existing - val unlinkTask = tasks.register("unlink-${link}") { - if (Os.isFamily(Os.FAMILY_UNIX)) { - commandLine("sh", "-c", "rm -f ${link}") - } else { - commandLine("cmd", "/c", "del /q ${link}") - } - workingDir(localConfig) - dependsOn("generateLocalProperties") - } - symlinkConfigTask.configure { - dependsOn(unlinkTask) + val symlinkTask = tasks.register("symlink${it.key}") { + val path = it.value.relativeTo(localConfig) + if (Os.isFamily(Os.FAMILY_UNIX)) { + commandLine("sh", "-c", "ln -sfn $path ${it.key}") + } else { + // https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/ + val windowsPath = path.toString().replace("[/]".toRegex(), "\\") + commandLine("cmd", "/c", """mklink "${it.key}" "$windowsPath" """) } + workingDir(localConfig) + dependsOn("generateLocalProperties") + } + symlinkConfigTask.configure { + dependsOn(symlinkTask) } } @@ -132,6 +142,13 @@ tasks.register("generateLocalDeveloperProperties") { } } +// https://help.sap.com/viewer/b2f400d4c0414461a4bb7e115dccd779/LATEST/en-US/784f9480cf064d3b81af9cad5739fecc.html +tasks.register("enableModeltMock") { + from("hybris/bin/custom/extras/modelt/extensioninfo.disabled") + into("hybris/bin/custom/extras/modelt/") + rename { "extensioninfo.xml" } +} + tasks.named("installManifestAddons") { mustRunAfter("generateLocalProperties") } @@ -139,5 +156,10 @@ tasks.named("installManifestAddons") { tasks.register("setupLocalDevelopment") { group = "SAP Commerce" description = "Setup local development" - dependsOn("bootstrapPlatform", "generateLocalDeveloperProperties", "installManifestAddons") -} + dependsOn( + "bootstrapPlatform", + "generateLocalDeveloperProperties", + "installManifestAddons", + "enableModeltMock" + ) +} \ No newline at end of file diff --git a/core-customize/manifest.json b/core-customize/manifest.json index 9467334f..d9fb2567 100644 --- a/core-customize/manifest.json +++ b/core-customize/manifest.json @@ -1,6 +1,10 @@ { - "commerceSuiteVersion": "2211-jdk21.4", + "commerceSuiteVersion": "2211-jdk21.5", "extensionPacks": [], + "solr": { + "location": "solr", + "solrVersion": "9.8" + }, "extensions": [], "properties": [], "storefrontAddons": [], diff --git a/sonar-project.properties b/sonar-project.properties index 375d5818..16375b18 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -12,7 +12,7 @@ sonar.java.binaries=core-customize/hybris/bin/custom/sapcxtools/**/classes # Encoding of the source code. Default is default system encoding sonar.sourceEncoding=UTF-8 -sonar.java.source=17 +sonar.java.source=21 sonar.extensions=${testclasses.extensions} sonar.exclusions=file\:**/gensrc/**,file\:**/*Constants.java,file\:**/jalo/**,file\:**/de/hybris/**,file\:**/com/hybris/**,file\:**/*.py,file\:**/testsrc/** From 8b263785594fee0a9771c5f46b64b0f5cdbafed0 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 16 Dec 2025 14:17:04 +0100 Subject: [PATCH 04/28] remove extensions no longer needed with JDK21 --- .../custom/sapcxtools/sapcxsearch/.project | 34 --- .../sapcxtools/sapcxsearch/CONTRIBUTING.md | 4 - .../custom/sapcxtools/sapcxsearch/LICENSE.md | 201 ------------- .../custom/sapcxtools/sapcxsearch/README.md | 22 -- .../resources/scss/sapcxsearch-variables.scss | 1 - .../definition.xml | 25 -- ...indexer_conf_operations_wizard_default.png | Bin 5937 -> 0 bytes ...ndexer_conf_operations_wizard_disabled.png | Bin 7984 -> 0 bytes .../indexer_conf_operations_wizard_hover.png | Bin 5854 -> 0 bytes .../labels/labels_de.properties | 1 - .../labels/labels_en.properties | 1 - .../solrindexerconfigurableoperations.scss | 28 -- ...lrIndexerConfigurableOperationsAction.java | 38 --- .../SolrIndexerConfigurableOperationStep.java | 115 -------- .../sapcxtools/sapcxsearch/buildcallbacks.xml | 9 - .../sapcxtools/sapcxsearch/extensioninfo.xml | 13 - .../sapcxsearch/external-dependencies.xml | 10 - .../sapcxtools/sapcxsearch/lib/.lastupdate | 0 .../sapcxtools/sapcxsearch/project.properties | 6 - .../sapcxsearch-locales_de.properties | 2 - .../sapcxsearch-locales_en.properties | 2 - .../sapcxsearch-backoffice-config.xml | 57 ---- .../sapcxsearch-backoffice-spring.xml | 12 - .../sapcxsearch-backoffice-widgets.xml | 8 - .../resources/sapcxsearch-items.xml | 25 -- .../resources/sapcxsearch-spring.xml | 17 -- .../search/constants/CxSearchConstants.java | 10 - ...SolrIndexerConfigurableJobPerformable.java | 74 ----- .../CxHybrisEnumFacetDisplayNameProvider.java | 41 --- .../CxHybrisEnumFacetSortProvider.java | 31 -- .../provider/CxInheritanceValueProvider.java | 56 ---- ...encedItemDelegatingFieldValueProvider.java | 90 ------ .../CxHybrisEnumOrdinalValueResolver.java | 56 ---- ...ReferencedItemDelegatingValueResolver.java | 84 ------ .../commerce/search/service/CxIndexer.java | 87 ------ .../search/service/CxIndexerService.java | 105 ------- .../search/service/DefaultCxIndexer.java | 41 --- .../service/DefaultCxIndexerService.java | 77 ----- .../search/util/SearchQueryCodec.java | 12 - .../search/util/SolrSearchQueryCodec.java | 74 ----- .../config/ExtensionConfigurationTests.java | 20 -- ...ndexerConfigurableJobPerformableTests.java | 86 ------ .../service/DefaultCxIndexerServiceTests.java | 134 --------- .../sapcxtools/sapcxsinglesignon/.gitignore | 46 --- .../sapcxtools/sapcxsinglesignon/.project | 34 --- .../sapcxsinglesignon/CONTRIBUTING.md | 4 - .../sapcxtools/sapcxsinglesignon/LICENSE.md | 201 ------------- .../sapcxtools/sapcxsinglesignon/README.md | 159 ---------- .../sapcxsinglesignon/extensioninfo.xml | 10 - .../external-dependencies.xml | 30 -- .../sapcxsinglesignon/project.properties | 36 --- .../spring/sapcxsinglesignon-web-spring.xml | 16 -- .../web/spring/idp-initiated-login-spring.xml | 8 - .../resources/sapcxsinglesignon-spring.xml | 30 -- .../constants/CxSingleSignOnConstants.java | 11 - .../AccessTokenRevocationController.java | 57 ---- .../sso/filter/AudienceValidator.java | 24 -- .../JwtAccessTokenVerificationFilter.java | 272 ------------------ ...iatedSamlAuthenticationSuccessHandler.java | 31 -- .../user/NoUpdateUserFromTokenStrategy.java | 9 - .../sso/user/UpdateUserFromTokenStrategy.java | 7 - .../config/ExtensionConfigurationTests.java | 21 -- .../sapcxtools/sapcxssoauth0/.gitignore | 46 --- .../custom/sapcxtools/sapcxssoauth0/.project | 34 --- .../sapcxtools/sapcxssoauth0/CONTRIBUTING.md | 4 - .../sapcxtools/sapcxssoauth0/LICENSE.md | 201 ------------- .../custom/sapcxtools/sapcxssoauth0/README.md | 49 ---- .../sapcxssoauth0/extensioninfo.xml | 7 - .../sapcxssoauth0/external-dependencies.xml | 61 ---- .../sapcxssoauth0/project.properties | 45 --- .../resources/sapcxssoauth0-spring.xml | 55 ---- .../commerce/sso/auth0/actions/Actions.java | 45 --- .../sso/auth0/actions/AssignRoleAction.java | 38 --- .../sso/auth0/actions/CreateUserAction.java | 82 ------ .../sso/auth0/actions/FetchRoleAction.java | 38 --- .../sso/auth0/actions/FetchUserAction.java | 38 --- .../auth0/actions/PasswordResetUrlAction.java | 38 --- .../sso/auth0/actions/RemoveRoleAction.java | 39 --- .../sso/auth0/actions/RemoveUserAction.java | 35 --- .../commerce/sso/auth0/actions/SdkAction.java | 76 ----- .../actions/SdkConfigurationService.java | 90 ------ .../sso/auth0/actions/UpdateUserAction.java | 54 ---- .../Auth0CustomerMetadataPopulator.java | 111 ------- .../replication/Auth0CustomerPopulator.java | 35 --- .../Auth0CustomerReplicationStrategy.java | 132 --------- .../sso/constants/CxSsoAuth0Constants.java | 11 - .../AllCustomerReplicationFilter.java | 12 - .../CustomerReplicationException.java | 22 -- .../replication/CustomerReplicationHook.java | 16 -- .../CustomerReplicationInterceptor.java | 55 ---- .../CustomerReplicationStrategy.java | 11 - .../config/ExtensionConfigurationTests.java | 18 -- .../hybris/config/localextensions.xml | 3 - 93 files changed, 4216 deletions(-) delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/.project delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/LICENSE.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/README.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/scss/sapcxsearch-variables.scss delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/definition.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_default.png delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_disabled.png delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_hover.png delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/labels/labels_de.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/labels/labels_en.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/solrindexerconfigurableoperations.scss delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/src/tools/sapcx/commerce/search/backoffice/action/SolrIndexerConfigurableOperationsAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/src/tools/sapcx/commerce/search/backoffice/wizard/SolrIndexerConfigurableOperationStep.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/buildcallbacks.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/lib/.lastupdate delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/project.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_de.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_en.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-config.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-widgets.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-items.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/constants/CxSearchConstants.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformable.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetDisplayNameProvider.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetSortProvider.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxInheritanceValueProvider.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxReferencedItemDelegatingFieldValueProvider.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxHybrisEnumOrdinalValueResolver.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxReferencedItemDelegatingValueResolver.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexer.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexerService.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexer.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexerService.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SearchQueryCodec.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SolrSearchQueryCodec.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/config/ExtensionConfigurationTests.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformableTests.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/service/DefaultCxIndexerServiceTests.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.gitignore delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.project delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/LICENSE.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/README.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/project.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/occ/v2/sapcxsinglesignonocc/web/spring/sapcxsinglesignon-web-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/samlsinglesignon/web/spring/idp-initiated-login-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/sapcxsinglesignon-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/constants/CxSingleSignOnConstants.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/controller/AccessTokenRevocationController.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/AudienceValidator.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/JwtAccessTokenVerificationFilter.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/saml/IdpInitiatedSamlAuthenticationSuccessHandler.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/NoUpdateUserFromTokenStrategy.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/UpdateUserFromTokenStrategy.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.gitignore delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.project delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/LICENSE.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/README.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/project.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/resources/sapcxssoauth0-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/Actions.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/AssignRoleAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/CreateUserAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchRoleAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchUserAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/PasswordResetUrlAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveRoleAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveUserAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkConfigurationService.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/UpdateUserAction.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerMetadataPopulator.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerPopulator.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerReplicationStrategy.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/constants/CxSsoAuth0Constants.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/AllCustomerReplicationFilter.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationException.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationHook.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationInterceptor.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationStrategy.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/.project b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/.project deleted file mode 100644 index 9d969f6c..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - sapcxsearch - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - - - - 1642058460820 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/LICENSE.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/LICENSE.md deleted file mode 100644 index 9776fe0d..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/LICENSE.md +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [2025] [SAP CX Tools] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/README.md deleted file mode 100644 index ce5f02b7..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# SAP CX Search - -The `sapcxsearch` extension improves the solr facet search functions. - -## FEATURE DESCRIPTION - -- Configurable version of Solr Indexer Job allowing to specify the indexed type -- A `CxIndexer` interface that can be used to trigger the indexing process -- A `CxIndexerService` that can be used to resolve indexers and trigger the indexing process -- A list of different search providers and resolvers that can be used for indexing - -### How to activate and use - -- the configurable version of the solr indexer job can be used within the backoffice -- add a bean configuration for the providers and resolvers within your project -- the `CxIndexerService` and `CxIndexer`can be used to trigger the indexing process - -## License - -_Licensed under the Apache License, Version 2.0, January 2004_ - -_Copyright 2025, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/scss/sapcxsearch-variables.scss b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/scss/sapcxsearch-variables.scss deleted file mode 100644 index 8b137891..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/scss/sapcxsearch-variables.scss +++ /dev/null @@ -1 +0,0 @@ - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/definition.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/definition.xml deleted file mode 100644 index e1b174d5..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/definition.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - Configurable Index - Configurable Index - Phil - 1.0 - tools.sapcx.commerce.search.backoffice.action.SolrIndexerConfigurableOperationsAction - de.hybris.platform.solrfacetsearch.model.config.SolrFacetSearchConfigModel - java.lang.Object - - - - - - icons/indexer_conf_operations_wizard_default.png - icons/indexer_conf_operations_wizard_hover.png - icons/indexer_conf_operations_wizard_disabled.png - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_default.png b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_default.png deleted file mode 100644 index 81783a8a77e0a4f569f2c73ef50f691d083d2870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5937 zcmeHLdpMNa8Xu=Nxpb8XW%ej4=JL%9W`?0*Mh1iJ9#P-Se8XTaW(GqWWh1iNN>W>j zl-MP^b{AU*B}yfvcB#lEg-UKo>3Y5yx;>};oYV81^ItR1d^77^zx7-1`&;k3zHd#s zhuf-|8u}Ut1Y#!BiS7x18!A3CRN<>+W@k16@m+A7x4+C2j6sSeA|5{iLds&r5E7E} zc?g93&J(}D=z(QguUl8})N@uMb84UF-L5fD)EF2%U_H3RZLsg;^;G2Qc`JTUee~{) zb-&S?tV+}0TkJK!+6UX+vs#V`&Wy&5_O?pj6)(mo7#9C?CGP&!({I*lZh9-o8&VxN z*Qm#E8mnXVUOCTC` zEUtY!oJb$fJ(sEd@Rz%(#nM02x_Xyx`+Ht&mziDRAMeh#dxXW)}Z)u4rC36aUrR{pPNzeE3L{ zbEW8Pkb3pq=GM9!DzrVT_qr_k{upHSLw4t`v*?0F z^L3t7tCCOEB0Q(JZeDjwMWx_^8+mvE14Wp}M=UdzMFwlkS?9x_;aOR`Vlx{b)U)HF zi;p+XRZs0#mGp{g)KMm8n)#5E8FlQ|k>b5-&H|EtLjMfoSqA+3)?sR;MuVCqBO7zg z4;*Ay?oVye6Pd`brMq20?AjWFTx>dhS?I631Q$9Q=tB0XrC0O4Xj>^jxXs*YN!7>u zy9}b2SQlzntnGGevFkFiWBg(w)7|zet!-hLU^FNw?a5)WNtDz-{^}+6i`w!>9GBmx z`?Z}(O$bes4yDJ3-aEo0lp?*K-$5{R{z@{a+K0Q`Zvylq4$fbdv0pV@rPe?2cCR?2 z;vg`ZbM#Nmj_xCBDk(aHb50bl9_j5}e?Ginj&uFlMAO2h={NPm>)Hn5ddAMVE*?9% z&?rNmz+dVv2(QC3I*&<6$#Y-Eo3CFs_R2q6{f%u-ko}oVXy?^tb_>O-q-J@V-ih=l z+Q7x;nAsf{S}n34#qlpq_#C;#8UKstzP|f*Vb)TY_R~owMXqjp4(~%14wac63tqRV zb7ybQhVriZpJk2Hju#9E7^Y%tm~Q8@tN!TC9$#$BYDQPhYY&ub`bLM8nTH6;*Nt<6 zoQ>)(uG4Djdy%8k`8s#)-c{Rm(Tf)S2%2cFvpZyStmQsWLLIlc%lIxS|FVlQzaY=> zWo~+^;kl08^}Ef`rxGe(H#UC%dcwy{!!zLRi^a`mnVYvx}gMS(MP>9NNa+!Xd~ z*lp7BbSw&+He5PdGIGeIUpjE+Q2O2O$ZHjV-@j7;ex$Xk_f)F(Q^35Z-@)Lgxe73*7`}8|gHf&f9w(2e z#k?h{&mshC-Z~nKr84e3w!B|WB+ZXt;F+H1ZQq7nAN6#XayO zN=MBsZ3eHzZ2^N}cv6E=GAAs>cadxGOEs2$)_mPnH7C2en%OsM&ad`U^P|mqtr8g( z=_%VbZ^%Uh&8{4l8};3l%7<*vt~CR0L>Q=fH{!EKc5Q7c)u{1%ado4u7U;@8XluGz zU4FBb8s&AD5t|d!nSbL5m!1gecZzdI%=s$RM9b=YPPC8tq5#GN23@-bIZ%&0< z_?$>{wmNG1#gc-wdFFI}s}r#8z|&ou63>og+|Rn?Gu^oUAD2D8CnpTsy`TmXtjOIa zDeRT6G6acQ(`teWf=@mf;PXQ(yuCBmvQ#jTID=9CS#^k?_SbzDS5vaDr@6 zl#Gf(!Treh{t3h^)(3i_bV>zS53C#%V*v~fD-d8m9U+x5qG6ILhrT#M>J2|ZU_BwJ zC`!VC7}1bWX8bvYC-gC<|AGRBe@3v1$@2K%fc&6x4>hWnL@N^&ezZi!S45L^q3SGpBQcTLEQ&F%5!{u`+ zB!(lALA1hK(FqO!z_27ckO2pKOB^092umD}_Q`OjP$~n39O(UUK0KVuBUy2YWHy>- zfwMpp0UQqvvLP!p8MGpk@Eiib1$duOxJ&qODuWSU@&rdC;Q+vjh_k}uEJ*-B!jT9h znw5j2qdlELBa@Ug3f(C*4<;3b$KXC%JR(3DPb3jgQ7n*yboct$d#ljF}hhiNla3rvj zpdzzjW~CjLl;R+PK$%G5EfPggQ3_{~3d#@NEVuxl^7Zf?!nrue!mBoidD$9rhawbEN zg3%CH=_kxJ*~JM3g&`2U-%RD_dprM2dBEWk$Q&*SZ3(dPXd(~CMUx?d1)7KBk%@Q$ z*@6sB=D`PcsfZ_w0VNPE1lAGO3a%feR>)Y8EqhjPK#jsNm zV-?%X`;cw0|1QduPIO4Zha+~Bhy+SKq%yd~Dcmnq$bXfWuw;tyUy_CZmyxBF6^%&y zo4i)KZliSkll>BoXVM1m!|=9_{jjf3Eha4F|MNAKB>>kjQV7e3ic6~)m&V7FAtZz!&tl+npF2f&3_dfevRziu5$_c5f~w-}uti<$ zv|5TlXlg4yDu~=XJ=mxwW3m`(eJZLtB;Y6fickONfH_qdKBDrr7hJspPWj^rzY70?|yPEyjIY8!7DV){x~W?zvl43X5JF3 z-7&2l@dk5aJ9|3_(!q(n6MJ7Z;%c?tQBKWdx)ou1^&I!eRc4D9TLb4B4Qmfq>$jKnNMBWKQVpykn(yM_Rd% znI9z??A6Oj5S=jUBj!Y6>T%9R!2;*dMlItjKs&AGF_Ul!sH{0=SetQ5rnzdQy2@b1 z@-_9fm#JWo>Zot!w@ojkYn^^NtI9dV)2ZOy}pUAi((YzKeC SFPZR?Aeam{dYS#Yq<;Zdw;b>Q diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_disabled.png b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/resources/widgets/actions/solrindexerconfigurableoperations/icons/indexer_conf_operations_wizard_disabled.png deleted file mode 100644 index 9d6142245d98aee9dadf2c0669c8accb28a0a927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7984 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 { - @Override - public ActionResult perform(ActionContext actionContext) { - Map parametersMap = Maps.newHashMap(); - parametersMap.put(ConfigurableFlowContextParameterNames.TYPE_CODE.getName(), "SolrIndexerConfigurableOperationWizard"); - parametersMap.put("facetSearchConfig", actionContext.getData()); - this.sendOutput("operationWizard", parametersMap); - return new ActionResult("success", (Object) null); - } - - @Override - public boolean canPerform(ActionContext ctx) { - return CockpitAction.super.canPerform(ctx); - } - - @Override - public boolean needsConfirmation(ActionContext ctx) { - return CockpitAction.super.needsConfirmation(ctx); - } - - @Override - public String getConfirmationMessage(ActionContext ctx) { - return CockpitAction.super.getConfirmationMessage(ctx); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/src/tools/sapcx/commerce/search/backoffice/wizard/SolrIndexerConfigurableOperationStep.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/src/tools/sapcx/commerce/search/backoffice/wizard/SolrIndexerConfigurableOperationStep.java deleted file mode 100644 index eb427074..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/backoffice/src/tools/sapcx/commerce/search/backoffice/wizard/SolrIndexerConfigurableOperationStep.java +++ /dev/null @@ -1,115 +0,0 @@ -package tools.sapcx.commerce.search.backoffice.wizard; - -import java.util.*; - -import com.hybris.cockpitng.config.jaxb.wizard.ViewType; -import com.hybris.cockpitng.dataaccess.facades.type.DataType; -import com.hybris.cockpitng.engine.WidgetInstanceManager; - -import de.hybris.platform.servicelayer.cronjob.CronJobService; -import de.hybris.platform.solrfacetsearch.enums.IndexerOperationValues; -import de.hybris.platform.solrfacetsearch.model.config.SolrIndexedTypeModel; -import de.hybris.platform.solrfacetsearch.model.indexer.cron.SolrIndexerCronJobModel; -import de.hybris.platform.solrfacetsearchbackoffice.wizards.BaseSolrIndexerWizardStep; - -import org.zkoss.util.resource.Labels; -import org.zkoss.zk.ui.Component; -import org.zkoss.zul.*; - -import tools.sapcx.commerce.search.model.SolrIndexerConfigurableCronJobModel; - -public class SolrIndexerConfigurableOperationStep extends BaseSolrIndexerWizardStep { - private CronJobService cronJobService; - private String jobDefinitionCode; - - @Override - public void render(Component component, ViewType viewType, Map map, DataType dataType, WidgetInstanceManager widgetInstanceManager) { - this.setWidgetController(widgetInstanceManager); - this.initCustomView(component); - } - - private void initCustomView(final Component component) { - // Create Components - Combobox operationsCombo = initOperationsCombo(); - Combobox indexedTypesCombo = initIndexedTypesCombo(component); - Button startButton = initStartButton(component, operationsCombo, indexedTypesCombo); - - // Layout - Vlayout vlayout = new Vlayout(); - - // Second Row - Div firstRow = new Div(); - vlayout.appendChild(firstRow); - firstRow.appendChild(new Label(this.getLabelService().getObjectLabel("IndexerOperationValues"))); - firstRow.appendChild(operationsCombo); - - // Seperator - Separator separator = new Separator(); - separator.setBar(true); - vlayout.appendChild(separator); - - // Third Row - Div secondRow = new Div(); - vlayout.appendChild(secondRow); - secondRow.appendChild(new Label(this.getLabelService().getObjectLabel("SolrIndexedType"))); - secondRow.appendChild(indexedTypesCombo); - - Div forthRow = new Div(); - vlayout.appendChild(forthRow); - forthRow.appendChild(startButton); - component.appendChild(vlayout); - } - - private Button initStartButton(Component component, Combobox operationsCombo, Combobox indexedTypesCombo) { - Button startButton = new Button(); - startButton.setLabel(Labels.getLabel("com.hybris.cockpitng.widgets.configurableflow.create.solrindexer.cronjob.start")); - startButton.addEventListener("onClick", event -> { - SolrIndexerConfigurableCronJobModel cronJob = SolrIndexerConfigurableOperationStep.this.getCronJob(component); - cronJob.setIndexerOperation(operationsCombo.getSelectedItem().getValue()); - cronJob.setIndexedTypes(List.of(indexedTypesCombo.getSelectedItem().getValue())); - SolrIndexerConfigurableOperationStep.this.startCronJob(SolrIndexerConfigurableOperationStep.this.getWidgetController(), cronJob); - }); - return startButton; - } - - private Combobox initIndexedTypesCombo(Component component) { - final Combobox indexedTypesCombo = new Combobox(); - SolrIndexerCronJobModel solrIndexerCronJobModel = getCronJob(component); - indexedTypesCombo.setModel(new ListModelList<>(solrIndexerCronJobModel.getFacetSearchConfig().getSolrIndexedTypes())); - indexedTypesCombo.setItemRenderer((ComboitemRenderer) (comboItem, solrIndexedType, index) -> { - comboItem.setLabel(solrIndexedType.getType().getName()); - comboItem.setValue(solrIndexedType); - }); - return indexedTypesCombo; - } - - private Combobox initOperationsCombo() { - final Combobox operationsCombo = new Combobox(); - operationsCombo.setModel(new ListModelList<>(IndexerOperationValues.values())); - operationsCombo.setItemRenderer((radio, entity, index) -> { - IndexerOperationValues indexerOperation = (IndexerOperationValues) entity; - radio.setLabel(SolrIndexerConfigurableOperationStep.this.getLabelService().getObjectLabel(indexerOperation)); - radio.setValue(entity); - if (IndexerOperationValues.PARTIAL_UPDATE.equals(indexerOperation)) { - radio.setDisabled(true); - radio.setVisible(false); - } - }); - return operationsCombo; - } - - private SolrIndexerConfigurableCronJobModel getCronJob(Component component) { - SolrIndexerConfigurableCronJobModel job = this.getCurrentObject(component, SolrIndexerConfigurableCronJobModel.class); - job.setJob(cronJobService.getJob(jobDefinitionCode)); - return job; - } - - public void setCronJobService(CronJobService cronJobService) { - super.setCronJobService(cronJobService); - this.cronJobService = cronJobService; - } - - public void setJobDefinitionCode(String jobDefinitionCode) { - this.jobDefinitionCode = jobDefinitionCode; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/buildcallbacks.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/buildcallbacks.xml deleted file mode 100644 index b5ecfe6e..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/buildcallbacks.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml deleted file mode 100644 index d9aaef25..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/extensioninfo.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml deleted file mode 100644 index c52a1288..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/external-dependencies.xml +++ /dev/null @@ -1,10 +0,0 @@ - - 4.0.0 - tools.sapcx - sapcxsearch - 5.0.0-snapshot - jar - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/lib/.lastupdate b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/lib/.lastupdate deleted file mode 100644 index e69de29b..00000000 diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/project.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/project.properties deleted file mode 100644 index 102f315d..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/project.properties +++ /dev/null @@ -1,6 +0,0 @@ -# ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools -# ---------------------------------------------------------------------------- - -# Location of the file for the global platform spring application context -sapcxsearch.application-context=sapcxsearch-spring.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_de.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_de.properties deleted file mode 100644 index b60c531e..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_de.properties +++ /dev/null @@ -1,2 +0,0 @@ -type.SolrIndexerConfigurableCronJob.name=Solr Indexer Cron Job (konfigurierbar) -type.SolrIndexerConfigurableCronJob.indexedTypes.name=Indizierte Typen \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_en.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_en.properties deleted file mode 100644 index eababd6a..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/localization/sapcxsearch-locales_en.properties +++ /dev/null @@ -1,2 +0,0 @@ -type.SolrIndexerConfigurableCronJob.name=Solr Indexer Cron Job (configurable) -type.SolrIndexerConfigurableCronJob.indexedTypes.name=Indexed types \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-config.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-config.xml deleted file mode 100644 index 78c9bc57..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-config.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-spring.xml deleted file mode 100644 index 58e1a306..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-spring.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-widgets.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-widgets.xml deleted file mode 100644 index bf194753..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-backoffice-widgets.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-items.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-items.xml deleted file mode 100644 index c42fad75..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-items.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-spring.xml deleted file mode 100644 index 29667c55..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/resources/sapcxsearch-spring.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/constants/CxSearchConstants.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/constants/CxSearchConstants.java deleted file mode 100644 index 1378ef83..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/constants/CxSearchConstants.java +++ /dev/null @@ -1,10 +0,0 @@ -package tools.sapcx.commerce.search.constants; - -@SuppressWarnings({ "deprecation", "squid:CallToDeprecatedMethod" }) -public class CxSearchConstants extends GeneratedCxSearchConstants { - public static final String EXTENSIONNAME = "sapcxsearch"; - - private CxSearchConstants() { - // empty - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformable.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformable.java deleted file mode 100644 index ca11b707..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformable.java +++ /dev/null @@ -1,74 +0,0 @@ -package tools.sapcx.commerce.search.jobs; - -import static org.slf4j.LoggerFactory.getLogger; - -import java.util.List; -import java.util.stream.Collectors; - -import de.hybris.platform.cronjob.enums.CronJobResult; -import de.hybris.platform.cronjob.enums.CronJobStatus; -import de.hybris.platform.servicelayer.cronjob.AbstractJobPerformable; -import de.hybris.platform.servicelayer.cronjob.PerformResult; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfig; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfigService; -import de.hybris.platform.solrfacetsearch.config.IndexOperation; -import de.hybris.platform.solrfacetsearch.config.exceptions.FacetConfigServiceException; -import de.hybris.platform.solrfacetsearch.enums.IndexerOperationValues; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; -import de.hybris.platform.solrfacetsearch.model.config.SolrIndexedTypeModel; - -import org.slf4j.Logger; - -import tools.sapcx.commerce.search.model.SolrIndexerConfigurableCronJobModel; -import tools.sapcx.commerce.search.service.CxIndexerService; - -public class SolrIndexerConfigurableJobPerformable extends AbstractJobPerformable { - private static final Logger LOG = getLogger(SolrIndexerConfigurableJobPerformable.class); - - private CxIndexerService cxIndexerService; - private FacetSearchConfigService facetSearchConfigService; - - public SolrIndexerConfigurableJobPerformable(CxIndexerService cxIndexerService, FacetSearchConfigService facetSearchConfigService) { - this.cxIndexerService = cxIndexerService; - this.facetSearchConfigService = facetSearchConfigService; - } - - @Override - public PerformResult perform(SolrIndexerConfigurableCronJobModel jobModel) { - try { - FacetSearchConfig facetSearchConfig = getFacetSearchConfig(jobModel); - List indexedTypeNameList = getIndexedTypeNameList(jobModel); - IndexOperation indexOperation = getIndexerOperation(jobModel); - - cxIndexerService.performIndexForIndexedTypes(facetSearchConfig, indexOperation, indexedTypeNameList, jobModel.getIndexerHints()); - } catch (FacetConfigServiceException | IndexerException e) { - LOG.error(e.getMessage(), e); - return new PerformResult(CronJobResult.ERROR, CronJobStatus.ABORTED); - } - - return new PerformResult(CronJobResult.SUCCESS, CronJobStatus.FINISHED); - } - - private FacetSearchConfig getFacetSearchConfig(SolrIndexerConfigurableCronJobModel jobModel) throws FacetConfigServiceException { - return facetSearchConfigService.getConfiguration(jobModel.getFacetSearchConfig().getName()); - } - - private List getIndexedTypeNameList(SolrIndexerConfigurableCronJobModel jobModel) { - return jobModel.getIndexedTypes().stream() - .map(SolrIndexedTypeModel::getIdentifier) - .collect(Collectors.toList()); - } - - private IndexOperation getIndexerOperation(SolrIndexerConfigurableCronJobModel jobModel) { - if (jobModel.getIndexerOperation() == IndexerOperationValues.FULL) { - return IndexOperation.FULL; - } else if (jobModel.getIndexerOperation() == IndexerOperationValues.UPDATE) { - return IndexOperation.UPDATE; - } else if (jobModel.getIndexerOperation() == IndexerOperationValues.DELETE) { - return IndexOperation.DELETE; - } else if (jobModel.getIndexerOperation() == IndexerOperationValues.PARTIAL_UPDATE) { - return IndexOperation.PARTIAL_UPDATE; - } - return IndexOperation.FULL; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetDisplayNameProvider.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetDisplayNameProvider.java deleted file mode 100644 index b393e3db..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetDisplayNameProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -package tools.sapcx.commerce.search.provider; - -import java.util.Locale; - -import de.hybris.platform.core.model.c2l.LanguageModel; -import de.hybris.platform.core.model.enumeration.EnumerationValueModel; -import de.hybris.platform.servicelayer.i18n.CommonI18NService; -import de.hybris.platform.servicelayer.type.TypeService; -import de.hybris.platform.solrfacetsearch.config.IndexedProperty; -import de.hybris.platform.solrfacetsearch.provider.FacetDisplayNameProvider; -import de.hybris.platform.solrfacetsearch.provider.FacetValueDisplayNameProvider; -import de.hybris.platform.solrfacetsearch.search.SearchQuery; - -public class CxHybrisEnumFacetDisplayNameProvider implements FacetDisplayNameProvider, FacetValueDisplayNameProvider { - private String enumType; - private TypeService typeService; - private CommonI18NService commonI18NService; - - public CxHybrisEnumFacetDisplayNameProvider(String enumType, TypeService typeService, CommonI18NService commonI18NService) { - this.enumType = enumType; - this.typeService = typeService; - this.commonI18NService = commonI18NService; - } - - @Override - public String getDisplayName(SearchQuery searchQuery, String value) { - try { - EnumerationValueModel enumValue = typeService.getEnumerationValue(enumType, value); - LanguageModel language = commonI18NService.getLanguage(searchQuery.getLanguage()); - Locale locale = commonI18NService.getLocaleForLanguage(language); - return enumValue.getName(locale); - } catch (RuntimeException e) { - return value; - } - } - - @Override - public String getDisplayName(SearchQuery searchQuery, IndexedProperty indexedProperty, String value) { - return getDisplayName(searchQuery, value); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetSortProvider.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetSortProvider.java deleted file mode 100644 index d5a20ccd..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxHybrisEnumFacetSortProvider.java +++ /dev/null @@ -1,31 +0,0 @@ -package tools.sapcx.commerce.search.provider; - -import java.util.Comparator; - -import de.hybris.platform.core.model.enumeration.EnumerationValueModel; -import de.hybris.platform.servicelayer.type.TypeService; -import de.hybris.platform.solrfacetsearch.config.FacetSortProvider; -import de.hybris.platform.solrfacetsearch.config.IndexedProperty; -import de.hybris.platform.solrfacetsearch.config.IndexedType; -import de.hybris.platform.solrfacetsearch.search.FacetValue; - -public class CxHybrisEnumFacetSortProvider implements FacetSortProvider { - private String enumType; - private TypeService typeService; - private Comparator comparator; - - public CxHybrisEnumFacetSortProvider(String enumType, TypeService typeService) { - this.enumType = enumType; - this.typeService = typeService; - this.comparator = (o1, o2) -> { - EnumerationValueModel enum1 = this.typeService.getEnumerationValue(this.enumType, o1.getName()); - EnumerationValueModel enum2 = this.typeService.getEnumerationValue(this.enumType, o2.getName()); - return enum1.getSequenceNumber().compareTo(enum2.getSequenceNumber()); - }; - } - - @Override - public Comparator getComparatorForTypeAndProperty(IndexedType indexedType, IndexedProperty indexedProperty) { - return comparator; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxInheritanceValueProvider.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxInheritanceValueProvider.java deleted file mode 100644 index 56fcc4bc..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxInheritanceValueProvider.java +++ /dev/null @@ -1,56 +0,0 @@ -package tools.sapcx.commerce.search.provider; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import de.hybris.platform.core.model.product.ProductModel; -import de.hybris.platform.solrfacetsearch.config.IndexConfig; -import de.hybris.platform.solrfacetsearch.config.IndexedProperty; -import de.hybris.platform.solrfacetsearch.config.exceptions.FieldValueProviderException; -import de.hybris.platform.solrfacetsearch.provider.FieldNameProvider; -import de.hybris.platform.solrfacetsearch.provider.FieldValue; -import de.hybris.platform.solrfacetsearch.provider.FieldValueProvider; -import de.hybris.platform.variants.model.VariantProductModel; - -public class CxInheritanceValueProvider implements FieldValueProvider { - private FieldNameProvider fieldNameProvider; - - @Override - public Collection getFieldValues(IndexConfig indexConfig, IndexedProperty indexedProperty, Object o) throws FieldValueProviderException { - if (o instanceof ProductModel) { - Object value = getInheritedValue(indexedProperty, (ProductModel) o); - if (value != null) { - return createFieldValues(indexedProperty, value); - } - } - return Collections.EMPTY_LIST; - } - - protected List createFieldValues(IndexedProperty indexedProperty, Object value) { - List fieldValues = new ArrayList<>(); - final Collection fieldNames = fieldNameProvider.getFieldNames(indexedProperty, null); - for (final String fieldName : fieldNames) { - fieldValues.add(new FieldValue(fieldName, value)); - } - return fieldValues; - } - - protected Object getInheritedValue(IndexedProperty indexedProperty, ProductModel product) { - String propertyName = indexedProperty.getName(); - Object value = product.getProperty(propertyName); - if (value != null) { - return value; - } - - if (product instanceof VariantProductModel) { - return getInheritedValue(indexedProperty, ((VariantProductModel) product).getBaseProduct()); - } - return null; - } - - public void setFieldNameProvider(FieldNameProvider fieldNameProvider) { - this.fieldNameProvider = fieldNameProvider; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxReferencedItemDelegatingFieldValueProvider.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxReferencedItemDelegatingFieldValueProvider.java deleted file mode 100644 index abf973c7..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/provider/CxReferencedItemDelegatingFieldValueProvider.java +++ /dev/null @@ -1,90 +0,0 @@ -package tools.sapcx.commerce.search.provider; - -import static org.apache.commons.collections4.MapUtils.emptyIfNull; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.servicelayer.model.ModelService; -import de.hybris.platform.solrfacetsearch.config.IndexConfig; -import de.hybris.platform.solrfacetsearch.config.IndexedProperty; -import de.hybris.platform.solrfacetsearch.config.exceptions.FieldValueProviderException; -import de.hybris.platform.solrfacetsearch.provider.FieldValue; -import de.hybris.platform.solrfacetsearch.provider.FieldValueProvider; - -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -public class CxReferencedItemDelegatingFieldValueProvider implements FieldValueProvider, ApplicationContextAware { - private static final String MISSING_VALUEPROVIDERPARAMETER_EXCEPTION = "Missing required value provider parameter '%s', please check configuration of indexed property '%s'!"; - private static final String MISSING_VALUEPROVIDERBEAN_EXCEPTION = "Could not find delegated FieldValueProvider with ID '%s', please check configuration of indexed property '%s'!"; - - private static final String REFERENCE_ATTRIBUTE_KEY = "referenceAttribute"; - private static final String DELEGATE_KEY = "delegate"; - - private ApplicationContext applicationContext; - private ModelService modelService; - - public CxReferencedItemDelegatingFieldValueProvider(ModelService modelService) { - this.modelService = modelService; - } - - @Override - public Collection getFieldValues(IndexConfig indexConfig, IndexedProperty indexedProperty, Object object) throws FieldValueProviderException { - final FieldValueProvider delegate = getDelegate(indexedProperty); - final String referencedAttributeName = getRequiredValueProviderParameter(indexedProperty, REFERENCE_ATTRIBUTE_KEY); - - if (object instanceof ItemModel) { - final ItemModel item = (ItemModel) object; - final Object referencedObject = modelService.getAttributeValue(item, referencedAttributeName); - if (referencedObject instanceof ItemModel) { - final ItemModel referencedItem = (ItemModel) referencedObject; - return getFieldValuesFromDelegate(indexConfig, indexedProperty, referencedItem, delegate); - } else if (referencedObject instanceof Collection) { - final Collection elements = (Collection) referencedObject; - final Collection fieldValues = new ArrayList<>(); - for (Object element : elements) { - fieldValues.addAll(getFieldValuesFromDelegate(indexConfig, indexedProperty, element, delegate)); - } - return fieldValues; - } - } - - return List.of(); - } - - private Collection getFieldValuesFromDelegate(IndexConfig indexConfig, IndexedProperty indexedProperty, Object referencedObject, FieldValueProvider delegate) - throws FieldValueProviderException { - return delegate.getFieldValues(indexConfig, indexedProperty, referencedObject); - } - - private FieldValueProvider getDelegate(IndexedProperty indexedProperty) throws FieldValueProviderException { - final String delegateBeanId = getRequiredValueProviderParameter(indexedProperty, DELEGATE_KEY); - try { - return applicationContext.getBean(delegateBeanId, FieldValueProvider.class); - } catch (BeansException e) { - final String msg = String.format(MISSING_VALUEPROVIDERBEAN_EXCEPTION, delegateBeanId, indexedProperty.getName()); - throw new FieldValueProviderException(msg, e); - } - } - - private String getRequiredValueProviderParameter(final IndexedProperty indexedProperty, final String key) throws FieldValueProviderException { - final Map valueProviderParameters = emptyIfNull(indexedProperty.getValueProviderParameters()); - final String parameterValue = valueProviderParameters.get(key); - return Optional.ofNullable(parameterValue) - .orElseThrow(() -> { - final String msg = String.format(MISSING_VALUEPROVIDERPARAMETER_EXCEPTION, DELEGATE_KEY, indexedProperty.getName()); - return new FieldValueProviderException(msg); - }); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxHybrisEnumOrdinalValueResolver.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxHybrisEnumOrdinalValueResolver.java deleted file mode 100644 index 76df9add..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxHybrisEnumOrdinalValueResolver.java +++ /dev/null @@ -1,56 +0,0 @@ -package tools.sapcx.commerce.search.resolver; - -import static org.apache.commons.collections4.MapUtils.emptyIfNull; - -import java.util.HashMap; -import java.util.Map; - -import de.hybris.platform.core.HybrisEnumValue; -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.solrfacetsearch.config.IndexedProperty; -import de.hybris.platform.solrfacetsearch.config.exceptions.FieldValueProviderException; -import de.hybris.platform.solrfacetsearch.indexer.IndexerBatchContext; -import de.hybris.platform.solrfacetsearch.indexer.spi.InputDocument; -import de.hybris.platform.solrfacetsearch.provider.impl.AbstractValueResolver; - -import org.apache.commons.lang3.StringUtils; - -public class CxHybrisEnumOrdinalValueResolver extends AbstractValueResolver { - private static final int DEFAULT_FALLBACK_VALUE = 9999; - - private Map enumValuesOrdinalMap = new HashMap<>(); - private int fallbackValue; - - public CxHybrisEnumOrdinalValueResolver(Map enumValuesOrdinalMap) { - this(enumValuesOrdinalMap, DEFAULT_FALLBACK_VALUE); - } - - public CxHybrisEnumOrdinalValueResolver(Map enumValuesOrdinalMap, int fallbackValue) { - this.enumValuesOrdinalMap.putAll(emptyIfNull(enumValuesOrdinalMap)); - this.fallbackValue = fallbackValue; - } - - @Override - protected void addFieldValues(InputDocument inputDocument, IndexerBatchContext indexerContext, IndexedProperty indexedProperty, ItemModel item, - ValueResolverContext resolverContext) throws FieldValueProviderException { - String propertyName = getPropertyName(indexedProperty); - HybrisEnumValue enumValue = item.getProperty(propertyName); - int enumOrdinal = mapEnumValueToOrdinal(enumValue); - inputDocument.addField(indexedProperty, enumOrdinal); - } - - private String getPropertyName(IndexedProperty indexedProperty) { - String providerParameter = indexedProperty.getValueProviderParameter(); - String indexedPropertyName = indexedProperty.getName(); - return StringUtils.defaultIfBlank(providerParameter, indexedPropertyName); - } - - private int mapEnumValueToOrdinal(HybrisEnumValue enumValue) { - if (enumValue == null) { - return fallbackValue; - } - - String code = enumValue.getCode(); - return enumValuesOrdinalMap.getOrDefault(code, fallbackValue); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxReferencedItemDelegatingValueResolver.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxReferencedItemDelegatingValueResolver.java deleted file mode 100644 index 15fc8e14..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/resolver/CxReferencedItemDelegatingValueResolver.java +++ /dev/null @@ -1,84 +0,0 @@ -package tools.sapcx.commerce.search.resolver; - -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.servicelayer.model.ModelService; -import de.hybris.platform.solrfacetsearch.config.IndexedProperty; -import de.hybris.platform.solrfacetsearch.config.exceptions.FieldValueProviderException; -import de.hybris.platform.solrfacetsearch.indexer.IndexerBatchContext; -import de.hybris.platform.solrfacetsearch.indexer.spi.InputDocument; -import de.hybris.platform.solrfacetsearch.provider.ValueResolver; - -import org.apache.commons.collections4.MapUtils; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; - -public class CxReferencedItemDelegatingValueResolver implements ValueResolver, ApplicationContextAware { - private static final String MISSING_VALUERESOLVERPARAMETER_EXCEPTION = "Missing required value resolver parameter '%s', please check configuration of indexed property '%s'!"; - private static final String MISSING_VALUERESOLVERBEAN_EXCEPTION = "Could not find delegated ValueResolver with ID '%s', please check configuration of indexed property '%s'!"; - - private static final String REFERENCE_ATTRIBUTE_KEY = "referenceAttribute"; - private static final String DELEGATE_KEY = "delegate"; - - private ApplicationContext applicationContext; - private ModelService modelService; - - public CxReferencedItemDelegatingValueResolver(ModelService modelService) { - this.modelService = modelService; - } - - @Override - public void resolve(InputDocument inputDocument, IndexerBatchContext indexerBatchContext, Collection indexedProperties, ItemModel item) - throws FieldValueProviderException { - for (IndexedProperty indexedProperty : indexedProperties) { - final ValueResolver delegate = getDelegate(indexedProperty); - final String referencedAttributeName = getRequiredValueProviderParameter(indexedProperty, REFERENCE_ATTRIBUTE_KEY); - final Object referencedObject = modelService.getAttributeValue(item, referencedAttributeName); - if (referencedObject instanceof ItemModel) { - final ItemModel referencedItem = (ItemModel) referencedObject; - resolveWithDelegate(inputDocument, indexerBatchContext, indexedProperty, referencedItem, delegate); - } else if (referencedObject instanceof Collection) { - for (Object element : (Collection) referencedObject) { - if (element instanceof ItemModel) { - resolveWithDelegate(inputDocument, indexerBatchContext, indexedProperty, (ItemModel) element, delegate); - } - } - } - } - } - - private void resolveWithDelegate(InputDocument inputDocument, IndexerBatchContext indexerBatchContext, IndexedProperty indexedProperty, ItemModel referencedItem, - ValueResolver delegate) throws FieldValueProviderException { - delegate.resolve(inputDocument, indexerBatchContext, List.of(indexedProperty), referencedItem); - } - - private ValueResolver getDelegate(IndexedProperty indexedProperty) throws FieldValueProviderException { - final String delegateBeanId = getRequiredValueProviderParameter(indexedProperty, DELEGATE_KEY); - try { - return applicationContext.getBean(delegateBeanId, ValueResolver.class); - } catch (BeansException e) { - final String msg = String.format(MISSING_VALUERESOLVERBEAN_EXCEPTION, delegateBeanId, indexedProperty.getName()); - throw new FieldValueProviderException(msg, e); - } - } - - private String getRequiredValueProviderParameter(final IndexedProperty indexedProperty, final String key) throws FieldValueProviderException { - final Map valueProviderParameters = MapUtils.emptyIfNull(indexedProperty.getValueProviderParameters()); - final String parameterValue = valueProviderParameters.get(key); - return Optional.ofNullable(parameterValue) - .orElseThrow(() -> { - final String msg = String.format(MISSING_VALUERESOLVERPARAMETER_EXCEPTION, DELEGATE_KEY, indexedProperty.getName()); - return new FieldValueProviderException(msg); - }); - } - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - this.applicationContext = applicationContext; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexer.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexer.java deleted file mode 100644 index cc8088c2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexer.java +++ /dev/null @@ -1,87 +0,0 @@ -package tools.sapcx.commerce.search.service; - -import static org.apache.commons.collections4.ListUtils.emptyIfNull; - -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import de.hybris.platform.core.PK; -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; - -/** - * Indexer interface to perform indexing operations against the underlying search index. - *

- * The indexer can be used to add or remove items to/from the index. The items can be - * provided as a list or by performing the queries defined in the search configuration. - */ -public interface CxIndexer { - /** - * Add a single item to the index. - * - * @param item item to add - * @param type of item - * @throws IndexerException if indexer exception occurs - */ - default void addItem(T item) throws IndexerException { - addItems(List.of(item)); - } - - /** - * Add a list of items to the index. - * - * @param items items to add - * @param type of item - * @throws IndexerException if indexer exception occurs - */ - void addItems(List items) throws IndexerException; - - /** - * Add items to the index by using the configured query. - * - * @throws IndexerException if indexer exception occurs - */ - void addItemsByQuery() throws IndexerException; - - /** - * Remove a single item from the index. - * - * @param item item to add - * @param type of item - * @throws IndexerException if indexer exception occurs - */ - default void removeItem(T item) throws IndexerException { - removeItems(List.of(item)); - } - - /** - * Remove a list of items from the index. - * - * @param items items to remove - * @param type of item - * @throws IndexerException if indexer exception occurs - */ - void removeItems(List items) throws IndexerException; - - /** - * Remove items from the index by using the configured query. - * - * @throws IndexerException if indexer exception occurs - */ - void removeItemsByQuery() throws IndexerException; - - /** - * Get a list of primary keys from a list of items. - * - * @param items list of items - * @return list of primary keys - * @param type of item - */ - default List getPks(List items) { - return emptyIfNull(items).stream() - .map(ItemModel::getPk) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexerService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexerService.java deleted file mode 100644 index 2e0bfeae..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/CxIndexerService.java +++ /dev/null @@ -1,105 +0,0 @@ -package tools.sapcx.commerce.search.service; - -import java.util.List; -import java.util.Map; - -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfig; -import de.hybris.platform.solrfacetsearch.config.IndexOperation; -import de.hybris.platform.solrfacetsearch.config.exceptions.FacetConfigServiceException; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; - -/** - * Cx Indexer Service with custom indexer operation functions. - */ -public interface CxIndexerService { - /** - * Get the search indexer for given search config and indexed type. - * - * @param searchConfig search config code - * @param indexedType indexed type code - * @return search indexer - * @throws FacetConfigServiceException if no indexer was found - */ - CxIndexer getSearchIndexer(String searchConfig, String indexedType) throws FacetConfigServiceException; - - /** - * Add a single item to the index. - * - * @param searchConfig search config to use - * @param indexedType indexed type to use - * @param item item to add - * @param type of item - * @throws IndexerException if indexer exception occurs - */ - default void addItemToIndex(String searchConfig, String indexedType, T item) throws FacetConfigServiceException, IndexerException { - getSearchIndexer(searchConfig, indexedType).addItem(item); - } - - /** - * Add a list of items to the index. - * - * @param searchConfig search config to use - * @param indexedType indexed type to use - * @param items items to add - * @param type of items - * @throws IndexerException if indexer exception occurs - */ - default void addItemsToIndex(String searchConfig, String indexedType, List items) throws FacetConfigServiceException, IndexerException { - getSearchIndexer(searchConfig, indexedType).addItems(items); - } - - /** - * Remove a single item from the index. - * - * @param searchConfig search config to use - * @param indexedType indexed type to use - * @param item item to remove - * @param type of item - * @throws IndexerException if indexer exception occurs - */ - default void removeItemFromIndex(String searchConfig, String indexedType, T item) throws FacetConfigServiceException, IndexerException { - getSearchIndexer(searchConfig, indexedType).removeItem(item); - } - - /** - * Remove a list of items from the index. - * - * @param searchConfig search config to use - * @param indexedType indexed type to use - * @param items items to remove - * @param type of items - * @throws IndexerException if indexer exception occurs - */ - default void removeItemsFromIndex(String searchConfig, String indexedType, List items) throws FacetConfigServiceException, IndexerException { - getSearchIndexer(searchConfig, indexedType).removeItems(items); - } - - /** - * Perform index operation for given search config, index operation and a list of indexed types. - * - * @param facetSearchConfig facet search config to use - * @param indexOperation index operation to perform - * @param indexedTypeNameList list of indexed types to be indexed - * @throws IndexerException if indexer exception occurs - */ - void performIndexForIndexedTypes( - FacetSearchConfig facetSearchConfig, - IndexOperation indexOperation, - List indexedTypeNameList) throws IndexerException; - - /** - * Perform index Operation for given search config, index operation, list of indexed types and map of hints. - * - * @param facetSearchConfig facet search config to use - * @param indexOperation index operation to perform - * @param indexedTypeNameList list of indexed types to be indexed - * @param indexerHints map of indexer hints to be included - * @throws IndexerException if indexer exception occurs - */ - void performIndexForIndexedTypes( - FacetSearchConfig facetSearchConfig, - IndexOperation indexOperation, - List indexedTypeNameList, - Map indexerHints) throws IndexerException; -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexer.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexer.java deleted file mode 100644 index bbe230ea..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexer.java +++ /dev/null @@ -1,41 +0,0 @@ -package tools.sapcx.commerce.search.service; - -import java.util.List; - -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfig; -import de.hybris.platform.solrfacetsearch.config.IndexedType; -import de.hybris.platform.solrfacetsearch.indexer.IndexerService; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; - -class DefaultCxIndexer implements CxIndexer { - private IndexerService indexerService; - private FacetSearchConfig searchConfig; - private IndexedType indexedType; - - public DefaultCxIndexer(IndexerService indexerService, FacetSearchConfig searchConfig, IndexedType indexedType) { - this.indexerService = indexerService; - this.searchConfig = searchConfig; - this.indexedType = indexedType; - } - - @Override - public void addItemsByQuery() throws IndexerException { - indexerService.updateTypeIndex(searchConfig, indexedType); - } - - @Override - public void addItems(List items) throws IndexerException { - indexerService.updateTypeIndex(searchConfig, indexedType, getPks(items)); - } - - @Override - public void removeItemsByQuery() throws IndexerException { - indexerService.deleteTypeIndex(searchConfig, indexedType); - } - - @Override - public void removeItems(List items) throws IndexerException { - indexerService.deleteTypeIndex(searchConfig, indexedType, getPks(items)); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexerService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexerService.java deleted file mode 100644 index 4fc9fbba..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/service/DefaultCxIndexerService.java +++ /dev/null @@ -1,77 +0,0 @@ -package tools.sapcx.commerce.search.service; - -import static org.slf4j.LoggerFactory.getLogger; - -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfig; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfigService; -import de.hybris.platform.solrfacetsearch.config.IndexOperation; -import de.hybris.platform.solrfacetsearch.config.IndexedType; -import de.hybris.platform.solrfacetsearch.config.exceptions.FacetConfigServiceException; -import de.hybris.platform.solrfacetsearch.indexer.IndexerService; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; -import de.hybris.platform.solrfacetsearch.indexer.strategies.IndexerStrategy; -import de.hybris.platform.solrfacetsearch.indexer.strategies.IndexerStrategyFactory; - -import org.slf4j.Logger; - -public class DefaultCxIndexerService implements CxIndexerService { - private static final Logger LOG = getLogger(DefaultCxIndexerService.class); - - private final IndexerStrategyFactory indexerStrategyFactory; - private final FacetSearchConfigService facetSearchConfigService; - private final IndexerService indexerService; - - public DefaultCxIndexerService( - IndexerStrategyFactory indexerStrategyFactory, - FacetSearchConfigService facetSearchConfigService, - IndexerService indexerService) { - this.indexerStrategyFactory = indexerStrategyFactory; - this.facetSearchConfigService = facetSearchConfigService; - this.indexerService = indexerService; - } - - @Override - public CxIndexer getSearchIndexer(String searchConfig, String indexedType) throws FacetConfigServiceException { - FacetSearchConfig config = facetSearchConfigService.getConfiguration(searchConfig); - IndexedType type = facetSearchConfigService.resolveIndexedType(config, indexedType); - return new DefaultCxIndexer(indexerService, config, type); - } - - @Override - public void performIndexForIndexedTypes(FacetSearchConfig facetSearchConfig, IndexOperation indexOperation, List indexedTypeNameList) throws IndexerException { - performIndexForIndexedTypes(facetSearchConfig, indexOperation, indexedTypeNameList, Collections.emptyMap()); - } - - @Override - public void performIndexForIndexedTypes( - FacetSearchConfig facetSearchConfig, - IndexOperation indexOperation, - List indexedTypeNameList, - Map indexerHints) throws IndexerException { - List indexedTypeList = getTypesToIndex(facetSearchConfig, indexedTypeNameList); - for (IndexedType indexedType : indexedTypeList) { - LOG.info(String.format("Perform index operation '%s' for indexed type '%s'", indexOperation, indexedType.getIdentifier())); - IndexerStrategy indexerStrategy = createIndexerStrategy(facetSearchConfig); - indexerStrategy.setIndexOperation(indexOperation); - indexerStrategy.setFacetSearchConfig(facetSearchConfig); - indexerStrategy.setIndexedType(indexedType); - indexerStrategy.setIndexerHints(indexerHints); - indexerStrategy.execute(); - } - } - - private List getTypesToIndex(FacetSearchConfig facetSearchConfig, List indexedTypeNameList) { - return facetSearchConfig.getIndexConfig().getIndexedTypes().values().stream() - .filter(indexedType -> indexedTypeNameList.contains(indexedType.getIdentifier())) - .collect(Collectors.toList()); - } - - private IndexerStrategy createIndexerStrategy(FacetSearchConfig facetSearchConfig) throws IndexerException { - return indexerStrategyFactory.createIndexerStrategy(facetSearchConfig); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SearchQueryCodec.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SearchQueryCodec.java deleted file mode 100644 index bdc0ef05..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SearchQueryCodec.java +++ /dev/null @@ -1,12 +0,0 @@ -package tools.sapcx.commerce.search.util; - -/** - * INFO: This interface is an exact copy of de.hybris.platform.commercewebservices.core.util.ws.SearchQueryCodec - * This was done so that we have this interface accessible to our Facade Layer classes (while the Original - * is placed in the WebContext and hence is not reachable from Facade Layer) - */ -public interface SearchQueryCodec { - QUERY decodeQuery(String query); - - String encodeQuery(QUERY query); -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SolrSearchQueryCodec.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SolrSearchQueryCodec.java deleted file mode 100644 index daca4582..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/src/tools/sapcx/commerce/search/util/SolrSearchQueryCodec.java +++ /dev/null @@ -1,74 +0,0 @@ -package tools.sapcx.commerce.search.util; - -import java.util.ArrayList; -import java.util.List; - -import de.hybris.platform.commerceservices.search.solrfacetsearch.data.SolrSearchQueryData; -import de.hybris.platform.commerceservices.search.solrfacetsearch.data.SolrSearchQueryTermData; - -/** - * INFO: This class is an exact copy of de.hybris.platform.commercewebservices.core.util.ws.impl.DefaultSearchQueryCodec - * This was done so that we have this class accessible to our Facade Layer classes (while the Original Class - * stays in the WebContext and hence is not reachable from Facade Layer) - */ -public class SolrSearchQueryCodec implements SearchQueryCodec { - protected static final int NEXT_TERM = 2; - - @Override - public SolrSearchQueryData decodeQuery(final String queryString) { - final SolrSearchQueryData searchQuery = new SolrSearchQueryData(); - final List filters = new ArrayList(); - - if (queryString == null) { - return searchQuery; - } - - final String[] parts = queryString.split(":"); - - if (parts.length > 0) { - searchQuery.setFreeTextSearch(parts[0]); - if (parts.length > 1) { - searchQuery.setSort(parts[1]); - } - } - - for (int i = NEXT_TERM; i < parts.length; i = i + NEXT_TERM) { - final SolrSearchQueryTermData term = new SolrSearchQueryTermData(); - term.setKey(parts[i]); - term.setValue(parts[i + 1]); - filters.add(term); - } - searchQuery.setFilterTerms(filters); - - return searchQuery; - } - - @Override - public String encodeQuery(final SolrSearchQueryData searchQueryData) { - if (searchQueryData == null) { - return null; - } - - final StringBuilder builder = new StringBuilder(); - builder.append((searchQueryData.getFreeTextSearch() == null) ? "" : searchQueryData.getFreeTextSearch()); - - if (searchQueryData.getSort() != null // - || (searchQueryData.getFilterTerms() != null && !searchQueryData.getFilterTerms().isEmpty())) { - builder.append(":"); - builder.append((searchQueryData.getSort() == null) ? "" : searchQueryData.getSort()); - } - - final List terms = searchQueryData.getFilterTerms(); - if (terms != null && !terms.isEmpty()) { - for (final SolrSearchQueryTermData term : searchQueryData.getFilterTerms()) { - builder.append(":"); - builder.append(term.getKey()); - builder.append(":"); - builder.append(term.getValue()); - } - } - - // URLEncode? - return builder.toString(); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/config/ExtensionConfigurationTests.java deleted file mode 100644 index 1e9be2c9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/config/ExtensionConfigurationTests.java +++ /dev/null @@ -1,20 +0,0 @@ -package tools.sapcx.commerce.search.config; - -import de.hybris.bootstrap.annotations.UnitTest; - -import org.junit.Test; - -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; - -@UnitTest -public class ExtensionConfigurationTests { - @Test - public void extensionConfiguration() { - InstalledExtensionVerifier.verifier() - .requires("sapcommercetoolkit") - .requires("backoffice") - .requires("solrfacetsearch") - .requires("solrfacetsearchbackoffice") - .verify(); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformableTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformableTests.java deleted file mode 100644 index 7408b1bc..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/jobs/SolrIndexerConfigurableJobPerformableTests.java +++ /dev/null @@ -1,86 +0,0 @@ -package tools.sapcx.commerce.search.jobs; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; - -import java.util.List; - -import de.hybris.bootstrap.annotations.UnitTest; -import de.hybris.platform.cronjob.enums.CronJobResult; -import de.hybris.platform.cronjob.enums.CronJobStatus; -import de.hybris.platform.servicelayer.cronjob.PerformResult; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfig; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfigService; -import de.hybris.platform.solrfacetsearch.config.IndexOperation; -import de.hybris.platform.solrfacetsearch.config.exceptions.FacetConfigServiceException; -import de.hybris.platform.solrfacetsearch.enums.IndexerOperationValues; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; -import de.hybris.platform.solrfacetsearch.model.config.SolrFacetSearchConfigModel; -import de.hybris.platform.solrfacetsearch.model.config.SolrIndexedTypeModel; - -import org.junit.Before; -import org.junit.Test; - -import tools.sapcx.commerce.search.model.SolrIndexerConfigurableCronJobModel; -import tools.sapcx.commerce.search.service.CxIndexerService; - -@UnitTest -public class SolrIndexerConfigurableJobPerformableTests { - private SolrIndexerConfigurableJobPerformable jobPerformable; - private CxIndexerService cxIndexerService; - private FacetSearchConfigService facetSearchConfigService; - private SolrIndexerConfigurableCronJobModel jobModel; - private SolrFacetSearchConfigModel configModel; - private FacetSearchConfig facetSearchConfig; - - @Before - public void setUp() throws Exception { - cxIndexerService = mock(CxIndexerService.class); - facetSearchConfigService = mock(FacetSearchConfigService.class); - jobPerformable = new SolrIndexerConfigurableJobPerformable(cxIndexerService, facetSearchConfigService); - - jobModel = createTestableItemModel(SolrIndexerConfigurableCronJobModel.class); - configModel = createTestableItemModel(SolrFacetSearchConfigModel.class); - configModel.setName("test-config"); - - SolrIndexedTypeModel solrIndexedTypeModelA = createTestableItemModel(SolrIndexedTypeModel.class); - solrIndexedTypeModelA.setIdentifier("type-a"); - - SolrIndexedTypeModel solrIndexedTypeModelB = createTestableItemModel(SolrIndexedTypeModel.class); - solrIndexedTypeModelB.setIdentifier("type-b"); - - jobModel.setFacetSearchConfig(configModel); - jobModel.setIndexedTypes(List.of(solrIndexedTypeModelA, solrIndexedTypeModelB)); - jobModel.setIndexerOperation(IndexerOperationValues.FULL); - - facetSearchConfig = new FacetSearchConfig(); - } - - @Test - public void verifyPerform() throws FacetConfigServiceException { - when(facetSearchConfigService.getConfiguration("test-config")).thenReturn(facetSearchConfig); - PerformResult result = jobPerformable.perform(jobModel); - assertThat(result.getResult()).isEqualTo(CronJobResult.SUCCESS); - assertThat(result.getStatus()).isEqualTo(CronJobStatus.FINISHED); - } - - @Test() - public void verifyPerformWithConfigError() throws FacetConfigServiceException { - when(facetSearchConfigService.getConfiguration("test-config")).thenThrow(FacetConfigServiceException.class); - PerformResult result = jobPerformable.perform(jobModel); - assertThat(result.getResult()).isEqualTo(CronJobResult.ERROR); - assertThat(result.getStatus()).isEqualTo(CronJobStatus.ABORTED); - } - - @Test() - public void verifyPerformWithIndexerError() throws FacetConfigServiceException, IndexerException { - when(facetSearchConfigService.getConfiguration("test-config")).thenReturn(facetSearchConfig); - - doThrow(IndexerException.class).doNothing().when(cxIndexerService).performIndexForIndexedTypes(facetSearchConfig, IndexOperation.FULL, List.of("type-a", "type-b"), null); - - PerformResult result = jobPerformable.perform(jobModel); - assertThat(result.getResult()).isEqualTo(CronJobResult.ERROR); - assertThat(result.getStatus()).isEqualTo(CronJobStatus.ABORTED); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/service/DefaultCxIndexerServiceTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/service/DefaultCxIndexerServiceTests.java deleted file mode 100644 index 37ad4f44..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsearch/testsrc/tools/sapcx/commerce/search/service/DefaultCxIndexerServiceTests.java +++ /dev/null @@ -1,134 +0,0 @@ -package tools.sapcx.commerce.search.service; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Map; - -import de.hybris.bootstrap.annotations.UnitTest; -import de.hybris.platform.core.model.ItemModel; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfig; -import de.hybris.platform.solrfacetsearch.config.FacetSearchConfigService; -import de.hybris.platform.solrfacetsearch.config.IndexConfig; -import de.hybris.platform.solrfacetsearch.config.IndexOperation; -import de.hybris.platform.solrfacetsearch.config.IndexedType; -import de.hybris.platform.solrfacetsearch.indexer.IndexerService; -import de.hybris.platform.solrfacetsearch.indexer.exceptions.IndexerException; -import de.hybris.platform.solrfacetsearch.indexer.strategies.IndexerStrategy; -import de.hybris.platform.solrfacetsearch.indexer.strategies.IndexerStrategyFactory; - -import org.junit.Before; -import org.junit.Test; - -import tools.sapcx.commerce.toolkit.testing.testdoubles.core.InMemoryModelService; - -@UnitTest -public class DefaultCxIndexerServiceTests { - private DefaultCxIndexerService defaultCxIndexerService; - private IndexerStrategyFactory indexerStrategyFactoryMock; - private IndexerStrategy indexerStrategyMock; - private FacetSearchConfigService facetSearchConfigServiceMock; - private IndexerService indexerServiceMock; - private FacetSearchConfig facetSearchConfig; - private InMemoryModelService modelService; - private IndexConfig indexConfig; - - @Before - public void setUp() throws Exception { - indexerStrategyFactoryMock = mock(IndexerStrategyFactory.class); - indexerStrategyMock = spy(IndexerStrategy.class); - facetSearchConfigServiceMock = spy(FacetSearchConfigService.class); - indexerServiceMock = spy(IndexerService.class); - modelService = new InMemoryModelService(); - - defaultCxIndexerService = new DefaultCxIndexerService(indexerStrategyFactoryMock, facetSearchConfigServiceMock, indexerServiceMock); - - IndexedType indexedTypeA = new IndexedType(); - indexedTypeA.setIdentifier("type-a"); - - IndexedType indexedTypeB = new IndexedType(); - indexedTypeB.setIdentifier("type-b"); - - IndexedType indexedTypeC = new IndexedType(); - indexedTypeC.setIdentifier("type-c"); - - indexConfig = new IndexConfig(); - indexConfig.setIndexedTypes(Map.of("type-a", indexedTypeA, "type-b", indexedTypeB, "type-c", indexedTypeC)); - - facetSearchConfig = new FacetSearchConfig(); - facetSearchConfig.setName("searchConfig"); - facetSearchConfig.setIndexConfig(indexConfig); - - when(facetSearchConfigServiceMock.getConfiguration("searchConfig")).thenReturn(facetSearchConfig); - when(facetSearchConfigServiceMock.resolveIndexedType(facetSearchConfig, "type-a")).thenReturn(indexedTypeA); - when(facetSearchConfigServiceMock.resolveIndexedType(facetSearchConfig, "type-b")).thenReturn(indexedTypeB); - when(facetSearchConfigServiceMock.resolveIndexedType(facetSearchConfig, "type-c")).thenReturn(indexedTypeC); - } - - @Test - public void verifyIndexerIsCreated() throws Exception { - CxIndexer searchIndexer = defaultCxIndexerService.getSearchIndexer("searchConfig", "type-a"); - assertThat(searchIndexer).isNotNull(); - } - - @Test - public void verifyIndexerAddsItemToIndex() throws Exception { - ItemModel item = modelService.create(ItemModel.class); - modelService.save(item); - - defaultCxIndexerService.addItemToIndex("searchConfig", "type-a", item); - verify(indexerServiceMock).updateTypeIndex(facetSearchConfig, indexConfig.getIndexedTypes().get("type-a"), List.of(item.getPk())); - } - - @Test - public void verifyIndexerAddsItemsToIndex() throws Exception { - ItemModel item1 = modelService.create(ItemModel.class); - ItemModel item2 = modelService.create(ItemModel.class); - modelService.saveAll(item1, item2); - - defaultCxIndexerService.addItemsToIndex("searchConfig", "type-a", List.of(item1, item2)); - verify(indexerServiceMock).updateTypeIndex(facetSearchConfig, indexConfig.getIndexedTypes().get("type-a"), List.of(item1.getPk(), item2.getPk())); - } - - @Test - public void verifyIndexerAddsItemsByQueryToIndex() throws Exception { - CxIndexer searchIndexer = defaultCxIndexerService.getSearchIndexer("searchConfig", "type-a"); - searchIndexer.addItemsByQuery(); - verify(indexerServiceMock).updateTypeIndex(facetSearchConfig, indexConfig.getIndexedTypes().get("type-a")); - } - - @Test - public void verifyIndexerRemovesItemFromIndex() throws Exception { - ItemModel item = modelService.create(ItemModel.class); - modelService.save(item); - - defaultCxIndexerService.removeItemFromIndex("searchConfig", "type-a", item); - verify(indexerServiceMock).deleteTypeIndex(facetSearchConfig, indexConfig.getIndexedTypes().get("type-a"), List.of(item.getPk())); - } - - @Test - public void verifyIndexerRemovesItemsFromIndex() throws Exception { - ItemModel item1 = modelService.create(ItemModel.class); - ItemModel item2 = modelService.create(ItemModel.class); - modelService.saveAll(item1, item2); - - defaultCxIndexerService.removeItemsFromIndex("searchConfig", "type-a", List.of(item1, item2)); - verify(indexerServiceMock).deleteTypeIndex(facetSearchConfig, indexConfig.getIndexedTypes().get("type-a"), List.of(item1.getPk(), item2.getPk())); - } - - @Test - public void verifyIndexerRemovesItemsByQueryFromIndex() throws Exception { - CxIndexer searchIndexer = defaultCxIndexerService.getSearchIndexer("searchConfig", "type-a"); - searchIndexer.removeItemsByQuery(); - verify(indexerServiceMock).deleteTypeIndex(facetSearchConfig, indexConfig.getIndexedTypes().get("type-a")); - } - - @Test - public void verifyPerformIndexForIndexedTypes() throws IndexerException { - when(indexerStrategyFactoryMock.createIndexerStrategy(facetSearchConfig)).thenReturn(indexerStrategyMock); - - defaultCxIndexerService.performIndexForIndexedTypes(facetSearchConfig, IndexOperation.FULL, List.of("type-a", "type-b")); - verify(indexerStrategyMock, times(2)).execute(); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.gitignore b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.gitignore deleted file mode 100644 index bd0966d2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Folders to ignore, whatever the place they are -.DS_Store -.metadata -.settings -classes -testclasses -eclipsebin -gensrc - -# .classpath files and lib folder in sapcxtools to ignore -.classpath -lib/ - -# Filename patterns to ignore -*.class -build.xml -Generated*.java -platformhome.properties -*testclasses.xml -extensioninfo.xsd -*hmc.jar -hmc.xsd -items.xsd -beans.xsd -ruleset.xml -*.log -.pmd -*build.number -base.properties - -# Addon specific copy folders -**/_ui/addons -**/views/addons -**/tld/addons -**/tags/addons -**/messages/addons -**/lib/addons -**/web/addonsrc -**/_ui-src/addons -**/web/addontestsrc -**/web/commonwebsrc/*/ -**/web/webroot/WEB-INF/lib/addon-* -wro_addons.xml - -# Backoffice artifacts -*_bof.jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.project b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.project deleted file mode 100644 index c94914c7..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - sapcxsinglesignon - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - - - - 1642058460820 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/LICENSE.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/LICENSE.md deleted file mode 100644 index 9776fe0d..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/LICENSE.md +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [2025] [SAP CX Tools] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/README.md deleted file mode 100644 index 3524aee9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# SAP CX Single-Sign-On - -The `sapcxsinglesignon` extension provides core implementations for SSO integration with external -service and identity providers, such as Auth0 by Okta. - -## FEATURE DESCRIPTION - -The functionality covers a filter for the OCC layer, that handles the validation of the access tokens. -The filter will be executed before the actual spring security chain of the OCC extension, creating a -valid token in the local token storage for the authenticated user. - -### How to activate and use - -To activate the functionality, one needs to set the configuration parameters accordingly for each environment, -especially the flag `sapcxsinglesignon.filter.enabled`, which is set to `false` by default. - -Also, the IDP should be configured to use the SAP Commerce OCC endpoint as audience, and provide the following -information within the access token, as they are required by the filter: - -- email and/or username (whatever field is configured as `idfield`) -- given_name (first name for customer creation) -- family_name (last name for customer creation) - -For example, using Auth0, the following post login handler is required: - -``` -/** -* Handler that will be called during the execution of a PostLogin flow. -* -* @param {Event} event - Details about the user and the context in which they are logging in. -* @param {PostLoginAPI} api - Interface whose methods can be used to change the behavior of the login. -*/ -exports.onExecutePostLogin = async (event, api) => { - api.accessToken.setCustomClaim('email', event.user.email); - api.accessToken.setCustomClaim('username', event.user.username); - api.accessToken.setCustomClaim('given_name', event.user.given_name); - api.accessToken.setCustomClaim('family_name', event.user.family_name); -}; -``` - -In addition to the IDP and backend configuration, the composable storefront needs to be extended with -configuration settings as within the following example: - -```typescript -export const authCodeFlowConfig: AuthConfig = { - authentication: { - client_id: '', - client_secret: '', - baseUrl: 'https://', - tokenEndpoint: '/oauth/token', - loginUrl: '/authorize', - revokeEndpoint: '/oauth/revoke', - logoutUrl: '/oidc/logout', - userinfoEndpoint: '/userinfo', - OAuthLibConfig: { - redirectUri: 'https://www..com', - postLogoutRedirectUri: 'https://www..com', - responseType: 'code', - scope: 'openid profile email', - showDebugInformation: true, - disablePKCE: false, - customQueryParams: { - audience: 'https://api..com/occ/v2/' - } - }, - }, -}; -``` - -To avoid failing requests during the logout sequence, we also strongly recommend to overlay the standard logout -guard from the Spartacus project, with an implementation as follows here: - -```typescript -import { HttpClient, HttpErrorResponse } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { Router, UrlTree } from '@angular/router'; -import { - AuthRedirectService, - AuthService, - CmsService, - OccEndpointsService, - ProtectedRoutesService, - SemanticPathService, -} from '@spartacus/core'; -import { LogoutGuard } from '@spartacus/storefront'; -import { Observable, of } from 'rxjs'; -import { catchError, map, switchMap, take } from 'rxjs/operators'; - -@Injectable() -export class CustomLogoutGuard extends LogoutGuard { - constructor( - protected auth: AuthService, - protected cms: CmsService, - protected semanticPathService: SemanticPathService, - protected protectedRoutes: ProtectedRoutesService, - protected router: Router, - protected http: HttpClient, - protected endpointsService: OccEndpointsService - ) { - super(auth, cms, semanticPathService, protectedRoutes, router); - } - - canActivate(): Observable { - /** - * Note: - * We must wait until the access token was revoked from the backend before - * performing the call to this.logout(), otherwise racing conditions may - * terminate the call before the backend took note of it. - * - * But we do not care whether the action was successful or not, because the - * user shall walk through the logout process in any case. - * - * In rare situations, it may occur that a token was not successfully - * removed from the backend, but those cases all have in common, that the - * accesss token is not longer valid, e.g. has expired, or already replaced - * by a different one. - */ - return this.revokeAccessToken().pipe( - take(1), // wait until call finished - switchMap(() => this.logout()), // perform standard oauth2 logout - map(() => true) - ); - } - - revokeAccessToken(): Observable { - let endpoint = this.getRevocationEndpoint(); - return this.http.post(endpoint, '').pipe( - map(() => of(true)), - catchError((err: HttpErrorResponse) => { - return of(false); - }) - ); - } - - getRevocationEndpoint(): string { - return this.endpointsService.buildUrl('/users/current/revokeAccessToken'); - } -} -``` - -### Configuration parameters - -| Parameter | Type | Description | -|--------------------------------------------------------------|------|------------------------------------------------------------------------------------------| -| sapcxsinglesignon.filter.enabled | Boolean | specifies whether the filter is active or not (default: false) | -| sapcxsinglesignon.filter.login.userClientId | String | the SAP Commerce client ID for your single page application (required) | -| sapcxsinglesignon.filter.idp.issuer | String | the registered issuer, eg. https://dev-1234.eu.auth0.com/ (required) | -| sapcxsinglesignon.filter.idp.jwksUrl | String | if issuer is non-OIDC conform, use this URL for JWKS (optional) | -| sapcxsinglesignon.filter.idp.audience | String | the registered API, eg. https://localhost:9002/occ/v2/ (required) | -| sapcxsinglesignon.filter.idp.scope | String | the required scopeof the API, if any, eg. shop (optional) | -| sapcxsinglesignon.filter.idp.requiredClaims | String | comma-separated list of required claims for a valid token (optional) | -| sapcxsinglesignon.filter.idp.clientid | String | the client ID of the application (required) | -| sapcxsinglesignon.filter.idp.claim.id | String | claim name used for user ID mapping (default: email) | - -## License - -_Licensed under the Apache License, Version 2.0, January 2004_ - -_Copyright 2025, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml deleted file mode 100644 index bec2ef64..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/extensioninfo.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml deleted file mode 100644 index 8ce6d7c9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/external-dependencies.xml +++ /dev/null @@ -1,30 +0,0 @@ - - 4.0.0 - tools.sapcx - sapcxsinglesignon - 5.0.0-snapshot - jar - - - org.springframework.security - spring-security-saml2-service-provider - 5.8.16 - - - org.springframework.security - spring-security-oauth2-core - 5.8.16 - - - org.springframework.security - spring-security-oauth2-jose - 5.8.16 - - - com.nimbusds - nimbus-jose-jwt - 10.6 - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/project.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/project.properties deleted file mode 100644 index cd102395..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/project.properties +++ /dev/null @@ -1,36 +0,0 @@ -# ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools -# ---------------------------------------------------------------------------- - -# Location of the file for the global platform spring application context -sapcxsinglesignon.application-context=sapcxsinglesignon-spring.xml - -# Enhance samlsinglesignon web context -samlsinglesignon.additionalWebSpringConfigs.sapcxsinglesignon=classpath:/samlsinglesignon/web/spring/idp-initiated-login-spring.xml - -############################################################################## -# General settings -# -# filter.enabled - specifies whether the filter is active or not (default: false) -# login.userClientId - the SAP Commerce client ID for your single page application (required) -# -# filter.idp.issuer - the issuer, eg. https://dev-1234.eu.auth0.com/ (required) -# filter.idp.jwksUrl - the URL pointing to the JWKS, eg. https://dev-1234.eu.auth0.com/ (optional) -# filter.idp.audience - the audience of the API, eg. https://localhost:9002/occ/v2/ (required) -# filter.idp.scope - the required scope of the API, if any, eg. shop (optional) -# filter.idp.requiredClaims - comma-separated list of required claims for a valid token (optional) -# filter.idp.clientid - the client ID of the application (required) -# filter.idp.claim.id - claim name used for user ID mapping (default: email) -############################################################################## -sapcxsinglesignon.filter.enabled=false -sapcxsinglesignon.filter.login.userClientId= - -sapcxsinglesignon.filter.idp.issuer= -sapcxsinglesignon.filter.idp.jwksUrl= -sapcxsinglesignon.filter.idp.audience= -sapcxsinglesignon.filter.idp.scope= -sapcxsinglesignon.filter.idp.requiredClaims= -sapcxsinglesignon.filter.idp.clientid= -sapcxsinglesignon.filter.idp.claim.id=email - -sapcxsinglesignon.backoffice.defaulturl=/ diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/occ/v2/sapcxsinglesignonocc/web/spring/sapcxsinglesignon-web-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/occ/v2/sapcxsinglesignonocc/web/spring/sapcxsinglesignon-web-spring.xml deleted file mode 100644 index 378a28b0..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/occ/v2/sapcxsinglesignonocc/web/spring/sapcxsinglesignon-web-spring.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/samlsinglesignon/web/spring/idp-initiated-login-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/samlsinglesignon/web/spring/idp-initiated-login-spring.xml deleted file mode 100644 index 903a1d05..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/samlsinglesignon/web/spring/idp-initiated-login-spring.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/sapcxsinglesignon-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/sapcxsinglesignon-spring.xml deleted file mode 100644 index f40f3ed6..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/resources/sapcxsinglesignon-spring.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/constants/CxSingleSignOnConstants.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/constants/CxSingleSignOnConstants.java deleted file mode 100644 index ca296f32..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/constants/CxSingleSignOnConstants.java +++ /dev/null @@ -1,11 +0,0 @@ -package tools.sapcx.commerce.sso.constants; - -@SuppressWarnings({ "deprecation", "squid:CallToDeprecatedMethod" }) -public class CxSingleSignOnConstants extends GeneratedCxSingleSignOnConstants { - public static final String EXTENSIONNAME = "sapcxsinglesignon"; - - private CxSingleSignOnConstants() { - // empty - } - -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/controller/AccessTokenRevocationController.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/controller/AccessTokenRevocationController.java deleted file mode 100644 index 2b45eba5..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/controller/AccessTokenRevocationController.java +++ /dev/null @@ -1,57 +0,0 @@ -package tools.sapcx.commerce.sso.controller; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.security.access.annotation.Secured; -import org.springframework.security.core.Authentication; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor; -import org.springframework.security.oauth2.provider.authentication.TokenExtractor; -import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Controller -@RequestMapping(value = "/{baseSiteId}/users/{userId}/revokeAccessToken") -public class AccessTokenRevocationController { - private static final Logger LOG = LoggerFactory.getLogger(AccessTokenRevocationController.class); - - @Resource(name = "oauthTokenStore") - private TokenStore tokenStore; - @Value("${sapcxsinglesignon.filter.enabled}") - private boolean enabled; - private TokenExtractor tokenExtractor; - - public AccessTokenRevocationController() { - this.tokenExtractor = new BearerTokenExtractor(); - } - - @Secured({ "ROLE_CUSTOMERGROUP", "ROLE_TRUSTED_CLIENT" }) - @RequestMapping(method = RequestMethod.POST) - @ResponseStatus(HttpStatus.ACCEPTED) - public void revokeAccessToken(HttpServletRequest request) { - Authentication accessToken = tokenExtractor.extract(request); - - if (enabled && accessToken != null) { - String accessTokenValue = accessToken.getPrincipal().toString(); - LOG.debug("Access token extracted from request: {}", accessTokenValue); - - OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessTokenValue); - LOG.debug("OAuth2 AccessToken found in token store: {}", oAuth2AccessToken != null ? "yes" : "no"); - - if (oAuth2AccessToken != null) { - synchronized (accessTokenValue.intern()) { - tokenStore.removeAccessToken(oAuth2AccessToken); - LOG.debug("Access token removed from store: {}", accessTokenValue); - } - } - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/AudienceValidator.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/AudienceValidator.java deleted file mode 100644 index 68830c3a..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/AudienceValidator.java +++ /dev/null @@ -1,24 +0,0 @@ -package tools.sapcx.commerce.sso.filter; - -import org.springframework.security.oauth2.core.OAuth2Error; -import org.springframework.security.oauth2.core.OAuth2TokenValidator; -import org.springframework.security.oauth2.core.OAuth2TokenValidatorResult; -import org.springframework.security.oauth2.jwt.Jwt; - -class AudienceValidator implements OAuth2TokenValidator { - private String audience; - - public AudienceValidator(String audience) { - this.audience = audience; - } - - @Override - public OAuth2TokenValidatorResult validate(Jwt token) { - if (token.getAudience().contains(audience)) { - return OAuth2TokenValidatorResult.success(); - } - - OAuth2Error error = new OAuth2Error("invalid_token", "The required audience is missing", null); - return OAuth2TokenValidatorResult.failure(error); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/JwtAccessTokenVerificationFilter.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/JwtAccessTokenVerificationFilter.java deleted file mode 100644 index d90541aa..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/filter/JwtAccessTokenVerificationFilter.java +++ /dev/null @@ -1,272 +0,0 @@ -package tools.sapcx.commerce.sso.filter; - -import static org.apache.commons.lang3.StringUtils.isNotBlank; - -import java.io.IOException; -import java.util.*; -import java.util.stream.Stream; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken; -import org.springframework.security.oauth2.common.OAuth2AccessToken; -import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator; -import org.springframework.security.oauth2.core.OAuth2TokenValidator; -import org.springframework.security.oauth2.jwt.*; -import org.springframework.security.oauth2.provider.ClientDetails; -import org.springframework.security.oauth2.provider.ClientDetailsService; -import org.springframework.security.oauth2.provider.OAuth2Authentication; -import org.springframework.security.oauth2.provider.OAuth2Request; -import org.springframework.security.oauth2.provider.OAuth2RequestFactory; -import org.springframework.security.oauth2.provider.TokenRequest; -import org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor; -import org.springframework.security.oauth2.provider.authentication.TokenExtractor; -import org.springframework.security.oauth2.provider.token.TokenStore; -import org.springframework.web.filter.OncePerRequestFilter; - -import tools.sapcx.commerce.sso.user.UpdateUserFromTokenStrategy; - -/** - * This filter performs verification of an external access token. - * - * If enabled, it will extract the access token from the request, and asks a - * concrete implementation to fetch the user details. - * - * If valid, the user details will be used to create a local OAuth2 - * Authentication for the user and stored in the token store. - * - * Later in the filter chain, the Spring security chain will verify the access - * token against the token store and use this token to authenticate the user. - */ -public class JwtAccessTokenVerificationFilter extends OncePerRequestFilter { - private static final Logger LOG = LoggerFactory.getLogger(JwtAccessTokenVerificationFilter.class); - public static final String AUTHORIZED_PARTY_CLAIM = "azp"; - public static final String SCOPE_CLAIM = "scope"; - - private OAuth2RequestFactory oAuth2RequestFactory; - private ClientDetailsService clientDetailsService; - private UserDetailsService userDetailsService; - private UpdateUserFromTokenStrategy updateUserFromTokenStrategy; - private TokenStore tokenStore; - private String occClientId; - private boolean enabled; - private String jwksUrl; - private String issuer; - private String audience; - private String scope; - private List requiredClaims; - private String clientId; - private String customerIdField; - private TokenExtractor tokenExtractor; - private JwtDecoder jwtDecoder = null; - - public JwtAccessTokenVerificationFilter( - OAuth2RequestFactory oAuth2RequestFactory, - ClientDetailsService clientDetailsService, - UserDetailsService userDetailsService, - UpdateUserFromTokenStrategy updateUserFromTokenStrategy, - TokenStore tokenStore, - String occClientId, - boolean enabled, - String jwksUrl, - String issuer, - String audience, - String scope, - String requiredClaims, - String clientId, - String customerIdField) { - this.oAuth2RequestFactory = oAuth2RequestFactory; - this.clientDetailsService = clientDetailsService; - this.userDetailsService = userDetailsService; - this.updateUserFromTokenStrategy = updateUserFromTokenStrategy; - this.tokenStore = tokenStore; - this.occClientId = occClientId; - this.enabled = enabled; - this.jwksUrl = jwksUrl; - this.issuer = issuer; - this.audience = audience; - this.scope = scope; - this.requiredClaims = new ArrayList<>(); - if (isNotBlank(requiredClaims)) { - Stream.of(StringUtils.split(requiredClaims, ',')) - .map(StringUtils::trimToEmpty) - .filter(StringUtils::isNotBlank) - .forEach(this.requiredClaims::add); - } - this.clientId = clientId; - this.customerIdField = customerIdField; - } - - @Override - public void afterPropertiesSet() throws ServletException { - super.afterPropertiesSet(); - this.tokenExtractor = new BearerTokenExtractor(); - } - - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - Authentication accessToken = tokenExtractor.extract(request); - if (enabled && accessToken != null) { - String accessTokenValue = accessToken.getPrincipal().toString().intern(); - LOG.debug("Access token extracted from request: {}", accessTokenValue); - - OAuth2AccessToken oAuth2AccessToken = fetchFromTokenStore(accessTokenValue, false); - LOG.debug("OAuth2 AccessToken from token store (1st attempt, without lock): {} (expired? => {})", oAuth2AccessToken, - oAuth2AccessToken != null ? oAuth2AccessToken.isExpired() : false); - - if (oAuth2AccessToken == null || oAuth2AccessToken.isExpired()) { - synchronized (accessTokenValue) { - oAuth2AccessToken = fetchFromTokenStore(accessTokenValue, true); - LOG.debug("OAuth2 AccessToken from token store (2nd attempt, with lock): {} (expired? => {})", oAuth2AccessToken, - oAuth2AccessToken != null ? oAuth2AccessToken.isExpired() : false); - } - } - } - - filterChain.doFilter(request, response); - } - - private OAuth2AccessToken fetchFromTokenStore(String accessTokenValue, boolean createIfMissing) { - OAuth2AccessToken oAuth2AccessToken = tokenStore.readAccessToken(accessTokenValue); - if (oAuth2AccessToken != null && !oAuth2AccessToken.isExpired()) { - return oAuth2AccessToken; - } else if (oAuth2AccessToken != null && oAuth2AccessToken.isExpired()) { - tokenStore.removeAccessToken(oAuth2AccessToken); - oAuth2AccessToken = null; - } - - if (createIfMissing) { - try { - Jwt decodedToken = decodeAccessToken(accessTokenValue); - String userId = decodedToken.getClaimAsString(customerIdField); - if (userId != null) { - LOG.debug("Mapped user ID using field '{}': '{}'", customerIdField, userId); - updateUserFromTokenStrategy.updateUserFromToken(userId, decodedToken); - oAuth2AccessToken = storeAuthenticationForUser(userId, occClientId, decodedToken); - } else { - LOG.warn("No user ID found in access token for field: '{}' and the configured authorized party. Make sure your IDP configuration is correct!", customerIdField); - } - } catch (Exception e) { - LOG.debug(String.format("Invalid access token '%s'!", accessTokenValue), e); - } - } - - return oAuth2AccessToken; - } - - protected Jwt decodeAccessToken(String accessTokenValue) throws JwtException { - if (jwtDecoder == null) { - initJwtDecoder(); - } - - try { - return jwtDecoder.decode(accessTokenValue); - } catch (JwtException e) { - LOG.debug("Retry with reinitialized decoder"); - initJwtDecoder(); - return jwtDecoder.decode(accessTokenValue); - } - } - - private OAuth2AccessToken storeAuthenticationForUser(String userId, String oAuth2ClientId, Jwt decodedToken) { - assert isNotBlank(oAuth2ClientId); - assert isNotBlank(userId); - assert Objects.nonNull(decodedToken); - - // OAuth2 Request - ClientDetails clientDetails = clientDetailsService.loadClientByClientId(oAuth2ClientId); - TokenRequest tokenRequest = oAuth2RequestFactory.createTokenRequest(Collections.emptyMap(), clientDetails); - OAuth2Request oAuth2Request = tokenRequest.createOAuth2Request(clientDetails); - - try { - // Username Password Auth Token - UsernamePasswordAuthenticationToken userToken = createUsernamePasswordAuthenticationToken(userId); - - // Create access token and authentication for user - DefaultOAuth2AccessToken oAuth2AccessToken = new DefaultOAuth2AccessToken(decodedToken.getTokenValue()); - oAuth2AccessToken.setExpiration(Date.from(decodedToken.getExpiresAt())); - OAuth2Authentication authentication = new OAuth2Authentication(oAuth2Request, userToken); - - // Remove existing access token for same authentication - OAuth2AccessToken existingToken = tokenStore.getAccessToken(authentication); - if (existingToken != null) { - LOG.debug("Found another access token '{}' for the authentication, removing it from the token store.", existingToken.getValue()); - tokenStore.removeAccessToken(existingToken); - } - - // Create the new access token for the user - tokenStore.storeAccessToken(oAuth2AccessToken, authentication); - LOG.debug("New access token has been created successfully!"); - - return oAuth2AccessToken; - } catch (BadCredentialsException e) { - throw e; - } - } - - private UsernamePasswordAuthenticationToken createUsernamePasswordAuthenticationToken(String userId) { - try { - UserDetails userDetails = userDetailsService.loadUserByUsername(userId); - Collection authorities = userDetails.getAuthorities(); - return new UsernamePasswordAuthenticationToken(userId, null, authorities); - } catch (UsernameNotFoundException e) { - LOG.warn("Login attempt for unknown user '{}'!", userId); - throw new BadCredentialsException("Invalid credentials!"); - } - } - - private synchronized void initJwtDecoder() { - if (isNotBlank(jwksUrl)) { - LOG.info("Initializing JWT decoder with JwkSetUri '{}'", jwksUrl); - this.jwtDecoder = NimbusJwtDecoder.withJwkSetUri(jwksUrl).build(); - } else { - LOG.info("Initializing JWT decoder with OIDC issuer location '{}'", issuer); - this.jwtDecoder = JwtDecoders.fromOidcIssuerLocation(issuer); - } - - if (this.jwtDecoder instanceof NimbusJwtDecoder) { - configureValidatorsForJwtDecoder((NimbusJwtDecoder) this.jwtDecoder); - } - } - - private void configureValidatorsForJwtDecoder(NimbusJwtDecoder decoder) { - List> validators = new ArrayList<>(); - - validators.add(new JwtTimestampValidator()); - - if (isNotBlank(this.issuer)) { - validators.add(new JwtIssuerValidator(this.issuer)); - } - - if (isNotBlank(this.audience)) { - validators.add(new AudienceValidator(this.audience)); - } - - if (isNotBlank(this.clientId)) { - validators.add(new JwtClaimValidator<>(AUTHORIZED_PARTY_CLAIM, this.clientId::equalsIgnoreCase)); - } - - if (isNotBlank(this.scope)) { - validators.add(new JwtClaimValidator<>(SCOPE_CLAIM, this.scope::equalsIgnoreCase)); - } - - for (String requiredClaim : this.requiredClaims) { - validators.add(new JwtClaimValidator<>(requiredClaim, Objects::nonNull)); - } - - decoder.setJwtValidator(new DelegatingOAuth2TokenValidator<>(validators)); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/saml/IdpInitiatedSamlAuthenticationSuccessHandler.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/saml/IdpInitiatedSamlAuthenticationSuccessHandler.java deleted file mode 100644 index 6d7110ad..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/saml/IdpInitiatedSamlAuthenticationSuccessHandler.java +++ /dev/null @@ -1,31 +0,0 @@ -package tools.sapcx.commerce.sso.saml; - -import java.io.IOException; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.security.core.Authentication; -import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; -import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; - -public class IdpInitiatedSamlAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { - private static final Logger LOG = LoggerFactory.getLogger(IdpInitiatedSamlAuthenticationSuccessHandler.class); - - @Override - public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException { - if (authentication instanceof Saml2Authentication) { - String relayStateURL = request.getParameter("RelayState"); - if (StringUtils.isNotBlank(relayStateURL)) { - LOG.debug("Redirecting to RelayState Url: " + relayStateURL); - getRedirectStrategy().sendRedirect(request, response, relayStateURL); - return; - } - } - super.onAuthenticationSuccess(request, response, authentication); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/NoUpdateUserFromTokenStrategy.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/NoUpdateUserFromTokenStrategy.java deleted file mode 100644 index 372868bb..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/NoUpdateUserFromTokenStrategy.java +++ /dev/null @@ -1,9 +0,0 @@ -package tools.sapcx.commerce.sso.user; - -import org.springframework.security.oauth2.jwt.Jwt; - -public class NoUpdateUserFromTokenStrategy implements UpdateUserFromTokenStrategy { - @Override - public void updateUserFromToken(String userId, Jwt token) { - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/UpdateUserFromTokenStrategy.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/UpdateUserFromTokenStrategy.java deleted file mode 100644 index ed7d08c7..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/src/tools/sapcx/commerce/sso/user/UpdateUserFromTokenStrategy.java +++ /dev/null @@ -1,7 +0,0 @@ -package tools.sapcx.commerce.sso.user; - -import org.springframework.security.oauth2.jwt.Jwt; - -public interface UpdateUserFromTokenStrategy { - void updateUserFromToken(String userId, Jwt token); -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java deleted file mode 100644 index 1526972c..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxsinglesignon/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java +++ /dev/null @@ -1,21 +0,0 @@ -package tools.sapcx.commerce.sso.config; - -import de.hybris.bootstrap.annotations.UnitTest; - -import org.junit.Test; - -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; - -@UnitTest -public class ExtensionConfigurationTests { - @Test - public void extensionConfiguration() { - InstalledExtensionVerifier.verifier() - .requires("sapcxsinglesignon") - .requires("sapcommercetoolkit") - .requires("commercewebservices") - .requires("samlsinglesignon") - .requires("oauth2") - .verify(); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.gitignore b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.gitignore deleted file mode 100644 index bd0966d2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Folders to ignore, whatever the place they are -.DS_Store -.metadata -.settings -classes -testclasses -eclipsebin -gensrc - -# .classpath files and lib folder in sapcxtools to ignore -.classpath -lib/ - -# Filename patterns to ignore -*.class -build.xml -Generated*.java -platformhome.properties -*testclasses.xml -extensioninfo.xsd -*hmc.jar -hmc.xsd -items.xsd -beans.xsd -ruleset.xml -*.log -.pmd -*build.number -base.properties - -# Addon specific copy folders -**/_ui/addons -**/views/addons -**/tld/addons -**/tags/addons -**/messages/addons -**/lib/addons -**/web/addonsrc -**/_ui-src/addons -**/web/addontestsrc -**/web/commonwebsrc/*/ -**/web/webroot/WEB-INF/lib/addon-* -wro_addons.xml - -# Backoffice artifacts -*_bof.jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.project b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.project deleted file mode 100644 index 0588f6c4..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - sapcxssoauth0 - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - - - - 1642058460820 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/LICENSE.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/LICENSE.md deleted file mode 100644 index 9776fe0d..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/LICENSE.md +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [2025] [SAP CX Tools] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/README.md deleted file mode 100644 index c8010c20..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# SAP CX Single-Sign-On (Auth0 Replication) - -The `sapcxssoauth0` extension provides core replication mechanism for synchronizing customer data with -external service and identity providers, in this case Auth0 by Okta. - -## FEATURE DESCRIPTION - -The extension ships a customer replication strategy, that can be activated to create users within -Auth0, whenever a customer object is created or changed within SAP commerce cloud. - -### How to activate and use - -To activate the functionality, one needs to set the configuration parameters accordingly for each environment, -especially the flags `sapcxsinglesignon.replicate.creation.enabled`, and -`sapcxsinglesignon.replicate.removal.enabled` which are set to `false` by default. - -For the customer replication, one can add additional populators to the `auth0CustomerConverter` converter bean. -This can be easily done using the `modifyPopulatorList` bean notation: - -```xml - - - - - -``` - -### Configuration parameters - -| Parameter | Type | Description | -|--------------------------------------------------------------|------|------------------------------------------------------------------------------------------| -| sapcxsinglesignon.replicate.enabled | Boolean | specifies whether the replication is active or not (default: false) | -| sapcxsinglesignon.replicate.creation.enabled | Boolean | specifies whether the user creation is enabled or not (default: false) | -| sapcxsinglesignon.replicate.removal.enabled | Boolean | specifies whether the user removal is enabled or not (default: false) | -| sapcxsinglesignon.auth0.management.api.audience | String | the audience for your machine-to-machine application (required) | -| sapcxsinglesignon.auth0.management.api.clientid | String | the auth0 client ID for your machine-to-machine application (required) | -| sapcxsinglesignon.auth0.management.api.clientsecret | String | the auth0 client secret for your machine-to-machine application (required) | -| sapcxsinglesignon.auth0.customer.connection | String | the authentication connection for customers (default: "Username-Password-Authentication") | -| customer.metadata.prefix | String | the prefix for application metadata for customers (required, default: commerce) | -| sapcxsinglesignon.auth0.customer.role | String | the role to assign to newly created customer accounts | -| sapcxsinglesignon.auth0.customer.requireemailverification | String | specifies if the user needs to verify their email (default: false) | -| sapcxsinglesignon.auth0.customer.requirepasswordverification | String | specifies if the user needs to verify their password (default: false) | -| sapcxsinglesignon.auth0.customer.useblockedstatus | Boolean | specifies if the user shall be blocked when disabled in SAP Commerce (default: false) | - -## License - -_Licensed under the Apache License, Version 2.0, January 2004_ - -_Copyright 2025, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml deleted file mode 100644 index 2697e617..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/extensioninfo.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml deleted file mode 100644 index 537092d5..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/external-dependencies.xml +++ /dev/null @@ -1,61 +0,0 @@ - - 4.0.0 - tools.sapcx - sapcxssoauth0 - 5.0.0-snapshot - jar - - - com.auth0 - auth0 - 2.9.0 - - - com.auth0 - java-jwt - 5.0.0-snapshot - - - com.squareup.okhttp3 - okhttp - 4.12.0 - - - com.squareup.okhttp3 - logging-interceptor - 4.12.0 - - - com.squareup.okio - okio - 3.7.0 - - - com.squareup.okio - okio-jvm - 3.7.0 - runtime - - - org.jetbrains.kotlin - kotlin-stdlib - 1.9.21 - - - org.jetbrains.kotlin - kotlin-stdlib-common - 1.9.21 - - - org.jetbrains - annotations - 24.1.0 - - - net.jodah - failsafe - 2.4.4 - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/project.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/project.properties deleted file mode 100644 index 06ea34f2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/project.properties +++ /dev/null @@ -1,45 +0,0 @@ -# ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools -# ---------------------------------------------------------------------------- - -# Location of the file for the global platform spring application context -sapcxssoauth0.application-context=sapcxssoauth0-spring.xml - -############################################################################## -# General settings -# -# replicate.enabled - specifies whether the user replication is enabled or not (default: false) -# replicate.creation.enabled - specifies whether the user creation is enabled or not (default: false) -# replicate.removal.enabled - specifies whether the user removal is enabled or not (default: false) -############################################################################## -sapcxssoauth0.replicate.enabled=false -sapcxssoauth0.replicate.creation.enabled=false -sapcxssoauth0.replicate.removal.enabled=false - -############################################################################## -# Auth0 settings -# -# management.api.domain - the domain for your machine-to-machine application (required) -# management.api.audience - the audience for your machine-to-machine application (required) -# management.api.clientid - the auth0 client ID for your machine-to-machine application (required) -# management.api.clientsecret - the auth0 client secret for your machine-to-machine application (required) -# -# customer.connection - the authentication connection for customers (required) -# (default: "Username-Password-Authentication") -# customer.metadata.prefix - the prefix for application metadata for customers (required, default: commerce) -# customer.role - the role to assign to newly created customer accounts (optional) -# customer.requireemailverification - specifies if the user needs to verify their email (default: false) -# customer.requirepasswordverification - specifies if the user needs to verify their password (default: false) -# customer.useblockedstatus - specifies if the user shall be blocked when disabled in SAP Commerce (default: false) -############################################################################## -sapcxssoauth0.auth0.management.api.domain= -sapcxssoauth0.auth0.management.api.audience= -sapcxssoauth0.auth0.management.api.clientid= -sapcxssoauth0.auth0.management.api.clientsecret= - -sapcxssoauth0.auth0.customer.connection=Username-Password-Authentication -sapcxssoauth0.auth0.customer.metadata.prefix=commerce -sapcxssoauth0.auth0.customer.role= -sapcxssoauth0.auth0.customer.requireemailverification=false -sapcxssoauth0.auth0.customer.requirepasswordverification=false -sapcxssoauth0.auth0.customer.useblockedstatus=false diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/resources/sapcxssoauth0-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/resources/sapcxssoauth0-spring.xml deleted file mode 100644 index 26704c7e..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/resources/sapcxssoauth0-spring.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/Actions.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/Actions.java deleted file mode 100644 index 335b73b9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/Actions.java +++ /dev/null @@ -1,45 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.roles.Role; -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.core.model.user.CustomerModel; - -public interface Actions { - static Role getRole(String roleName) throws Auth0Exception { - return FetchRoleAction.getRole(roleName); - } - - static void assignRole(Role role, User user) throws Auth0Exception { - AssignRoleAction.assignRole(role, user); - } - - static void removeRole(Role role, User user) throws Auth0Exception { - RemoveRoleAction.removeRole(role, user); - } - - static User getUser(String email) throws Auth0Exception { - return FetchUserAction.getUser(email); - } - - static User createUser(CustomerModel customer) throws Auth0Exception { - return CreateUserAction.createUser(customer); - } - - static User updateUser(User user, CustomerModel customer) throws Auth0Exception { - return UpdateUserAction.updateUser(user, customer); - } - - static void removeUser(User user, String customerId) throws Auth0Exception { - RemoveUserAction.removeUser(user, customerId); - } - - static String getPasswordResetUrl(User user) throws Auth0Exception { - return getPasswordResetUrl(user, false); - } - - static String getPasswordResetUrl(User user, boolean markEmailAsVerified) throws Auth0Exception { - return PasswordResetUrlAction.getPasswordResetUrl(user, markEmailAsVerified); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/AssignRoleAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/AssignRoleAction.java deleted file mode 100644 index f8728719..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/AssignRoleAction.java +++ /dev/null @@ -1,38 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.List; -import java.util.Map; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.roles.Role; -import com.auth0.json.mgmt.users.User; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class AssignRoleAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(AssignRoleAction.class); - - static void assignRole(Role role, User user) throws Auth0Exception { - new AssignRoleAction().execute(Map.of("role", role, "user", user)); - } - - private AssignRoleAction() { - // Avoid instantiation - } - - @Override - public Void execute(Map parameter) throws Auth0Exception { - Role role = getWithType(parameter, "role", Role.class); - User user = getWithType(parameter, "user", User.class); - - try { - submit(managementAPI().users().addRoles(user.getId(), List.of(role.getId()))); - LOG.debug("Assigned role with name '{}' to user with email '{}'.", role.getName(), user.getEmail()); - return null; - } catch (Auth0Exception exception) { - LOG.warn(String.format("Could not assign role '%s' to user with email '%s'. ", role.getName(), user.getEmail()), exception); - throw exception; - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/CreateUserAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/CreateUserAction.java deleted file mode 100644 index 6504a6eb..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/CreateUserAction.java +++ /dev/null @@ -1,82 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.dto.converter.Converter; - -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.RandomStringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class CreateUserAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(CreateUserAction.class); - - static User createUser(CustomerModel customer) throws Auth0Exception { - return new CreateUserAction().execute(Map.of("customer", customer)); - } - - private CreateUserAction() { - // Avoid instantiation - } - - @Override - public User execute(Map parameter) throws Auth0Exception { - CustomerModel customer = getWithType(parameter, "customer", CustomerModel.class); - String customerId = customer.getUid(); - - User user = null; - try { - Converter customerConverter = getCustomerConverter(); - User userInfo = customerConverter.convert(customer); - - if (requireEmailVerification()) { - userInfo.setEmailVerified(false); - userInfo.setVerifyEmail(true); - } - - if (useBlockedStatusForDisabledCustomers()) { - userInfo.setBlocked(BooleanUtils.isNotFalse(customer.isLoginDisabled())); - } - - // Add one time information for creation process - userInfo.setConnection(getCustomerConnection()); - userInfo.setPassword(getRandomPassword()); - if (requirePasswordVerification()) { - userInfo.setVerifyPassword(true); - } - - user = fetch(managementAPI().users().create(userInfo)); - return user; - } catch (Auth0Exception exception) { - LOG.debug(String.format("Create user with ID '%s' failed!", customerId), exception); - throw exception; - } finally { - LOG.debug("Create user with ID '{}' resulted in: '{}'.", customerId, user != null ? user.getId() : "-error-"); - } - } - - private char[] getRandomPassword() { - List passwordCharacters = new ArrayList<>(32); - - String alphaNumericChars = RandomStringUtils.randomAlphanumeric(26); - for (int i = 0; i < alphaNumericChars.length(); i++) { - passwordCharacters.add(String.valueOf(alphaNumericChars.charAt(i))); - } - - String specialChars = RandomStringUtils.random(6, '!', '@', '#', '$', '%', '^', '&', '*'); - for (int i = 0; i < specialChars.length(); i++) { - passwordCharacters.add(String.valueOf(specialChars.charAt(i))); - } - - Collections.shuffle(passwordCharacters); - return String.join("", passwordCharacters).toCharArray(); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchRoleAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchRoleAction.java deleted file mode 100644 index f787168b..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchRoleAction.java +++ /dev/null @@ -1,38 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.Map; - -import com.auth0.client.mgmt.filter.RolesFilter; -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.roles.Role; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class FetchRoleAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(FetchRoleAction.class); - - static Role getRole(String roleName) throws Auth0Exception { - return new FetchRoleAction().execute(Map.of("role", roleName)); - } - - private FetchRoleAction() { - // Avoid instantiation - } - - @Override - public Role execute(Map parameter) throws Auth0Exception { - String roleName = getWithType(parameter, "role", String.class); - Role role = null; - try { - RolesFilter roleByName = new RolesFilter().withName(roleName); - role = fetchFirst(managementAPI().roles().list(roleByName)); - return role; - } catch (Auth0Exception exception) { - LOG.debug(String.format("Search for role with name '%s' could not be executed!", roleName), exception); - throw exception; - } finally { - LOG.debug("Lookup for existing role with name '{}' resulted in: '{}'", roleName, role != null ? role.getId() : "-not found-"); - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchUserAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchUserAction.java deleted file mode 100644 index a40428ac..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/FetchUserAction.java +++ /dev/null @@ -1,38 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.Map; - -import com.auth0.client.mgmt.filter.UserFilter; -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.users.User; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class FetchUserAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(FetchUserAction.class); - - static User getUser(String id) throws Auth0Exception { - return new FetchUserAction().execute(Map.of("id", id)); - } - - private FetchUserAction() { - // Avoid instantiation - } - - @Override - public User execute(Map parameter) throws Auth0Exception { - String userId = getWithType(parameter, "id", String.class); - User user = null; - try { - UserFilter userById = new UserFilter().withQuery(userId); - user = fetchFirst(managementAPI().users().list(userById)); - return user; - } catch (Auth0Exception exception) { - LOG.debug(String.format("Search for user with ID '%s' could not be executed!", userId), exception); - throw exception; - } finally { - LOG.debug("Lookup for existing user with ID '{}' resulted in: '{}'", userId, user != null ? user.getId() : "-not found-"); - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/PasswordResetUrlAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/PasswordResetUrlAction.java deleted file mode 100644 index 3e58a69c..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/PasswordResetUrlAction.java +++ /dev/null @@ -1,38 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.Map; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.tickets.PasswordChangeTicket; -import com.auth0.json.mgmt.users.User; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class PasswordResetUrlAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(PasswordResetUrlAction.class); - - static String getPasswordResetUrl(User user, boolean markEmailAsVerified) throws Auth0Exception { - return new PasswordResetUrlAction().execute(Map.of("user", user, "markEmailAsVerified", markEmailAsVerified)); - } - - private PasswordResetUrlAction() { - // Avoid instantiation - } - - @Override - public String execute(Map parameter) throws Auth0Exception { - User user = getWithType(parameter, "user", User.class); - Boolean markEmailAsVerified = getWithType(parameter, "markEmailAsVerified", Boolean.class); - try { - PasswordChangeTicket ticket = new PasswordChangeTicket(user.getId()); - ticket.setMarkEmailAsVerified(markEmailAsVerified); - - PasswordChangeTicket passwordChangeTicket = fetch(managementAPI().tickets().requestPasswordChange(ticket)); - return passwordChangeTicket.getTicket(); - } catch (Auth0Exception exception) { - LOG.debug(String.format("Get password reset token for existing user with ID '{}' failed!", user.getEmail()), exception); - throw exception; - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveRoleAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveRoleAction.java deleted file mode 100644 index f461a6a6..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveRoleAction.java +++ /dev/null @@ -1,39 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.List; -import java.util.Map; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.roles.Role; -import com.auth0.json.mgmt.users.User; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class RemoveRoleAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(RemoveRoleAction.class); - - static void removeRole(Role role, User user) throws Auth0Exception { - new RemoveRoleAction().execute(Map.of("role", role, "user", user)); - } - - private RemoveRoleAction() { - // Avoid instantiation - } - - @Override - public Void execute(Map parameter) throws Auth0Exception { - Role role = getWithType(parameter, "role", Role.class); - User user = getWithType(parameter, "user", User.class); - - try { - submit(managementAPI().users().removeRoles(user.getId(), List.of(role.getId()))); - LOG.debug("Remove role with name '{}' from user with email '{}'.", role.getName(), user.getEmail()); - return null; - } catch (Auth0Exception exception) { - LOG.warn(String.format("Could not remove role '%s' from user with email '%s'. ", role.getName(), user.getEmail()), exception); - throw exception; - } - } - -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveUserAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveUserAction.java deleted file mode 100644 index d9be1e25..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/RemoveUserAction.java +++ /dev/null @@ -1,35 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.Map; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.users.User; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class RemoveUserAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(RemoveUserAction.class); - - static void removeUser(User user, String customerId) throws Auth0Exception { - new RemoveUserAction().execute(Map.of("user", user, "customerId", customerId)); - } - - private RemoveUserAction() { - // Avoid instantiation - } - - @Override - public Void execute(Map parameter) throws Auth0Exception { - User user = getWithType(parameter, "user", User.class); - String customerId = getWithType(parameter, "customerId", String.class); - try { - fetch(managementAPI().users().delete(user.getId())); - LOG.debug("Delete user with ID '{}' was successful.", customerId); - return null; - } catch (Auth0Exception exception) { - LOG.debug(String.format("Delete user with ID '%s' failed!", customerId), exception); - throw exception; - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkAction.java deleted file mode 100644 index 147e60d9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkAction.java +++ /dev/null @@ -1,76 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.Map; - -import com.auth0.client.mgmt.ManagementAPI; -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.Page; -import com.auth0.json.mgmt.users.User; -import com.auth0.net.Request; - -import de.hybris.platform.core.Registry; -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.dto.converter.Converter; - -/** - * Performs an action on the Auth0 SDK. - * - * @param response type of the action - */ -@FunctionalInterface -interface SdkAction { - R execute(Map requestParameter) throws Auth0Exception; - - default ManagementAPI managementAPI() throws Auth0Exception { - return getConfigurationService().getManagementAPI(); - } - - default void submit(Request request) throws Auth0Exception { - request.execute(); - } - - default T fetch(Request request) throws Auth0Exception { - return request.execute().getBody(); - } - - default T fetchFirst(Request> request) throws Auth0Exception { - return request.execute().getBody().getItems().stream().findFirst().orElse(null); - } - - default T getWithType(Map requestParameter, String parameterName, Class returnType) { - Object value = requestParameter.get(parameterName); - return (returnType.isInstance(value)) ? returnType.cast(value) : null; - } - - default String getCustomerIdField() { - return getConfigurationService().getCustomerIdField(); - } - - default String getCustomerConnection() { - return getConfigurationService().getCustomerConnection(); - } - - default Converter getCustomerConverter() { - return getConfigurationService().getCustomerConverter(); - } - - default boolean requireEmailVerification() { - return getConfigurationService().requireEmailVerification(); - } - - default boolean requirePasswordVerification() { - return getConfigurationService().requirePasswordVerification(); - } - - default boolean useBlockedStatusForDisabledCustomers() { - return getConfigurationService().useBlockedStatusForDisabledCustomers(); - } - - default String getAuthClientId() { - return getConfigurationService().getAuthClientId(); - } - - private SdkConfigurationService getConfigurationService() { - return Registry.getApplicationContext().getBean(SdkConfigurationService.class); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkConfigurationService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkConfigurationService.java deleted file mode 100644 index d4714d2e..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/SdkConfigurationService.java +++ /dev/null @@ -1,90 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import com.auth0.client.auth.AuthAPI; -import com.auth0.client.mgmt.ManagementAPI; -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.config.ConfigurationService; -import de.hybris.platform.servicelayer.dto.converter.Converter; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SdkConfigurationService { - private static final Logger LOG = LoggerFactory.getLogger(SdkConfigurationService.class); - private static final String AUTH0_MANAGEMENT_API_DOMAIN = "sapcxsinglesignon.auth0.management.api.domain"; - private static final String AUTH0_MANAGEMENT_API_AUDIENCE = "sapcxsinglesignon.auth0.management.api.audience"; - private static final String AUTH0_AUTH_API_CLIENTID = "sapcxsinglesignon.auth0.auth.api.clientid"; - private static final String AUTH0_MANAGEMENT_API_CLIENTID = "sapcxsinglesignon.auth0.management.api.clientid"; - private static final String AUTH0_MANAGEMENT_API_CLIENTSECRET = "sapcxsinglesignon.auth0.management.api.clientsecret"; - private static final String AUTH0_CUSTOMER_CONNECTION = "sapcxsinglesignon.auth0.customer.connection"; - private static final String AUTH0_CUSTOMER_ID_FIELD = "sapcxsinglesignon.auth0.customer.idfield"; - private static final String AUTH0_REQUIRE_EMAIL_VERIFICATION = "sapcxsinglesignon.auth0.customer.requireemailverification"; - private static final String AUTH0_REQUIRE_PASSWORD_VERIFICATION = "sapcxsinglesignon.auth0.customer.requirepasswordverification"; - private static final String AUTH0_USE_BLOCKEDSTATUS = "sapcxsinglesignon.auth0.customer.useblockedstatus"; - - private ConfigurationService configurationService; - private Converter customerConverter; - - public SdkConfigurationService(ConfigurationService configurationService, Converter customerConverter) { - this.configurationService = configurationService; - this.customerConverter = customerConverter; - } - - public ManagementAPI getManagementAPI() throws Auth0Exception { - LOG.debug("Create new Auth0 ManagementAPI.", getAudience()); - return ManagementAPI.newBuilder(getDomain(), getManagementAccessToken()).build(); - } - - private String getManagementAccessToken() throws Auth0Exception { - LOG.debug("Fetch access token for management API for audience: {}", getAudience()); - AuthAPI authAPI = AuthAPI.newBuilder(getDomain(), getManagementClientId(), getManagementClientSecret()).build(); - return authAPI.requestToken(getAudience()).execute().getBody().getAccessToken(); - } - - private String getAudience() { - return configurationService.getConfiguration().getString(AUTH0_MANAGEMENT_API_AUDIENCE); - } - - private String getDomain() { - return configurationService.getConfiguration().getString(AUTH0_MANAGEMENT_API_DOMAIN); - } - - public String getManagementClientId() { - return configurationService.getConfiguration().getString(AUTH0_MANAGEMENT_API_CLIENTID); - } - - public String getManagementClientSecret() { - return configurationService.getConfiguration().getString(AUTH0_MANAGEMENT_API_CLIENTSECRET); - } - - public String getCustomerConnection() { - return configurationService.getConfiguration().getString(AUTH0_CUSTOMER_CONNECTION); - } - - public String getCustomerIdField() { - return configurationService.getConfiguration().getString(AUTH0_CUSTOMER_ID_FIELD); - } - - public Converter getCustomerConverter() { - return customerConverter; - } - - public boolean requireEmailVerification() { - return configurationService.getConfiguration().getBoolean(AUTH0_REQUIRE_EMAIL_VERIFICATION, false); - } - - public boolean requirePasswordVerification() { - return configurationService.getConfiguration().getBoolean(AUTH0_REQUIRE_PASSWORD_VERIFICATION, false); - } - - public boolean useBlockedStatusForDisabledCustomers() { - return configurationService.getConfiguration().getBoolean(AUTH0_USE_BLOCKEDSTATUS, false); - } - - public String getAuthClientId() { - return configurationService.getConfiguration().getString(AUTH0_AUTH_API_CLIENTID, null); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/UpdateUserAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/UpdateUserAction.java deleted file mode 100644 index 6a5b7a9e..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/actions/UpdateUserAction.java +++ /dev/null @@ -1,54 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.actions; - -import java.util.Map; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.dto.converter.Converter; - -import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -class UpdateUserAction implements SdkAction { - private static final Logger LOG = LoggerFactory.getLogger(UpdateUserAction.class); - - static User updateUser(User user, CustomerModel customer) throws Auth0Exception { - return new UpdateUserAction().execute(Map.of("user", user, "customer", customer)); - } - - private UpdateUserAction() { - // Avoid instantiation - } - - @Override - public User execute(Map parameter) throws Auth0Exception { - User user = getWithType(parameter, "user", User.class); - CustomerModel customer = getWithType(parameter, "customer", CustomerModel.class); - String customerId = customer.getUid(); - try { - Converter customerConverter = getCustomerConverter(); - User userInfo = customerConverter.convert(customer); - - if (requireEmailVerification() && !StringUtils.equals(user.getEmail(), userInfo.getEmail())) { - userInfo.setEmailVerified(false); - userInfo.setVerifyEmail(true); - } - - if (useBlockedStatusForDisabledCustomers()) { - userInfo.setBlocked(BooleanUtils.isNotFalse(customer.isLoginDisabled())); - } - - user = fetch(managementAPI().users().update(user.getId(), userInfo)); - return user; - } catch (Auth0Exception exception) { - LOG.debug(String.format("Search for user with ID '%s' failed!", customer.getUid()), exception); - throw exception; - } finally { - LOG.debug("Update information for existing user with ID '{}' resulted in: '{}'", customerId, user != null ? user.getId() : "-error-"); - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerMetadataPopulator.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerMetadataPopulator.java deleted file mode 100644 index 6692d2b5..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerMetadataPopulator.java +++ /dev/null @@ -1,111 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.replication; - -import static java.lang.String.format; -import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; -import static org.apache.commons.lang3.BooleanUtils.isTrue; -import static org.apache.commons.lang3.StringUtils.isBlank; - -import java.util.HashMap; -import java.util.Map; - -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.converters.Populator; -import de.hybris.platform.core.model.user.AddressModel; -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.dto.converter.ConversionException; - -public class Auth0CustomerMetadataPopulator implements Populator { - private String metadataPrefix; - private String metadataKeyFormat; - - public Auth0CustomerMetadataPopulator(String metadataPrefix) { - this.metadataPrefix = metadataPrefix; - this.metadataKeyFormat = isBlank(metadataPrefix) ? "%1$s" : "%0$s_%1$s"; - } - - @Override - public void populate(CustomerModel source, User target) throws ConversionException { - emptyIfNull(source.getAddresses()).stream() - .filter(this::isContactAddress) - .findFirst() - .map(this::convertAddressToMetadata) - .ifPresent(target::setAppMetadata); - } - - protected boolean isContactAddress(AddressModel address) { - return isTrue(address.getContactAddress()); - } - - private Map convertAddressToMetadata(AddressModel address) { - Map metadata = new HashMap<>(16); - addStandardContactFields(address, metadata); - addStandardAddressFields(address, metadata); - addStandardTelecommunicationFields(address, metadata); - return metadata; - } - - protected void addStandardContactFields(AddressModel address, Map metadata) { - if (address.getTitle() != null) { - metadata.put(getKey("contact_title"), address.getTitle().getCode()); - } - if (address.getCompany() != null) { - metadata.put(getKey("contact_company"), address.getCompany()); - } - if (address.getDepartment() != null) { - metadata.put(getKey("contact_department"), address.getDepartment()); - } - } - - protected void addStandardAddressFields(AddressModel address, Map metadata) { - if (address.getLine1() != null) { - metadata.put(getKey("contact_streetname"), address.getLine1()); - } - if (address.getLine2() != null) { - metadata.put(getKey("contact_streetnumber"), address.getLine2()); - } - if (address.getBuilding() != null) { - metadata.put(getKey("contact_building"), address.getBuilding()); - } - if (address.getAppartment() != null) { - metadata.put(getKey("contact_appartment"), address.getAppartment()); - } - if (address.getPostalcode() != null) { - metadata.put(getKey("contact_postalcode"), address.getPostalcode()); - } - if (address.getTown() != null) { - metadata.put(getKey("contact_city"), address.getTown()); - } - if (address.getDistrict() != null) { - metadata.put(getKey("contact_district"), address.getDepartment()); - } - if (address.getRegion() != null) { - metadata.put(getKey("contact_region"), address.getRegion().getIsocodeShort()); - } - if (address.getCountry() != null) { - metadata.put(getKey("contact_country"), address.getCountry().getIsocode()); - } - if (address.getPobox() != null) { - metadata.put(getKey("contact_pobox"), address.getPobox()); - } - } - - protected void addStandardTelecommunicationFields(AddressModel address, Map metadata) { - if (address.getCellphone() != null) { - metadata.put(getKey("contact_cellphone"), address.getCellphone()); - } - if (address.getPhone1() != null) { - metadata.put(getKey("contact_phone1"), address.getPhone1()); - } - if (address.getPhone2() != null) { - metadata.put(getKey("contact_phone2"), address.getPhone2()); - } - if (address.getFax() != null) { - metadata.put(getKey("contact_fax"), address.getFax()); - } - } - - private String getKey(String fieldName) { - return format(metadataKeyFormat, metadataPrefix, fieldName); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerPopulator.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerPopulator.java deleted file mode 100644 index 47880274..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerPopulator.java +++ /dev/null @@ -1,35 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.replication; - -import static org.apache.commons.lang3.StringUtils.isNotBlank; - -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.commerceservices.strategies.CustomerNameStrategy; -import de.hybris.platform.converters.Populator; -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.dto.converter.ConversionException; - -public class Auth0CustomerPopulator implements Populator { - private CustomerNameStrategy customerNameStrategy; - - public Auth0CustomerPopulator(CustomerNameStrategy customerNameStrategy) { - this.customerNameStrategy = customerNameStrategy; - } - - @Override - public void populate(CustomerModel source, User target) throws ConversionException { - target.setEmail(source.getContactEmail()); - target.setNickname(source.getCustomerID()); - target.setName(source.getName()); - - String[] nameParts = customerNameStrategy.splitName(source.getName()); - if (nameParts.length == 2) { - if (isNotBlank(nameParts[0])) { - target.setGivenName(nameParts[0]); - } - if (isNotBlank(nameParts[1])) { - target.setFamilyName(nameParts[1]); - } - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerReplicationStrategy.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerReplicationStrategy.java deleted file mode 100644 index 539037e5..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/auth0/replication/Auth0CustomerReplicationStrategy.java +++ /dev/null @@ -1,132 +0,0 @@ -package tools.sapcx.commerce.sso.auth0.replication; - -import static org.apache.commons.collections4.ListUtils.emptyIfNull; - -import java.util.List; - -import com.auth0.exception.Auth0Exception; -import com.auth0.json.mgmt.roles.Role; -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.user.UserService; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import tools.sapcx.commerce.sso.auth0.actions.Actions; -import tools.sapcx.commerce.sso.replication.CustomerReplicationException; -import tools.sapcx.commerce.sso.replication.CustomerReplicationHook; -import tools.sapcx.commerce.sso.replication.CustomerReplicationStrategy; - -public class Auth0CustomerReplicationStrategy implements CustomerReplicationStrategy { - private static final Logger LOG = LoggerFactory.getLogger(Auth0CustomerReplicationStrategy.class); - - private UserService userService; - private List customerReplicationHooks; - private String auth0RoleForCustomers; - private boolean isCreationEnabled; - private boolean isRemovalEnabled; - - public Auth0CustomerReplicationStrategy( - UserService userService, - List customerReplicationHooks, - String auth0RoleForCustomers, - boolean isCreationEnabled, - boolean isRemovalEnabled) { - this.userService = userService; - this.customerReplicationHooks = emptyIfNull(customerReplicationHooks); - this.auth0RoleForCustomers = auth0RoleForCustomers; - this.isCreationEnabled = isCreationEnabled; - this.isRemovalEnabled = isRemovalEnabled; - } - - @Override - public void replicate(CustomerModel customer) { - if (userService.isAnonymousUser(customer)) { - LOG.debug("Anonymous user replication is disabled by convention."); - return; - } - - User user = createOrUpdateUser(customer); - if (user != null) { - updateUserRoles(user, !customer.isLoginDisabled()); - } - } - - private User createOrUpdateUser(CustomerModel customer) { - String customerId = customer.getUid(); - try { - User user = Actions.getUser(customerId); - if (user != null) { - LOG.debug("User for provided customer ID '{}' exists: '{}'.", customerId, user.getId()); - User updatedUser = Actions.updateUser(user, customer); - customerReplicationHooks.forEach(hook -> hook.customerSuccessfullyUpdated(customer, updatedUser)); - return updatedUser; - } else if (!isCreationEnabled) { - LOG.debug("Customer creation is disabled by configuration."); - return null; - } else { - LOG.debug("User for provided customer ID '{}' does not exist.", customerId); - User createdUser = Actions.createUser(customer); - customerReplicationHooks.forEach(hook -> hook.customerSuccessfullyCreated(customer, createdUser)); - return createdUser; - } - } catch (Auth0Exception exception) { - LOG.debug("Could not replicate customer with ID '{}'. Data may no be in sync and needs to be corrected manually!", customerId); - throw new CustomerReplicationException("Could not replicate customer to Auth0!", exception); - } - } - - private Role updateUserRoles(User user, boolean isLoginEnabled) { - try { - if (StringUtils.isBlank(auth0RoleForCustomers)) { - return null; - } - - Role role = Actions.getRole(auth0RoleForCustomers); - if (role == null) { - return null; - } - - if (isLoginEnabled) { - Actions.assignRole(role, user); - } else { - Actions.removeRole(role, user); - } - return role; - } catch (Auth0Exception exception) { - LOG.debug("Could not synchronize roles for customer ID '{}'. Data may no be in sync and needs to be corrected manually!", user.getEmail()); - throw new CustomerReplicationException("Could not synchronize customer roles to Auth0!", exception); - } - } - - @Override - public void remove(String customerId) { - if (userService.isUserExisting(customerId) && userService.isAnonymousUser(userService.getUserForUID(customerId))) { - LOG.debug("Anonymous user removal is disabled by convention."); - return; - } - - try { - User user = Actions.getUser(customerId); - if (!isRemovalEnabled) { - LOG.debug("Customer removal is disabled by configuration."); - updateUserRoles(user, false); - return; - } - - if (user == null) { - LOG.debug("User for provided customer ID '{}' does not exist! Removal not necessary.", customerId); - } else { - LOG.debug("User for provided customer ID '{}' exists: '{}'. Trigger user removal.", customerId, user.getId()); - Actions.removeUser(user, customerId); - customerReplicationHooks.forEach(hook -> hook.customerSuccessfullyRemoved(customerId)); - } - } catch (Auth0Exception exception) { - LOG.debug("Could not remove customer with ID '{}'! Account needs to be removed manually!", customerId); - throw new CustomerReplicationException("Could not remove customer on Auth0 side!", exception); - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/constants/CxSsoAuth0Constants.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/constants/CxSsoAuth0Constants.java deleted file mode 100644 index ab8028b3..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/constants/CxSsoAuth0Constants.java +++ /dev/null @@ -1,11 +0,0 @@ -package tools.sapcx.commerce.sso.constants; - -@SuppressWarnings({ "deprecation", "squid:CallToDeprecatedMethod" }) -public class CxSsoAuth0Constants extends GeneratedCxSsoAuth0Constants { - public static final String EXTENSIONNAME = "sapcxssoauth0"; - - private CxSsoAuth0Constants() { - // empty - } - -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/AllCustomerReplicationFilter.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/AllCustomerReplicationFilter.java deleted file mode 100644 index 88f7e51a..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/AllCustomerReplicationFilter.java +++ /dev/null @@ -1,12 +0,0 @@ -package tools.sapcx.commerce.sso.replication; - -import java.util.function.Predicate; - -import de.hybris.platform.core.model.user.CustomerModel; - -public class AllCustomerReplicationFilter implements Predicate { - @Override - public boolean test(CustomerModel customerModel) { - return true; - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationException.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationException.java deleted file mode 100644 index ded0bd0d..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationException.java +++ /dev/null @@ -1,22 +0,0 @@ -package tools.sapcx.commerce.sso.replication; - -public class CustomerReplicationException extends RuntimeException { - public CustomerReplicationException() { - } - - public CustomerReplicationException(String message) { - super(message); - } - - public CustomerReplicationException(String message, Throwable cause) { - super(message, cause); - } - - public CustomerReplicationException(Throwable cause) { - super(cause); - } - - public CustomerReplicationException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationHook.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationHook.java deleted file mode 100644 index 58aa6b23..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationHook.java +++ /dev/null @@ -1,16 +0,0 @@ -package tools.sapcx.commerce.sso.replication; - -import com.auth0.json.mgmt.users.User; - -import de.hybris.platform.core.model.user.CustomerModel; - -public interface CustomerReplicationHook { - default void customerSuccessfullyCreated(CustomerModel customer, User createdUser) { - } - - default void customerSuccessfullyUpdated(CustomerModel customer, User updatedUser) { - } - - default void customerSuccessfullyRemoved(String customer) { - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationInterceptor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationInterceptor.java deleted file mode 100644 index 39e8356a..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationInterceptor.java +++ /dev/null @@ -1,55 +0,0 @@ -package tools.sapcx.commerce.sso.replication; - -import java.util.function.Predicate; - -import de.hybris.platform.core.model.user.CustomerModel; -import de.hybris.platform.servicelayer.interceptor.InterceptorContext; -import de.hybris.platform.servicelayer.interceptor.InterceptorException; -import de.hybris.platform.servicelayer.interceptor.RemoveInterceptor; -import de.hybris.platform.servicelayer.interceptor.ValidateInterceptor; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class CustomerReplicationInterceptor implements ValidateInterceptor, RemoveInterceptor { - private static final Logger LOG = LoggerFactory.getLogger(CustomerReplicationInterceptor.class); - - private CustomerReplicationStrategy customerReplicationStrategy; - private Predicate customerReplicationFilter; - private boolean enabled; - - public CustomerReplicationInterceptor( - CustomerReplicationStrategy customerReplicationStrategy, - Predicate customerReplicationFilter, - boolean enabled) { - this.customerReplicationStrategy = customerReplicationStrategy; - this.customerReplicationFilter = customerReplicationFilter; - this.enabled = enabled; - } - - @Override - public void onValidate(CustomerModel customer, InterceptorContext interceptorContext) { - if (enabled && customer != null) { - try { - if (customerReplicationFilter.test(customer)) { - customerReplicationStrategy.replicate(customer); - } - } catch (RuntimeException e) { - LOG.warn(String.format("Could not replicate customer with ID '%s'. Data may no be in sync and needs to be corrected manually!", customer.getUid()), e); - } - } - } - - @Override - public void onRemove(CustomerModel customer, InterceptorContext interceptorContext) throws InterceptorException { - if (enabled && customer != null) { - try { - if (customerReplicationFilter.test(customer)) { - customerReplicationStrategy.remove(customer.getUid()); - } - } catch (RuntimeException e) { - LOG.warn(String.format("Could not remove customer with ID '%s'! Account needs to be removed manually!", customer.getUid()), e); - } - } - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationStrategy.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationStrategy.java deleted file mode 100644 index 31390bc5..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/src/tools/sapcx/commerce/sso/replication/CustomerReplicationStrategy.java +++ /dev/null @@ -1,11 +0,0 @@ -package tools.sapcx.commerce.sso.replication; - -import javax.annotation.Nonnull; - -import de.hybris.platform.core.model.user.CustomerModel; - -public interface CustomerReplicationStrategy { - void replicate(@Nonnull CustomerModel customer); - - void remove(@Nonnull String customerId); -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java deleted file mode 100644 index 6e5ccc97..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxssoauth0/testsrc/tools/sapcx/commerce/sso/config/ExtensionConfigurationTests.java +++ /dev/null @@ -1,18 +0,0 @@ -package tools.sapcx.commerce.sso.config; - -import de.hybris.bootstrap.annotations.UnitTest; - -import org.junit.Test; - -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; - -@UnitTest -public class ExtensionConfigurationTests { - @Test - public void extensionConfiguration() { - InstalledExtensionVerifier.verifier() - .requires("sapcxssoauth0") - .requires("sapcxsinglesignon") - .verify(); - } -} diff --git a/core-customize/hybris/config/localextensions.xml b/core-customize/hybris/config/localextensions.xml index 20b3b71f..ae154b02 100644 --- a/core-customize/hybris/config/localextensions.xml +++ b/core-customize/hybris/config/localextensions.xml @@ -12,9 +12,6 @@ - - - From 58d3312f83e87ecd53c67e943a3cde235304bcfd Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 16 Dec 2025 14:18:02 +0100 Subject: [PATCH 05/28] adjust library changes from JDK17 to JDK21 --- .../external-dependencies.xml | 11 ++++ .../email/DefaultHtmlEmailService.java | 4 +- .../toolkit/email/HtmlEmailAddress.java | 4 +- .../toolkit/email/HtmlEmailBuilder.java | 8 +-- .../toolkit/email/HtmlEmailGenerator.java | 6 +- .../toolkit/email/HtmlEmailService.java | 10 +-- .../toolkit/email/ProxyHtmlEmail.java | 61 ++++------------- .../email/ThymeleafHtmlEmailGenerator.java | 4 +- .../AbstractHtmlEmailAttachmentBuilder.java | 6 +- .../attachments/EmailAfterBuildHook.java | 4 +- .../FileBasedHtmlEmailAttachmentBuilder.java | 6 +- .../HtmlEmailAttachmentBuilder.java | 4 +- .../MediaBasedHtmlEmailAttachmentBuilder.java | 8 +-- .../URLBasedHtmlEmailAttachmentBuilder.java | 6 +- .../StoreLocallyHtmlEmailServiceFake.java | 21 +++--- .../executor/ImpExDataImportExecutor.java | 4 +- .../executor/ImpExDataImporterLogger.java | 5 +- .../SynchronousImpExDataImportExecutor.java | 6 +- .../model/FailureLoggingModelService.java | 6 -- .../setup/ReliableSystemSetupExecutor.java | 2 - .../toolkit/setup/SystemSetupEnvironment.java | 66 +++++++++++-------- .../importer/PrefixBasedDataImporter.java | 7 +- .../setup/importer/ProjectDataImporter.java | 2 +- .../importer/ReleasePatchesImporter.java | 2 +- .../email/DefaultHtmlEmailServiceTests.java | 8 +-- .../toolkit/email/HtmlEmailBuilderTests.java | 25 +++---- ...HtmlEmailGeneratorDefaultMethodsTests.java | 12 ++-- .../ThymeleafHtmlEmailGeneratorTests.java | 16 ++--- ...reInDatabaseHtmlEmailServiceFakeTests.java | 12 ++-- ...calDirectoryHtmlEmailServiceFakeTests.java | 12 ++-- .../ImpExDataImporterLoggerTests.java | 13 ---- .../InMemoryDynamicItemModelAttribute.java | 2 +- .../itemmodel/InMemoryItemModelAttribute.java | 2 +- .../InMemoryLocalizedItemModelAttribute.java | 2 +- .../config/ConfigurationServiceFake.java | 4 +- .../email/HtmlEmailGeneratorFake.java | 8 +-- .../ConfigurableBackofficeLocaleService.java | 6 -- .../GenericItemSyncRelatedItemsVisitor.java | 4 -- .../FrontendConfigurationController.java | 4 +- .../frontend/ConfigurationServiceFake.java | 4 +- .../action/ExecuteReportAction.java | 4 +- .../action/ValidateReportAction.java | 4 +- ...erationScheduleInitDefaultInterceptor.java | 3 - ...ationPropertyAccessorAttributeHandler.java | 2 - .../ReportGeneratorJobPerformable.java | 17 ++--- .../report/DefaultReportService.java | 2 - .../FlexibleSearchGenericSearchService.java | 5 -- .../reporting/search/GenericSearchResult.java | 2 +- .../search/GenericSearchResultHeader.java | 2 +- ...PropertyAccessorAttributeHandlerTests.java | 4 +- .../report/DefaultReportServiceTests.java | 4 +- .../DefaultGenericFlexibleSearchTests.java | 6 +- 52 files changed, 195 insertions(+), 257 deletions(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml index 886ba0f7..488dd375 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml @@ -6,6 +6,17 @@ 5.0.0-snapshot jar + + jakarta.mail + jakarta.mail-api + 2.1.3 + + + org.eclipse.angus + angus-mail + 2.0.3 + runtime + org.thymeleaf thymeleaf diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java index b592160e..c7df51e1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java @@ -1,7 +1,7 @@ package tools.sapcx.commerce.toolkit.email; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; public class DefaultHtmlEmailService implements HtmlEmailService { /** diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java index 3c445ba9..4febc342 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java @@ -1,11 +1,11 @@ package tools.sapcx.commerce.toolkit.email; -import javax.mail.internet.InternetAddress; - import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; +import jakarta.mail.internet.InternetAddress; + public class HtmlEmailAddress { private String name; private String email; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java index b80eb2e4..2df8ab2f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java @@ -10,18 +10,18 @@ import java.util.Map; import java.util.function.Consumer; -import javax.mail.internet.InternetAddress; - import de.hybris.platform.core.model.media.MediaModel; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import tools.sapcx.commerce.toolkit.email.attachments.EmailAfterBuildHook; import tools.sapcx.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilder; import tools.sapcx.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilders; +import jakarta.mail.internet.InternetAddress; + public class HtmlEmailBuilder { static HtmlEmailBuilder withHtmlEmailGenerator(HtmlEmailGenerator generator) { return new HtmlEmailBuilder(generator); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java index af5865d8..2b5d820b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java @@ -6,10 +6,10 @@ import java.util.Locale; import java.util.Map; -import javax.mail.internet.InternetAddress; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import jakarta.mail.internet.InternetAddress; /** * The {@link HtmlEmailGenerator} interface introduces a simplified way of generating HTML emails from processes and diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java index 9458de67..45e72754 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java @@ -2,12 +2,12 @@ import java.io.UnsupportedEncodingException; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; -import org.apache.commons.lang.StringUtils; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; /** * The {@link HtmlEmailService} interface introduces a simplified way of sending HTML emails from processes and diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java index 559d0955..9707af54 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java @@ -7,21 +7,22 @@ import java.util.List; import java.util.Map; -import javax.activation.DataSource; -import javax.mail.Authenticator; -import javax.mail.BodyPart; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import javax.mail.internet.MimeMultipart; import javax.naming.NamingException; -import org.apache.commons.mail.Email; -import org.apache.commons.mail.EmailAttachment; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; -import org.apache.commons.mail.MultiPartEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.Email; +import org.apache.commons.mail2.jakarta.EmailAttachment; +import org.apache.commons.mail2.jakarta.HtmlEmail; +import org.apache.commons.mail2.jakarta.MultiPartEmail; + +import jakarta.activation.DataSource; +import jakarta.mail.Authenticator; +import jakarta.mail.BodyPart; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; +import jakarta.mail.internet.MimeMultipart; class ProxyHtmlEmail extends HtmlEmail { private static final String UNSUPPORTED_OPERATION_MESSAGE = "This method must not be called on the proxy object!"; @@ -223,12 +224,6 @@ public void setHostName(String aHostName) { proxiedHtmlEmail.setHostName(aHostName); } - @Override - @Deprecated - public void setTLS(boolean withTLS) { - proxiedHtmlEmail.setTLS(withTLS); - } - @Override public Email setStartTLSEnabled(boolean startTlsEnabled) { return proxiedHtmlEmail.setStartTLSEnabled(startTlsEnabled); @@ -474,34 +469,16 @@ public boolean isStartTLSEnabled() { return proxiedHtmlEmail.isStartTLSEnabled(); } - @Override - @Deprecated - public boolean isTLS() { - return proxiedHtmlEmail.isTLS(); - } - @Override public void setPopBeforeSmtp(boolean newPopBeforeSmtp, String newPopHost, String newPopUsername, String newPopPassword) { proxiedHtmlEmail.setPopBeforeSmtp(newPopBeforeSmtp, newPopHost, newPopUsername, newPopPassword); } - @Override - @Deprecated - public boolean isSSL() { - return proxiedHtmlEmail.isSSL(); - } - @Override public boolean isSSLOnConnect() { return proxiedHtmlEmail.isSSLOnConnect(); } - @Override - @Deprecated - public void setSSL(boolean ssl) { - proxiedHtmlEmail.setSSL(ssl); - } - @Override public Email setSSLOnConnect(boolean ssl) { return proxiedHtmlEmail.setSSLOnConnect(ssl); @@ -562,18 +539,8 @@ public int getSocketConnectionTimeout() { return proxiedHtmlEmail.getSocketConnectionTimeout(); } - @Override - public void setSocketConnectionTimeout(int socketConnectionTimeout) { - proxiedHtmlEmail.setSocketConnectionTimeout(socketConnectionTimeout); - } - @Override public int getSocketTimeout() { return proxiedHtmlEmail.getSocketTimeout(); } - - @Override - public void setSocketTimeout(int socketTimeout) { - proxiedHtmlEmail.setSocketTimeout(socketTimeout); - } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java index cc24ff35..48646145 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java @@ -5,8 +5,8 @@ import de.hybris.platform.util.mail.MailUtils; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.assertj.core.util.VisibleForTesting; import org.thymeleaf.ITemplateEngine; import org.thymeleaf.context.Context; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java index 9f11bf46..dea343ae 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java @@ -1,9 +1,9 @@ package tools.sapcx.commerce.toolkit.email.attachments; -import javax.activation.DataSource; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import jakarta.activation.DataSource; public abstract class AbstractHtmlEmailAttachmentBuilder implements HtmlEmailAttachmentBuilder { private String name; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java index 5af7f8fd..202bad66 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java @@ -1,7 +1,7 @@ package tools.sapcx.commerce.toolkit.email.attachments; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; @FunctionalInterface public interface EmailAfterBuildHook { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java index cf193084..33eb9699 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java @@ -3,10 +3,10 @@ import java.io.File; import java.io.IOException; -import javax.activation.DataSource; -import javax.activation.FileDataSource; +import org.apache.commons.mail2.core.EmailException; -import org.apache.commons.mail.EmailException; +import jakarta.activation.DataSource; +import jakarta.activation.FileDataSource; public class FileBasedHtmlEmailAttachmentBuilder extends AbstractHtmlEmailAttachmentBuilder { private File file; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java index bd4525b7..b6d7bb76 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java @@ -1,7 +1,7 @@ package tools.sapcx.commerce.toolkit.email.attachments; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; public interface HtmlEmailAttachmentBuilder { HtmlEmailAttachmentBuilder name(String name); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java index 9ac50392..abe430c5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java @@ -1,14 +1,14 @@ package tools.sapcx.commerce.toolkit.email.attachments; -import javax.activation.DataSource; -import javax.mail.util.ByteArrayDataSource; - import de.hybris.platform.core.Registry; import de.hybris.platform.core.model.media.MediaModel; import de.hybris.platform.servicelayer.media.MediaService; import de.hybris.platform.servicelayer.media.NoDataAvailableException; -import org.apache.commons.mail.EmailException; +import org.apache.commons.mail2.core.EmailException; + +import jakarta.activation.DataSource; +import jakarta.mail.util.ByteArrayDataSource; public class MediaBasedHtmlEmailAttachmentBuilder extends AbstractHtmlEmailAttachmentBuilder { private MediaModel media; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java index 976f7770..0826a613 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java @@ -4,10 +4,10 @@ import java.io.InputStream; import java.net.URL; -import javax.activation.DataSource; -import javax.activation.URLDataSource; +import org.apache.commons.mail2.core.EmailException; -import org.apache.commons.mail.EmailException; +import jakarta.activation.DataSource; +import jakarta.activation.URLDataSource; public class URLBasedHtmlEmailAttachmentBuilder extends AbstractHtmlEmailAttachmentBuilder { private URL url; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java index 289688ed..92465bd1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java @@ -15,28 +15,29 @@ import java.util.Locale; import java.util.Map; -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; - import de.hybris.platform.core.model.media.MediaFolderModel; import de.hybris.platform.servicelayer.exceptions.UnknownIdentifierException; import de.hybris.platform.servicelayer.media.MediaService; import de.hybris.platform.servicelayer.model.ModelService; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; -import org.apache.log4j.Logger; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.assertj.core.util.VisibleForTesting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import tools.sapcx.commerce.toolkit.email.HtmlEmailService; import tools.sapcx.commerce.toolkit.model.LocallyStoredEmailModel; +import jakarta.mail.Address; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; + public class StoreLocallyHtmlEmailServiceFake implements HtmlEmailService { - private static final Logger LOG = Logger.getLogger(StoreLocallyHtmlEmailServiceFake.class); + private static final Logger LOG = LoggerFactory.getLogger(StoreLocallyHtmlEmailServiceFake.class); private static final String TIMESTAMP_FORMAT = "yyyyMMdd-HHmmssS"; private static final String MEDIACODE_FORMAT = "fake-email_%s"; private static final String DEFAULT_FILENAME_PATTERN = "{timestamp}_{subject}.{extension}"; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java index 2cbe22fa..a6f1b18c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java @@ -2,7 +2,7 @@ import de.hybris.platform.core.initialization.SystemSetupContext; -import org.apache.log4j.Logger; +import org.slf4j.LoggerFactory; @FunctionalInterface public interface ImpExDataImportExecutor { @@ -13,6 +13,6 @@ default void importImpexFile(SystemSetupContext context, String file) { } default ImpExDataImporterLogger getLogger() { - return new ImpExDataImporterLogger(Logger.getLogger(getClass())); + return new ImpExDataImporterLogger(LoggerFactory.getLogger(getClass())); } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java index bbc568b2..d3987229 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java @@ -2,14 +2,15 @@ import de.hybris.platform.core.initialization.SystemSetupContext; -import org.apache.log4j.Logger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This logger facade provides simplified access to the logging stack and guarantees that log messages are shown both * in the log files of the system as well as in the JSP context of the triggered system setup process. */ public final class ImpExDataImporterLogger { - static final Logger LOG = Logger.getLogger(ImpExDataImporterLogger.class); + static final Logger LOG = LoggerFactory.getLogger(ImpExDataImporterLogger.class); private final Logger logger; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java index d6b56ccf..5f034f97 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java @@ -13,8 +13,7 @@ import de.hybris.platform.servicelayer.impex.impl.StreamBasedImpExResource; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Required; +import org.apache.commons.lang3.StringUtils; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.ResourceLoader; @@ -106,17 +105,14 @@ public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } - @Required public void setEnvironment(SystemSetupEnvironment environment) { this.environment = environment; } - @Required public void setCommonI18NService(CommonI18NService commonI18NService) { this.commonI18NService = commonI18NService; } - @Required public void setImportService(ImportService importService) { this.importService = importService; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java index 9faa0b8e..708b1c93 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java @@ -308,12 +308,6 @@ public void clearTransactionsSettings() { wrapWithLoggingCapabilities(() -> super.clearTransactionsSettings()); } - @Override - @Deprecated(since = "6.1.0", forRemoval = true) - public T getByExample(T t) { - return wrapWithLoggingCapabilities(() -> super.getByExample(t)); - } - @Override public void lock(PK pk) { wrapWithLoggingCapabilities(() -> super.lock(pk)); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java index 7fc4bc5a..05d60335 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java @@ -15,7 +15,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.annotation.Required; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -94,7 +93,6 @@ private boolean isSystemInitialization(SystemSetupContext context) { return context.getProcess().isInit() && !context.getProcess().isAll(); } - @Required public void setValidationService(ValidationService validationService) { this.validationService = validationService; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java index f4960d32..f4ae66e0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java @@ -9,21 +9,20 @@ import de.hybris.platform.servicelayer.config.ConfigurationService; import de.hybris.platform.servicelayer.impex.ImportConfig; -import org.apache.commons.configuration.BaseConfiguration; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; -import org.apache.log4j.Logger; +import org.apache.commons.configuration2.PropertiesConfiguration; +import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder; +import org.apache.commons.configuration2.builder.fluent.Parameters; +import org.apache.commons.configuration2.ex.ConfigurationException; import org.assertj.core.util.VisibleForTesting; -import org.springframework.beans.factory.annotation.Required; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This facade handles the access to important properties for the system setup process. It also keeps track of imported * files and verifies the release numbers of the files accordingly. */ public final class SystemSetupEnvironment { - static final Logger LOG = Logger.getLogger(SystemSetupEnvironment.class); + static final Logger LOG = LoggerFactory.getLogger(SystemSetupEnvironment.class); @VisibleForTesting static final String LEGACYMODEKEY = "sapcommercetoolkit.impeximport.configuration.legacymode"; @VisibleForTesting @@ -43,7 +42,8 @@ public final class SystemSetupEnvironment { @VisibleForTesting static final String FILE_HEADER = "This file is generated automatically by the sapcommercetoolkit extension. Do not change the file manually!"; - private Configuration persistentConfiguration = new BaseConfiguration(); + private String fileName; + private FileBasedConfigurationBuilder persistentConfiguration; private ConfigurationService configurationService; public boolean useLegacyModeForImpEx() { @@ -77,24 +77,38 @@ public boolean supportLocalizedImpExFiles() { public void addProcessedItem(String version, String key) { setLastProcessedReleaseVersion(version); - persistentConfiguration.addProperty(LASTPROCESSEDRELEASEITEMSKEY, key); + getPersistentConfiguration().addProperty(LASTPROCESSEDRELEASEITEMSKEY, key); + } + + private PropertiesConfiguration getPersistentConfiguration() { + try { + if (persistentConfiguration == null) { + throw new ConfigurationException("No persistent configuration found!"); + } + return persistentConfiguration.getConfiguration(); + } catch (ConfigurationException e) { + LOG.error( + "Persistent configuration could not be loaded, any modification will be lost! Please make sure you have configured the file path correctly. Current value is '{}'", + fileName, e); + return new PropertiesConfiguration(); + } } public void setLastProcessedReleaseVersion(String version) { String lastVersion = getLastProcessedReleaseVersion(); if (version.compareToIgnoreCase(lastVersion) > 0) { - persistentConfiguration.clearProperty(LASTPROCESSEDRELEASEITEMSKEY); - persistentConfiguration.setProperty(LASTPROCESSEDRELEASEVERSIONKEY, version); + getPersistentConfiguration().clearProperty(LASTPROCESSEDRELEASEITEMSKEY); + getPersistentConfiguration().setProperty(LASTPROCESSEDRELEASEVERSIONKEY, version); } } public String getLastProcessedReleaseVersion() { - return persistentConfiguration.getString(LASTPROCESSEDRELEASEVERSIONKEY, ""); + return getPersistentConfiguration().getString(LASTPROCESSEDRELEASEVERSIONKEY, ""); } public List getLastProcessedItems() { ArrayList keys = new ArrayList<>(); - persistentConfiguration.getList(LASTPROCESSEDRELEASEITEMSKEY).stream() + getPersistentConfiguration().getList(LASTPROCESSEDRELEASEITEMSKEY).stream() .map(String.class::cast) .forEach(keys::add); return keys; @@ -135,33 +149,33 @@ private Locale getLocaleFromConfig(String key, Locale defaultValue) { return new Locale(locale); } - @Required public void setConfigurationService(ConfigurationService configurationService) { this.configurationService = configurationService; } public void setConfigurationFile(String fileName) { - try { - PropertiesConfiguration configuration = new PropertiesConfiguration(); - configuration.setFileName(fileName); + this.fileName = fileName; - File file = configuration.getFile(); + try { + File file = new File(fileName); if (!file.exists()) { file.getParentFile().mkdirs(); if (!file.createNewFile()) { throw new IOException("Cannot create file at: " + fileName); } - configuration.setHeader(FILE_HEADER); - configuration.save(); - } else { - configuration.load(); } - configuration.setAutoSave(true); - configuration.setReloadingStrategy(new FileChangedReloadingStrategy()); - this.persistentConfiguration = configuration; + persistentConfiguration = new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class); + persistentConfiguration.setParameters(new Parameters() + .fileBased() + .setEncoding("UTF-8") + .setFile(file) + .getParameters()); + persistentConfiguration.setAutoSave(true); + persistentConfiguration.getConfiguration().setHeader(FILE_HEADER); } catch (IOException | ConfigurationException e) { LOG.error("Cannot read or create persistent configuration file at: " + fileName + ". Please create the file manually and restart the server.", e); + persistentConfiguration = null; } } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java index fe124f63..077b07f0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java @@ -4,8 +4,7 @@ import de.hybris.platform.core.initialization.SystemSetupContext; -import org.apache.commons.lang.StringUtils; -import org.springframework.beans.factory.annotation.Required; +import org.apache.commons.lang3.StringUtils; import tools.sapcx.commerce.toolkit.impex.executor.ImpExDataImportExecutor; import tools.sapcx.commerce.toolkit.setup.ImpExDataImporter; @@ -53,7 +52,6 @@ protected Predicate getKeyFilter(SystemSetupContext context) { return StringUtils::isNotBlank; } - @Required public void setEnvironment(SystemSetupEnvironment environment) { this.environment = environment; } @@ -62,7 +60,6 @@ public SystemSetupEnvironment getEnvironment() { return environment; } - @Required public void setImpExDataImportExecutor(ImpExDataImportExecutor impExDataImportExecutor) { this.impExDataImportExecutor = impExDataImportExecutor; } @@ -71,7 +68,6 @@ public ImpExDataImportExecutor getImpExDataImportExecutor() { return impExDataImportExecutor; } - @Required public void setTitle(String title) { this.title = title; } @@ -80,7 +76,6 @@ public String getTitle() { return title; } - @Required public void setPrefix(String prefix) { this.prefix = prefix; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java index 5f55970c..3d7cde91 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java @@ -8,7 +8,7 @@ import de.hybris.platform.core.initialization.SystemSetupContext; import de.hybris.platform.core.initialization.SystemSetupParameter; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; /** * In addition to the {@link PrefixBasedDataImporter}, this class adds a {@link SystemSetupParameter} for every key. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java index bcbeebfa..5065cb0c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java @@ -7,7 +7,7 @@ import de.hybris.platform.core.initialization.SystemSetupContext; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import tools.sapcx.commerce.toolkit.setup.SystemSetupEnvironment; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java index 2e2a7f0a..be3c7983 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java @@ -4,15 +4,15 @@ import java.util.Random; -import javax.mail.internet.InternetAddress; - import de.hybris.bootstrap.annotations.UnitTest; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.junit.Before; import org.junit.Test; +import jakarta.mail.internet.InternetAddress; + @UnitTest public class DefaultHtmlEmailServiceTests { private DefaultHtmlEmailService emailService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java index c4586dbb..fdb2a659 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java @@ -9,15 +9,11 @@ import java.nio.file.Path; import java.util.Locale; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMultipart; - import de.hybris.bootstrap.annotations.UnitTest; import de.hybris.platform.core.model.media.MediaModel; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.junit.Before; import org.junit.Test; @@ -25,6 +21,10 @@ import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; import tools.sapcx.commerce.toolkit.testing.testdoubles.email.HtmlEmailGeneratorFake; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMultipart; + @UnitTest public class HtmlEmailBuilderTests { private HtmlEmailBuilder builder; @@ -168,28 +168,31 @@ public void testAttachments() throws Exception { .build(); htmlEmail.buildMimeMessage(); - assertThat(htmlEmail) .extracting("container") - .flatExtracting("parts") + .extracting("parts") + .asList() .extractingResultOf("getDisposition") .containsExactly(null, "attachment", "attachment"); assertThat(htmlEmail) .extracting("container") - .flatExtracting("parts") + .extracting("parts") + .asList() .extractingResultOf("getContentType") .containsExactly("text/plain", "text/plain", "text/plain"); assertThat(htmlEmail) .extracting("container") - .flatExtracting("parts") + .extracting("parts") + .asList() .extractingResultOf("getFileName") .containsExactly(null, tempFile.getFileName().toString(), "url-attachment.txt"); assertThat(htmlEmail) .extracting("container") - .flatExtracting("parts") + .extracting("parts") + .asList() .extractingResultOf("getDescription") .containsExactly(null, null, "url attachment description"); } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java index 43fc3abc..60fd36ad 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java @@ -8,17 +8,17 @@ import java.util.Locale; import java.util.Map; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMultipart; - -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.junit.Before; import org.junit.Test; import tools.sapcx.commerce.toolkit.testing.testdoubles.email.HtmlEmailGeneratorFake; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMultipart; + public class HtmlEmailGeneratorDefaultMethodsTests { private HtmlEmailGenerator htmlEmailGenerator; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java index bf83a00d..466bb193 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java @@ -1,7 +1,7 @@ package tools.sapcx.commerce.toolkit.email; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -12,21 +12,21 @@ import java.util.Locale; import java.util.Map; -import javax.mail.MessagingException; -import javax.mail.internet.AddressException; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMultipart; - import de.hybris.bootstrap.annotations.UnitTest; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.thymeleaf.ITemplateEngine; import org.thymeleaf.context.IContext; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMultipart; + @UnitTest public class ThymeleafHtmlEmailGeneratorTests { private ITemplateEngine templateEngine; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java index e7f54713..5a9a7005 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java @@ -9,16 +9,12 @@ import java.io.OutputStream; import java.util.List; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.internet.MimeMessage; - import de.hybris.bootstrap.annotations.UnitTest; import de.hybris.platform.servicelayer.media.MediaService; import de.hybris.platform.servicelayer.model.ModelService; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -26,6 +22,10 @@ import tools.sapcx.commerce.toolkit.model.LocallyStoredEmailModel; import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.internet.MimeMessage; + @UnitTest public class StoreInDatabaseHtmlEmailServiceFakeTests { private ModelService modelService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java index 716373e5..7d8263ab 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java @@ -9,19 +9,19 @@ import java.nio.file.Path; import java.util.List; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.internet.MimeMessage; - import de.hybris.bootstrap.annotations.UnitTest; import org.apache.commons.io.FileUtils; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.junit.After; import org.junit.Before; import org.junit.Test; +import jakarta.mail.MessagingException; +import jakarta.mail.Session; +import jakarta.mail.internet.MimeMessage; + @UnitTest public class StoreInLocalDirectoryHtmlEmailServiceFakeTests { private StoreLocallyHtmlEmailServiceFake service; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java index 573cf96e..250304f6 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java @@ -11,8 +11,6 @@ import de.hybris.platform.util.JspContext; import org.apache.commons.io.output.StringBuilderWriter; -import org.apache.log4j.Level; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.mock.web.MockJspWriter; @@ -21,7 +19,6 @@ public class ImpExDataImporterLoggerTests { private SystemSetupContext context; private Writer jspOutWriter = new StringBuilderWriter(); - private Level previousLevel; private ImpExDataImporterLogger logger; @@ -33,12 +30,6 @@ public void setUp() throws Exception { context.setJspContext(new JspContext(new MockJspWriter(jspOutWriter), null, null)); logger = new ImpExDataImporterLogger(); - previousLevel = ImpExDataImporterLogger.LOG.getLevel(); - } - - @After - public void tearDown() throws Exception { - ImpExDataImporterLogger.LOG.setLevel(previousLevel); } @Test @@ -61,16 +52,12 @@ public void verifyDebugWithExceptionDoesNotLogToJspContext() { @Test public void verifyDebugLogsToJspContextIfDebugIsEnabled() { - ImpExDataImporterLogger.LOG.setLevel(Level.DEBUG); - logger.debug(context, "debug text"); assertThat(jspOutWriter.toString()).isEqualTo(coloredTextWithNewline("debug text", "cyan")); } @Test public void verifyDebugWithExceptionLogsToJspContextIfDebugIsEnabled() { - ImpExDataImporterLogger.LOG.setLevel(Level.DEBUG); - logger.debug(context, "debug text"); assertThat(jspOutWriter.toString()).isEqualTo(coloredTextWithNewline("debug text", "cyan")); } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java index 3d6b1c58..d169034b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java @@ -7,7 +7,7 @@ import de.hybris.platform.servicelayer.model.attribute.DynamicAttributeHandler; import de.hybris.platform.servicelayer.model.attribute.DynamicLocalizedAttributeHandler; -import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; public class InMemoryDynamicItemModelAttribute implements ItemModelAttribute, InMemoryItemAwareAttribute { /** diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java index 74102655..ca8988e1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java @@ -3,7 +3,7 @@ import java.util.*; import java.util.function.Function; -import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; class InMemoryItemModelAttribute implements ItemModelAttribute { /** diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java index b9d0cc54..0cb5189c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java @@ -6,7 +6,7 @@ import java.util.function.Function; import java.util.stream.Collectors; -import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringBuilder; class InMemoryLocalizedItemModelAttribute implements ItemModelAttribute { /** diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java index 60d800e8..dd425995 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java @@ -2,8 +2,8 @@ import de.hybris.platform.servicelayer.config.ConfigurationService; -import org.apache.commons.configuration.BaseConfiguration; -import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration2.BaseConfiguration; +import org.apache.commons.configuration2.Configuration; public class ConfigurationServiceFake implements ConfigurationService { private BaseConfiguration configuration = new BaseConfiguration(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java index ed2321dc..716f2239 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java @@ -4,13 +4,13 @@ import java.util.Locale; import java.util.Map; -import javax.mail.internet.InternetAddress; - -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import tools.sapcx.commerce.toolkit.email.HtmlEmailGenerator; +import jakarta.mail.internet.InternetAddress; + public class HtmlEmailGeneratorFake implements HtmlEmailGenerator { @Override public HtmlEmail createHtmlEmail() throws EmailException { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java index b84e92f8..03558058 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java @@ -15,8 +15,6 @@ import de.hybris.platform.servicelayer.i18n.I18NService; import de.hybris.platform.servicelayer.user.UserService; -import org.springframework.beans.factory.annotation.Required; - /** * Enhancement of the {@link BackofficeLocaleService} to enhance configuration possibilities! *

@@ -73,24 +71,20 @@ private synchronized void cxInitializeUILocales() { } } - @Required public void setUserService(UserService userService) { this.userService = userService; } - @Required @Override public void setI18nService(I18NService i18nService) { super.setI18nService(i18nService); this.i18nService = i18nService; } - @Required public void setSortDataLocalesByIsoCode(boolean sortDataLocalesByIsoCode) { this.sortDataLocalesByIsoCode = sortDataLocalesByIsoCode; } - @Required public void setLocalesForBackofficeUi(String localesForBackofficeUi) { this.localesForBackofficeUi.clear(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java index 5185f8a6..50cf2bda 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java @@ -12,7 +12,6 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.assertj.core.util.VisibleForTesting; -import org.springframework.beans.factory.annotation.Required; /** * Generic implementation of {@link ItemVisitor}. This class shall avoid that new {@link ItemVisitor} classes need to @@ -70,17 +69,14 @@ private Collection getAttributeAsList(ItemModel model, String attribu return Collections.emptyList(); } - @Required public void setModelService(ModelService modelService) { this.modelService = modelService; } - @Required public void setTypeService(TypeService typeService) { this.typeService = typeService; } - @Required public void setHybrisProperties(Properties hybrisProperties) { this.hybrisProperties = hybrisProperties; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java index 4c2ed196..dd1bc183 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java @@ -1,7 +1,5 @@ package tools.sapcx.commerce.config.controller; -import javax.annotation.Resource; - import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,6 +10,8 @@ import tools.sapcx.commerce.config.FrontendConfigurationWsDto; import tools.sapcx.commerce.config.frontend.FrontendConfigurationService; +import jakarta.annotation.Resource; + @RestController @RequestMapping(value = "/{baseSiteId}/configuration") public class FrontendConfigurationController { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java index 53baf01f..b022ab54 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java @@ -2,8 +2,8 @@ import de.hybris.platform.servicelayer.config.ConfigurationService; -import org.apache.commons.configuration.BaseConfiguration; -import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration2.BaseConfiguration; +import org.apache.commons.configuration2.Configuration; public class ConfigurationServiceFake implements ConfigurationService { private BaseConfiguration configuration = new BaseConfiguration(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java index 5b0ed628..4b99d9ec 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java @@ -10,8 +10,6 @@ import java.util.Map; import java.util.Optional; -import javax.annotation.Resource; - import com.hybris.cockpitng.actions.ActionContext; import com.hybris.cockpitng.actions.ActionResult; import com.hybris.cockpitng.actions.CockpitAction; @@ -30,6 +28,8 @@ import tools.sapcx.commerce.reporting.search.FlexibleSearchGenericSearchService; import tools.sapcx.commerce.reporting.search.GenericSearchResult; +import jakarta.annotation.Resource; + public class ExecuteReportAction implements CockpitAction { private static final Logger LOG = LoggerFactory.getLogger(ExecuteReportAction.class); private static final String CONFIRMATION = "executereport.confirmation"; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java index 13bfdcb4..d4c527f1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java @@ -3,8 +3,6 @@ import java.text.MessageFormat; import java.util.Map; -import javax.annotation.Resource; - import com.hybris.cockpitng.actions.ActionContext; import com.hybris.cockpitng.actions.ActionResult; import com.hybris.cockpitng.actions.CockpitAction; @@ -18,6 +16,8 @@ import tools.sapcx.commerce.reporting.search.FlexibleSearchGenericSearchService; import tools.sapcx.commerce.reporting.search.GenericSearchResult; +import jakarta.annotation.Resource; + public class ValidateReportAction implements CockpitAction { private static final Logger LOG = LoggerFactory.getLogger(ValidateReportAction.class); private static final String SEARCH_SUCCESS = "validatereport.successful"; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java index dd85700e..1d57828a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java @@ -9,7 +9,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; import tools.sapcx.commerce.reporting.model.ReportGenerationScheduleModel; @@ -39,12 +38,10 @@ private ServicelayerJobModel getServiceLayerJob() { } } - @Required public void setFlexibleSearchService(FlexibleSearchService flexibleSearchService) { this.flexibleSearchService = flexibleSearchService; } - @Required public void setJobCode(String jobCode) { this.jobCode = jobCode; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java index 4c7d8cc8..2f048f98 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java @@ -4,7 +4,6 @@ import de.hybris.platform.servicelayer.model.attribute.AbstractDynamicAttributeHandler; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Required; import tools.sapcx.commerce.reporting.model.ConfigurationPropertyAccessorModel; @@ -25,7 +24,6 @@ public void set(ConfigurationPropertyAccessorModel model, String value) { } } - @Required public void setConfigurationService(ConfigurationService configurationService) { this.configurationService = configurationService; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java index d9c29286..18999fcc 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java @@ -18,9 +18,6 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import javax.activation.DataSource; -import javax.mail.util.ByteArrayDataSource; - import de.hybris.platform.cronjob.enums.CronJobResult; import de.hybris.platform.cronjob.enums.CronJobStatus; import de.hybris.platform.media.services.MimeService; @@ -33,12 +30,11 @@ import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; -import org.apache.commons.mail.EmailException; -import org.apache.commons.mail.HtmlEmail; +import org.apache.commons.mail2.core.EmailException; +import org.apache.commons.mail2.jakarta.HtmlEmail; import org.assertj.core.util.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; import tools.sapcx.commerce.reporting.model.ReportGenerationScheduleModel; @@ -49,6 +45,9 @@ import tools.sapcx.commerce.toolkit.email.HtmlEmailGenerator; import tools.sapcx.commerce.toolkit.email.HtmlEmailService; +import jakarta.activation.DataSource; +import jakarta.mail.util.ByteArrayDataSource; + public class ReportGeneratorJobPerformable extends AbstractJobPerformable { private static final Logger LOG = LoggerFactory.getLogger(ReportGeneratorJobPerformable.class); private static final int BYTES_TO_READ = 20; @@ -221,32 +220,26 @@ private String getMime(File file) { return "application/octet-stream"; } - @Required public void setGenericSearchService(GenericSearchService genericSearchService) { this.genericSearchService = genericSearchService; } - @Required public void setReportService(ReportService reportService) { this.reportService = reportService; } - @Required public void setHtmlEmailGenerator(HtmlEmailGenerator htmlEmailGenerator) { this.htmlEmailGenerator = htmlEmailGenerator; } - @Required public void setMimeService(MimeService mimeService) { this.mimeService = mimeService; } - @Required public void setHtmlEmailService(HtmlEmailService htmlEmailService) { this.htmlEmailService = htmlEmailService; } - @Required public void setQueryConfigurationConverter(Converter queryConfigurationConverter) { this.queryConfigurationConverter = queryConfigurationConverter; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java index 9d0787e4..5d967ebe 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java @@ -13,7 +13,6 @@ import org.assertj.core.util.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; import tools.sapcx.commerce.reporting.enums.ReportExportFormat; import tools.sapcx.commerce.reporting.generator.ReportGenerator; @@ -106,7 +105,6 @@ public List getConfiguredReportFormats() { return generators.keySet().stream().collect(Collectors.toList()); } - @Required public void setGenerators(Map generators) { this.generators = generators; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java index 104ec396..b1289ca5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java @@ -32,7 +32,6 @@ import org.assertj.core.util.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Required; /** * Implements the {@link GenericSearchService} interface performing searches based on the {@link DefaultFlexibleSearchService}. It supports @@ -193,22 +192,18 @@ private String getValue(ResultSet resultSet, GenericSearchResultHeader columnHea return null; } - @Required public void setUserService(UserService userService) { this.userService = userService; } - @Required public void setSessionService(SessionService sessionService) { this.sessionService = sessionService; } - @Required public void setCatalogVersionService(CatalogVersionService catalogVersionService) { this.catalogVersionService = catalogVersionService; } - @Required public void setFlexibleSearchService(DefaultFlexibleSearchService flexibleSearchService) { this.flexibleSearchService = flexibleSearchService; } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java index b1842c55..1161b241 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; import org.apache.commons.collections4.ListUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; public class GenericSearchResult { private List headers; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java index 667c58da..1b46e88c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java @@ -1,6 +1,6 @@ package tools.sapcx.commerce.reporting.search; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java index 54667496..6e5df25e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java @@ -5,7 +5,7 @@ import de.hybris.bootstrap.annotations.UnitTest; -import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration2.Configuration; import org.junit.Before; import org.junit.Test; @@ -66,7 +66,7 @@ public void whenNoConfigurationKeyIsProvided_verifyThatSetterIgnoresValue() { handler.set(configurationItem, "override"); Configuration configuration = configurationService.getConfiguration(); - assertThat(configuration.getKeys()).hasSize(2); + assertThat(configuration.getKeys()).toIterable().hasSize(2); } @Test diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java index 1cf0b372..facdd6d3 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java @@ -1,8 +1,8 @@ package tools.sapcx.commerce.reporting.report; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java index 13967cf4..d5347a83 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java @@ -2,8 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -40,7 +40,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.runners.MockitoJUnitRunner; +import org.mockito.junit.MockitoJUnitRunner; import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; import tools.sapcx.commerce.toolkit.testing.testdoubles.catalog.CatalogVersionServiceFake; From 52745932f4e38adcea71b2be355c58d897c44cb8 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 16 Dec 2025 14:40:52 +0100 Subject: [PATCH 06/28] include basic configuration for frontend development --- js-storefront/main/.editorconfig | 16 +++++++ js-storefront/main/.gitignore | 51 ++++++++++++++++++++++ js-storefront/main/.prettierignore | 1 + js-storefront/main/.prettierrc | 7 +++ js-storefront/main/.vscode/extensions.json | 12 +++++ js-storefront/main/.vscode/launch.json | 15 +++++++ js-storefront/main/.vscode/settings.json | 27 ++++++++++++ 7 files changed, 129 insertions(+) create mode 100644 js-storefront/main/.editorconfig create mode 100644 js-storefront/main/.gitignore create mode 100644 js-storefront/main/.prettierignore create mode 100644 js-storefront/main/.prettierrc create mode 100644 js-storefront/main/.vscode/extensions.json create mode 100644 js-storefront/main/.vscode/launch.json create mode 100644 js-storefront/main/.vscode/settings.json diff --git a/js-storefront/main/.editorconfig b/js-storefront/main/.editorconfig new file mode 100644 index 00000000..59d9a3a3 --- /dev/null +++ b/js-storefront/main/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/js-storefront/main/.gitignore b/js-storefront/main/.gitignore new file mode 100644 index 00000000..af5e14ba --- /dev/null +++ b/js-storefront/main/.gitignore @@ -0,0 +1,51 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.angular/cache +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db +cypress/videos +cypress/screenshots + +# Cypress +/cypress/downloads diff --git a/js-storefront/main/.prettierignore b/js-storefront/main/.prettierignore new file mode 100644 index 00000000..de056073 --- /dev/null +++ b/js-storefront/main/.prettierignore @@ -0,0 +1 @@ +**/*.md diff --git a/js-storefront/main/.prettierrc b/js-storefront/main/.prettierrc new file mode 100644 index 00000000..b67b1532 --- /dev/null +++ b/js-storefront/main/.prettierrc @@ -0,0 +1,7 @@ +{ + "printWidth": 120, + "singleQuote": true, + "useTabs": true, + "semi": true, + "bracketSameLine": true +} diff --git a/js-storefront/main/.vscode/extensions.json b/js-storefront/main/.vscode/extensions.json new file mode 100644 index 00000000..f96ffb75 --- /dev/null +++ b/js-storefront/main/.vscode/extensions.json @@ -0,0 +1,12 @@ +{ + "recommendations": [ + // Angular Language Service + "Angular.ng-template", + // Debugger for Chrome + "msjsdiag.debugger-for-chrome", + // The ng lint command uses TSLint under the hood. + "ms-vscode.vscode-typescript-tslint-plugin", + // Prettier - Code formatter + "esbenp.prettier-vscode" + ] +} diff --git a/js-storefront/main/.vscode/launch.json b/js-storefront/main/.vscode/launch.json new file mode 100644 index 00000000..6431f4e4 --- /dev/null +++ b/js-storefront/main/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "pwa-chrome", + "request": "launch", + "name": "Launch Chrome against localhost", + "url": "https://localhost:4200", + "webRoot": "${workspaceFolder}" + } + ] +} diff --git a/js-storefront/main/.vscode/settings.json b/js-storefront/main/.vscode/settings.json new file mode 100644 index 00000000..636a4c47 --- /dev/null +++ b/js-storefront/main/.vscode/settings.json @@ -0,0 +1,27 @@ +{ + // Prettify on save + "editor.formatOnSave": true, + // organize imports on save + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + }, + // Uses the project specific typescript version. + "typescript.tsdk": "node_modules/typescript/lib", + "prettier.configPath": ".prettierrc", + "editor.defaultFormatter": "esbenp.prettier-vscode", + + //SonarLint + "sonarlint.connectedMode.project": { + "projectKey": "mynetzsch-spartacus" + }, + "sonarlint.disableTelemetry": true, + "[xml]": { + "editor.defaultFormatter": "DotJoshJohnson.xml" + }, + "[scss]": { + "editor.defaultFormatter": "vscode.css-language-features" + }, + "[json]": { + "editor.defaultFormatter": "vscode.json-language-features" + } +} From 69bf9fbb5c960db2e443d38340a824d434a0a042 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Wed, 17 Dec 2025 17:23:38 +0100 Subject: [PATCH 07/28] update reporting to spring constructor injection --- .../resources/sapcxreporting-spring.xml | 28 +++++----- ...erationScheduleInitDefaultInterceptor.java | 17 +++--- ...ationPropertyAccessorAttributeHandler.java | 10 ++-- .../download/SelfDeletingFileInputStream.java | 2 +- .../download/SolrReportDownloadFacade.java | 4 +- .../ReportGeneratorJobPerformable.java | 52 ++++++++----------- .../report/DefaultReportService.java | 10 ++-- .../FlexibleSearchGenericSearchService.java | 32 +++++------- ...torCronJobInitDefaultInterceptorTests.java | 7 +-- .../DefaultGenericFlexibleSearchTests.java | 37 ++++++------- 10 files changed, 86 insertions(+), 113 deletions(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml index e3ec2b24..d8a6ac1b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml @@ -8,17 +8,17 @@ - - - - - - + + + + + + - + @@ -38,10 +38,10 @@ - - - - + + + + @@ -58,12 +58,12 @@ - + - - + + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java index 1d57828a..cbbd5fb3 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java @@ -15,8 +15,13 @@ public class ReportGenerationScheduleInitDefaultInterceptor implements InitDefaultsInterceptor { private static final Logger LOG = LoggerFactory.getLogger(ReportGenerationScheduleInitDefaultInterceptor.class); - private FlexibleSearchService flexibleSearchService; - private String jobCode; + private final FlexibleSearchService flexibleSearchService; + private final String jobCode; + + public ReportGenerationScheduleInitDefaultInterceptor(FlexibleSearchService flexibleSearchService, String jobCode) { + this.flexibleSearchService = flexibleSearchService; + this.jobCode = jobCode; + } @Override public void onInitDefaults(ReportGenerationScheduleModel cronJob, InterceptorContext interceptorContext) { @@ -37,12 +42,4 @@ private ServicelayerJobModel getServiceLayerJob() { return null; } } - - public void setFlexibleSearchService(FlexibleSearchService flexibleSearchService) { - this.flexibleSearchService = flexibleSearchService; - } - - public void setJobCode(String jobCode) { - this.jobCode = jobCode; - } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java index 2f048f98..eab3879a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java @@ -8,7 +8,11 @@ import tools.sapcx.commerce.reporting.model.ConfigurationPropertyAccessorModel; public class ValueFieldOfConfigurationPropertyAccessorAttributeHandler extends AbstractDynamicAttributeHandler { - private ConfigurationService configurationService; + private final ConfigurationService configurationService; + + public ValueFieldOfConfigurationPropertyAccessorAttributeHandler(ConfigurationService configurationService) { + this.configurationService = configurationService; + } @Override public String get(ConfigurationPropertyAccessorModel model) { @@ -23,8 +27,4 @@ public void set(ConfigurationPropertyAccessorModel model, String value) { configurationService.getConfiguration().setProperty(key, value); } } - - public void setConfigurationService(ConfigurationService configurationService) { - this.configurationService = configurationService; - } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java index f13b5762..74cf04e4 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java @@ -7,7 +7,7 @@ import org.apache.commons.io.FileUtils; -public class SelfDeletingFileInputStream extends FileInputStream { +class SelfDeletingFileInputStream extends FileInputStream { private final File file; public SelfDeletingFileInputStream(File file) throws FileNotFoundException { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java index 0b54d85d..be0f9ec7 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java @@ -12,8 +12,8 @@ import tools.sapcx.commerce.reporting.search.GenericSearchResult; public class SolrReportDownloadFacade implements ReportDownloadFacade { - private ReportService reportService; - private Map> reportSearchFacades; + private final ReportService reportService; + private final Map> reportSearchFacades; public SolrReportDownloadFacade(ReportService reportService, Map> reportSearchFacades) { this.reportService = reportService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java index 18999fcc..05ab2c3a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java @@ -52,13 +52,27 @@ public class ReportGeneratorJobPerformable extends AbstractJobPerformable queryConfigurationConverter; + private final GenericSearchService genericSearchService; + private final ReportService reportService; + private final HtmlEmailGenerator htmlEmailGenerator; + private final HtmlEmailService htmlEmailService; + private final MimeService mimeService; + private final Converter queryConfigurationConverter; + + public ReportGeneratorJobPerformable( + GenericSearchService genericSearchService, + ReportService reportService, + HtmlEmailGenerator htmlEmailGenerator, + HtmlEmailService htmlEmailService, + MimeService mimeService, + Converter queryConfigurationConverter) { + this.genericSearchService = genericSearchService; + this.reportService = reportService; + this.htmlEmailGenerator = htmlEmailGenerator; + this.htmlEmailService = htmlEmailService; + this.mimeService = mimeService; + this.queryConfigurationConverter = queryConfigurationConverter; + } @Override public PerformResult perform(ReportGenerationScheduleModel schedule) { @@ -219,28 +233,4 @@ private String getMime(File file) { } return "application/octet-stream"; } - - public void setGenericSearchService(GenericSearchService genericSearchService) { - this.genericSearchService = genericSearchService; - } - - public void setReportService(ReportService reportService) { - this.reportService = reportService; - } - - public void setHtmlEmailGenerator(HtmlEmailGenerator htmlEmailGenerator) { - this.htmlEmailGenerator = htmlEmailGenerator; - } - - public void setMimeService(MimeService mimeService) { - this.mimeService = mimeService; - } - - public void setHtmlEmailService(HtmlEmailService htmlEmailService) { - this.htmlEmailService = htmlEmailService; - } - - public void setQueryConfigurationConverter(Converter queryConfigurationConverter) { - this.queryConfigurationConverter = queryConfigurationConverter; - } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java index 5d967ebe..74574c84 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java @@ -24,7 +24,11 @@ public class DefaultReportService implements ReportService { private static final Logger LOG = LoggerFactory.getLogger(DefaultReportService.class); - private Map generators; + private final Map generators; + + public DefaultReportService(Map generators) { + this.generators = generators; + } @Override public Optional getReportFile(QueryFileConfigurationData report, GenericSearchResult result) { @@ -104,8 +108,4 @@ public File getReportDirectory() { public List getConfiguredReportFormats() { return generators.keySet().stream().collect(Collectors.toList()); } - - public void setGenerators(Map generators) { - this.generators = generators; - } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java index b1289ca5..6cb463ea 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java @@ -42,10 +42,18 @@ public class FlexibleSearchGenericSearchService implements GenericSearchService private static final Logger LOG = LoggerFactory.getLogger(FlexibleSearchGenericSearchService.class); private static final String LOG_MSG_TRANSLATION_INPUT = "FlexibleSearchQuery object for translation: [query: %s], [query parameters: %s], [user - %s], [count - -1], [locale - %s], [ctgVer - %s]"; - private UserService userService; - private SessionService sessionService; - private CatalogVersionService catalogVersionService; - private DefaultFlexibleSearchService flexibleSearchService; + private final UserService userService; + private final SessionService sessionService; + private final CatalogVersionService catalogVersionService; + private final DefaultFlexibleSearchService flexibleSearchService; + + public FlexibleSearchGenericSearchService(UserService userService, SessionService sessionService, CatalogVersionService catalogVersionService, + DefaultFlexibleSearchService flexibleSearchService) { + this.userService = userService; + this.sessionService = sessionService; + this.catalogVersionService = catalogVersionService; + this.flexibleSearchService = flexibleSearchService; + } @Override public GenericSearchResult search(String query, Map parameters) { @@ -192,22 +200,6 @@ private String getValue(ResultSet resultSet, GenericSearchResultHeader columnHea return null; } - public void setUserService(UserService userService) { - this.userService = userService; - } - - public void setSessionService(SessionService sessionService) { - this.sessionService = sessionService; - } - - public void setCatalogVersionService(CatalogVersionService catalogVersionService) { - this.catalogVersionService = catalogVersionService; - } - - public void setFlexibleSearchService(DefaultFlexibleSearchService flexibleSearchService) { - this.flexibleSearchService = flexibleSearchService; - } - private class Execution extends SessionExecutionBody { private String query; private Map parameters; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java index a006e29c..e1c1c8bd 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java @@ -23,16 +23,13 @@ public class ReportGeneratorCronJobInitDefaultInterceptorTests { @Before public void setUp() throws Exception { interceptorContext = InterceptorContextStub.interceptorContext().stub(); - - interceptor = new ReportGenerationScheduleInitDefaultInterceptor(); - interceptor.setJobCode("jobCode"); } @Test public void ifJobIsNotFound_cronJobWillRemainWithoutAJob() throws InterceptorException { ReportGenerationScheduleModel cronJob = InMemoryModelFactory.createTestableItemModel(ReportGenerationScheduleModel.class); - interceptor.setFlexibleSearchService(new FlexibleSearchServiceStub()); + interceptor = new ReportGenerationScheduleInitDefaultInterceptor(new FlexibleSearchServiceStub(), "jobCode"); interceptor.onInitDefaults(cronJob, interceptorContext); assertThat(cronJob.getJob()).isNull(); @@ -44,7 +41,7 @@ public void emptyCronJobWillBeFilledWithJob() throws InterceptorException { ServicelayerJobModel job = InMemoryModelFactory.createTestableItemModel(ServicelayerJobModel.class); job.setCode("jobCode"); - interceptor.setFlexibleSearchService(new FlexibleSearchServiceStub(job)); + interceptor = new ReportGenerationScheduleInitDefaultInterceptor(new FlexibleSearchServiceStub(job), "jobCode"); interceptor.onInitDefaults(cronJob, interceptorContext); assertThat(cronJob.getJob()).isEqualTo(job); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java index d5347a83..2596eabb 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java @@ -68,22 +68,7 @@ public class DefaultGenericFlexibleSearchTests { private GenericSearchResultHeader header2; private ResultSetMock resultSetFake; - private FlexibleSearchGenericSearchService genericFlexibleSearch = new FlexibleSearchGenericSearchService() { - @Override - protected boolean isHanaUsed() { - return false; - } - - @Override - protected void fillStatement(PreparedStatement statement, List values) throws IllegalArgumentException, SQLException { - return; - } - - @Override - HybrisDataSource getDatasource() { - return tenant.getDataSource(); - } - }; + private FlexibleSearchGenericSearchService genericFlexibleSearch; @Before public void setup() throws SQLException { @@ -101,10 +86,22 @@ public void setup() throws SQLException { ((CatalogVersionServiceFake) catalogVersionService) .setReadableCatalogVersions(Collections.singletonList(InMemoryModelFactory.createTestableItemModel(CatalogVersionModel.class))); - genericFlexibleSearch.setUserService(userService); - genericFlexibleSearch.setSessionService(sessionService); - genericFlexibleSearch.setCatalogVersionService(catalogVersionService); - genericFlexibleSearch.setFlexibleSearchService(flexibleSearchService); + genericFlexibleSearch = new FlexibleSearchGenericSearchService(userService, sessionService, catalogVersionService, flexibleSearchService) { + @Override + protected boolean isHanaUsed() { + return false; + } + + @Override + protected void fillStatement(PreparedStatement statement, List values) throws IllegalArgumentException, SQLException { + return; + } + + @Override + HybrisDataSource getDatasource() { + return tenant.getDataSource(); + } + }; header1 = new GenericSearchResultHeader(1, "col1", "Column 1"); header2 = new GenericSearchResultHeader(2, "col2", "Column 2"); From 278523656d919344b3f59eb74e3867815c4cdcd6 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Thu, 18 Dec 2025 02:51:19 +0100 Subject: [PATCH 08/28] upgrade tomcat configuration to newest tomcat version --- core-customize/hybris/config/tomcat/README.txt | 10 ---------- .../config/tomcat/conf/server-minimal.xml | 16 +++++++--------- .../hybris/config/tomcat/conf/server.xml | 18 +++++++----------- .../hybris/config/tomcat/conf/web.xml | 6 +++--- 4 files changed, 17 insertions(+), 33 deletions(-) delete mode 100644 core-customize/hybris/config/tomcat/README.txt diff --git a/core-customize/hybris/config/tomcat/README.txt b/core-customize/hybris/config/tomcat/README.txt deleted file mode 100644 index 29f11e5d..00000000 --- a/core-customize/hybris/config/tomcat/README.txt +++ /dev/null @@ -1,10 +0,0 @@ - -files from this directory will be copied to the embedded tomcat directory. -this allows you to overwrite the tomcat configuration or add keystores and other additional files. - -variables (e.g. ${HYBRIS_BIN_DIR} or ${db.url}) in all configuration files (.properties/.xml/.sh/.bat) -will get replaced during the copy process. - - -->implementation note: see the appserver_customdeployment macro in platform/resources/ant/util.xml for -details. \ No newline at end of file diff --git a/core-customize/hybris/config/tomcat/conf/server-minimal.xml b/core-customize/hybris/config/tomcat/conf/server-minimal.xml index 9704e54a..cb4011a8 100644 --- a/core-customize/hybris/config/tomcat/conf/server-minimal.xml +++ b/core-customize/hybris/config/tomcat/conf/server-minimal.xml @@ -1,8 +1,6 @@ - - @@ -73,13 +71,13 @@ URIEncoding="UTF-8" SSLEnabled="true" scheme="https" - secure="true" - clientAuth="false" - sslProtocol = "TLS" - keyAlias="${tomcat.ssl.keystore.alias}" - keystoreFile="${tomcat.ssl.keystore.path}" - keystorePass="${tomcat.ssl.keystore.password}" - /> + secure="true"> + + + + - @@ -76,13 +72,13 @@ URIEncoding="UTF-8" SSLEnabled="true" scheme="https" - secure="true" - clientAuth="false" - sslProtocol = "TLS" - keyAlias="${tomcat.ssl.keystore.alias}" - keystoreFile="${tomcat.ssl.keystore.path}" - keystorePass="${tomcat.ssl.keystore.password}" - /> + secure="true"> + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml new file mode 100644 index 00000000..c652e28d --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml new file mode 100644 index 00000000..7bec4c12 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9bcfd4b3c2e1a335d09c1a0fb1944efb4ab3cdc3 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties new file mode 100644 index 00000000..0d8c8f34 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Server startet... +cxdevproxy.startup.page.message=SAP Commerce ist am Starten. Bitte warten, diese Seite aktualisiert sich automatisch. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties new file mode 100644 index 00000000..5256c76e --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Starting up... +cxdevproxy.startup.page.message=SAP Commerce is currently starting. Please wait, this page will refresh automatically. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties new file mode 100644 index 00000000..a812999e --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Iniciando... +cxdevproxy.startup.page.message=SAP Commerce se está iniciando. Por favor, espere, esta página se actualizará automáticamente. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties new file mode 100644 index 00000000..3e6619b8 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Démarrage en cours... +cxdevproxy.startup.page.message=SAP Commerce est en cours de démarrage. Veuillez patienter, cette page s'actualisera automatiquement. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties new file mode 100644 index 00000000..6501850d --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Avvio in corso... +cxdevproxy.startup.page.message=SAP Commerce è in fase di avvio. Attendere, questa pagina si aggiornerà automaticamente. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties new file mode 100644 index 00000000..11be4837 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=???... +cxdevproxy.startup.page.message=??SAP Commerce???????????????????????????????????? \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties new file mode 100644 index 00000000..e8ab29c2 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Starter opp... +cxdevproxy.startup.page.message=SAP Commerce starter for øyeblikket. Vennligst vent, denne siden vil oppdateres automatisk. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties new file mode 100644 index 00000000..cda88528 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Iniciando... +cxdevproxy.startup.page.message=O SAP Commerce está iniciando. Por favor, aguarde, esta página será atualizada automaticamente. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties new file mode 100644 index 00000000..abedb311 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=??????... +cxdevproxy.startup.page.message=SAP Commerce ? ?????? ?????? ???????????. ??????????, ?????????, ??? ???????? ????????? ?????????????. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties new file mode 100644 index 00000000..ab703c06 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=Startar... +cxdevproxy.startup.page.message=SAP Commerce startar för närvarande. Vänligen vänta, den här sidan uppdateras automatiskt. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties new file mode 100644 index 00000000..cb7bacd7 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties @@ -0,0 +1,2 @@ +cxdevproxy.startup.page.title=????... +cxdevproxy.startup.page.message=SAP Commerce ?????????????????? \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java new file mode 100644 index 00000000..bc2a1385 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java @@ -0,0 +1,25 @@ +package me.cxdev.commerce.proxy.condition; + +import java.util.List; + +import io.undertow.server.HttpServerExchange; + +/** + * A logical AND condition that evaluates to true only if all + * of its underlying conditions match. + */ +public class AndCondition implements ExchangeCondition { + private List conditions; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (conditions == null || conditions.isEmpty()) { + return false; + } + return conditions.stream().allMatch(c -> c.matches(exchange)); + } + + public void setConditions(List conditions) { + this.conditions = conditions; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java new file mode 100644 index 00000000..6afe8a63 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java @@ -0,0 +1,17 @@ +package me.cxdev.commerce.proxy.condition; + +import io.undertow.server.HttpServerExchange; + +/** + * Represents a condition that evaluates an incoming HTTP request. + * Used to determine if a specific proxy handler should be executed. + */ +public interface ExchangeCondition { + /** + * Evaluates the condition against the current HTTP exchange. + * + * @param exchange The current Undertow HTTP server exchange. + * @return {@code true} if the condition is met, {@code false} otherwise. + */ + boolean matches(HttpServerExchange exchange); +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java new file mode 100644 index 00000000..9616a526 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java @@ -0,0 +1,25 @@ +package me.cxdev.commerce.proxy.condition; + +import io.undertow.server.HttpServerExchange; +import io.undertow.util.HttpString; + +import org.apache.commons.lang3.StringUtils; + +/** + * Condition that matches if the request contains a specific HTTP header. + */ +public class HeaderExistsCondition implements ExchangeCondition { + private String headerName; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (StringUtils.isBlank(headerName)) { + return false; + } + return exchange.getRequestHeaders().contains(new HttpString(headerName)); + } + + public void setHeaderName(String headerName) { + this.headerName = headerName; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java new file mode 100644 index 00000000..8ac8c468 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java @@ -0,0 +1,25 @@ +package me.cxdev.commerce.proxy.condition; + +import io.undertow.server.HttpServerExchange; + +import org.apache.commons.lang3.StringUtils; + +/** + * Condition that matches if the HTTP request method (e.g., GET, POST) + * equals the configured method. + */ +public class HttpMethodCondition implements ExchangeCondition { + private String method; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (StringUtils.isBlank(method)) { + return false; + } + return exchange.getRequestMethod().toString().equalsIgnoreCase(method); + } + + public void setMethod(String method) { + this.method = method; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java new file mode 100644 index 00000000..6f8e2a8c --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java @@ -0,0 +1,22 @@ +package me.cxdev.commerce.proxy.condition; + +import io.undertow.server.HttpServerExchange; + +/** + * A logical NOT condition that negates the result of a single underlying condition. + */ +public class NotCondition implements ExchangeCondition { + private ExchangeCondition condition; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (condition == null) { + return false; // Fail-safe if not properly configured + } + return !condition.matches(exchange); + } + + public void setCondition(ExchangeCondition condition) { + this.condition = condition; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java new file mode 100644 index 00000000..d38e70ec --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java @@ -0,0 +1,25 @@ +package me.cxdev.commerce.proxy.condition; + +import java.util.List; + +import io.undertow.server.HttpServerExchange; + +/** + * A logical OR condition that evaluates to true if at least one + * of its underlying conditions matches. + */ +public class OrCondition implements ExchangeCondition { + private List conditions; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (conditions == null || conditions.isEmpty()) { + return false; + } + return conditions.stream().anyMatch(c -> c.matches(exchange)); + } + + public void setConditions(List conditions) { + this.conditions = conditions; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java new file mode 100644 index 00000000..fa27c41b --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java @@ -0,0 +1,24 @@ +package me.cxdev.commerce.proxy.condition; + +import io.undertow.server.HttpServerExchange; + +import org.apache.commons.lang3.StringUtils; + +/** + * Condition that matches if the request path starts with a specific prefix. + */ +public class PathStartsWithCondition implements ExchangeCondition { + private String prefix; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (StringUtils.isBlank(prefix)) { + return false; + } + return exchange.getRequestPath().startsWith(prefix); + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java new file mode 100644 index 00000000..e7c923a0 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java @@ -0,0 +1,24 @@ +package me.cxdev.commerce.proxy.condition; + +import io.undertow.server.HttpServerExchange; + +import org.apache.commons.lang3.StringUtils; + +/** + * Condition that matches if the request URL contains a specific query parameter. + */ +public class QueryParameterExistsCondition implements ExchangeCondition { + private String paramName; + + @Override + public boolean matches(HttpServerExchange exchange) { + if (StringUtils.isBlank(paramName)) { + return false; + } + return exchange.getQueryParameters().containsKey(paramName); + } + + public void setParamName(String paramName) { + this.paramName = paramName; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java new file mode 100644 index 00000000..a8fce5b5 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java @@ -0,0 +1,14 @@ +package me.cxdev.commerce.proxy.constants; + +/** + * Global class for all CXDEV Proxy constants. + */ +public final class CxDevProxyConstants extends GeneratedCxDevProxyConstants { + public static final String EXTENSIONNAME = "cxdevproxy"; + + private CxDevProxyConstants() { + // empty to avoid instantiating this constant class + } + + // implement here constants used by this extension +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java new file mode 100644 index 00000000..240ab0fe --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java @@ -0,0 +1,65 @@ +package me.cxdev.commerce.proxy.handler; + +import java.util.List; + +import io.undertow.server.HttpServerExchange; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import me.cxdev.commerce.proxy.condition.ExchangeCondition; +import me.cxdev.commerce.proxy.livecycle.ProxyHttpServerExchangeHandler; + +/** + * A composite handler that delegates execution to a list of underlying handlers + * only if a configured set of conditions is met. + *

+ * By default, ALL conditions must evaluate to {@code true} (AND logic). + * This can be changed to OR logic by setting {@code requireAllConditions} to {@code false}. + *

+ */ +public class ConditionalDelegateHandler implements ProxyHttpServerExchangeHandler { + private static final Logger LOG = LoggerFactory.getLogger(ConditionalDelegateHandler.class); + + private List conditions; + private List delegates; + + // If true, acts as AND. If false, acts as OR. + private boolean requireAllConditions = true; + + /** + * Evaluates the configured conditions. If the criteria are met, the request + * is passed to all configured delegate handlers. + * + * @param exchange The current HTTP server exchange. + */ + @Override + public void apply(HttpServerExchange exchange) { + if (conditions == null || conditions.isEmpty() || delegates == null || delegates.isEmpty()) { + return; + } + + boolean match = requireAllConditions + ? conditions.stream().allMatch(c -> c.matches(exchange)) + : conditions.stream().anyMatch(c -> c.matches(exchange)); + + if (match) { + LOG.debug("Conditions met. Executing {} delegate handler(s) for {}", delegates.size(), exchange.getRequestPath()); + for (ProxyHttpServerExchangeHandler delegate : delegates) { + delegate.apply(exchange); + } + } + } + + public void setConditions(List conditions) { + this.conditions = conditions; + } + + public void setDelegates(List delegates) { + this.delegates = delegates; + } + + public void setRequireAllConditions(boolean requireAllConditions) { + this.requireAllConditions = requireAllConditions; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java new file mode 100644 index 00000000..155ee5ed --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java @@ -0,0 +1,105 @@ +package me.cxdev.commerce.proxy.handler; + +import java.net.InetSocketAddress; + +import io.undertow.server.HttpServerExchange; +import io.undertow.util.Headers; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import me.cxdev.commerce.proxy.livecycle.ProxyHttpServerExchangeHandler; + +/** + * Interceptor that ensures the {@code X-Forwarded-*} headers are correctly populated + * on the incoming HTTP exchange before it is routed to the target system. + *

+ * If the headers (Proto, Host, Port) are already provided by an upstream proxy or load balancer, + * they are preserved. Additionally, the original client's IP address is appended to the + * {@code X-Forwarded-For} header. This is a crucial requirement for SAP Commerce (Tomcat) + * to correctly resolve absolute URLs, avoid redirect loops, and determine the security context. + *

+ */ +public class ForwardedHeadersHandler implements ProxyHttpServerExchangeHandler { + private static final Logger LOG = LoggerFactory.getLogger(ForwardedHeadersHandler.class); + + private String serverProtocol; + private String serverHostname; + private int serverPort; + + /** + * Injects the required forwarded headers into the current HTTP exchange. + * Evaluates existing headers and falls back to server configuration or + * the incoming {@code Host} header if necessary. + * + * @param exchange The current HTTP server exchange being processed. + */ + @Override + public void apply(HttpServerExchange exchange) { + // 1. Resolve and set X-Forwarded-Proto + String existingProto = exchange.getRequestHeaders().getFirst(Headers.X_FORWARDED_PROTO); + if (StringUtils.isBlank(existingProto)) { + exchange.getRequestHeaders().put(Headers.X_FORWARDED_PROTO, this.serverProtocol); + } + + // 2. Resolve and set X-Forwarded-Host & X-Forwarded-Port + String existingHost = exchange.getRequestHeaders().getFirst(Headers.X_FORWARDED_HOST); + String existingPort = exchange.getRequestHeaders().getFirst(Headers.X_FORWARDED_PORT); + + if (StringUtils.isBlank(existingHost) || StringUtils.isBlank(existingPort)) { + String hostHeader = exchange.getRequestHeaders().getFirst(Headers.HOST); + String forwardedHost = this.serverHostname; + int forwardedPort = this.serverPort; + + if (StringUtils.isNotBlank(hostHeader)) { + if (hostHeader.contains(":")) { + String[] parts = hostHeader.split(":"); + forwardedHost = parts[0]; + try { + forwardedPort = Integer.parseInt(parts[1]); + } catch (NumberFormatException e) { + LOG.warn("Could not parse port from Host header: '{}'. Falling back to protocol default.", hostHeader); + forwardedPort = "https".equalsIgnoreCase(this.serverProtocol) ? 443 : 80; + } + } else { + forwardedHost = hostHeader; + forwardedPort = "https".equalsIgnoreCase(this.serverProtocol) ? 443 : 80; + } + } + + if (StringUtils.isBlank(existingHost)) { + exchange.getRequestHeaders().put(Headers.X_FORWARDED_HOST, forwardedHost); + } + if (StringUtils.isBlank(existingPort)) { + exchange.getRequestHeaders().put(Headers.X_FORWARDED_PORT, String.valueOf(forwardedPort)); + } + } + + // 3. Append client IP to X-Forwarded-For + InetSocketAddress sourceAddress = exchange.getSourceAddress(); + if (sourceAddress != null && sourceAddress.getAddress() != null) { + String clientIp = sourceAddress.getAddress().getHostAddress(); + String existingFor = exchange.getRequestHeaders().getFirst(Headers.X_FORWARDED_FOR); + + if (StringUtils.isNotBlank(existingFor)) { + // Append to the standard HTTP comma-separated list if multiple proxies are involved + exchange.getRequestHeaders().put(Headers.X_FORWARDED_FOR, existingFor + ", " + clientIp); + } else { + exchange.getRequestHeaders().put(Headers.X_FORWARDED_FOR, clientIp); + } + } + } + + public void setServerProtocol(String serverProtocol) { + this.serverProtocol = serverProtocol; + } + + public void setServerHostname(String serverHostname) { + this.serverHostname = serverHostname; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java new file mode 100644 index 00000000..3e173288 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java @@ -0,0 +1,128 @@ +package me.cxdev.commerce.proxy.handler; + +import java.util.Locale; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import de.hybris.platform.core.MasterTenant; +import de.hybris.platform.core.Registry; +import de.hybris.platform.core.Tenant; +import de.hybris.platform.core.TenantListener; + +import io.undertow.server.HttpServerExchange; +import io.undertow.util.Headers; +import io.undertow.util.StatusCodes; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; + +import me.cxdev.commerce.proxy.livecycle.ProxyLocalRouteHandler; + +/** + * Intercepts incoming requests while the SAP Commerce server is still in its startup phase. + *

+ * This handler acts as a {@link TenantListener} to monitor the lifecycle of the 'master' tenant. + * As long as the master tenant is not fully started, this handler intercepts all traffic and + * serves an auto-refreshing "503 Service Unavailable" maintenance page using native Java ResourceBundles. + *

+ */ +public class StartupPageHandler implements ProxyLocalRouteHandler, TenantListener, InitializingBean { + + private static final Logger LOG = LoggerFactory.getLogger(StartupPageHandler.class); + private static final String BUNDLE_BASE_NAME = "localization/cxdevproxy-locales"; + + // volatile ensures thread visibility between Hybris startup threads and Undertow worker threads + private volatile boolean masterTenantReady = false; + + @Override + public void afterPropertiesSet() { + Registry.registerTenantListener(this); + } + + @Override + public void afterTenantStartUp(Tenant tenant) { + if (MasterTenant.getInstance().equals(tenant)) { + LOG.info("Master tenant has started. Proxy is now routing traffic."); + this.masterTenantReady = true; + } + } + + @Override + public void beforeTenantShutDown(Tenant tenant) { + if (MasterTenant.getInstance().equals(tenant)) { + LOG.info("Master tenant is shutting down. Proxy will block traffic."); + this.masterTenantReady = false; + } + } + + @Override + public void afterSetActivateSession(Tenant tenant) { + } + + @Override + public void beforeUnsetActivateSession(Tenant tenant) { + } + + @Override + public boolean matches(HttpServerExchange exchange) { + return !masterTenantReady; + } + + @Override + public void handleRequest(HttpServerExchange exchange) { + exchange.setStatusCode(StatusCodes.SERVICE_UNAVAILABLE); + exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/html; charset=UTF-8"); + + Locale requestLocale = determineLocale(exchange); + String title = "Starting up..."; + String message = "SAP Commerce is currently starting. Please wait..."; + + try { + // Loads the message bundle natively from the classpath, bypassing the Hybris DB + ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_BASE_NAME, requestLocale); + title = bundle.getString("cxdevproxy.startup.page.title"); + message = bundle.getString("cxdevproxy.startup.page.message"); + } catch (MissingResourceException e) { + LOG.warn("Could not find message bundle '{}' or keys for locale '{}'. Falling back to default text.", BUNDLE_BASE_NAME, requestLocale); + } + + String html = String.format( + "" + + "" + + "" + + "" + + "%s" + + "" + + "" + + "" + + "" + + "

%s

" + + "

%s

" + + "
" + + "" + + "", + title, title, message); + + exchange.getResponseSender().send(html); + } + + /** + * Determines the preferred locale from the browser's Accept-Language header. + * Supports English and German. Defaults to English. + */ + private Locale determineLocale(HttpServerExchange exchange) { + String acceptLanguage = exchange.getRequestHeaders().getFirst(Headers.ACCEPT_LANGUAGE); + if (StringUtils.isNotBlank(acceptLanguage)) { + return Locale.forLanguageTag(acceptLanguage.toLowerCase()); + } + return Locale.ENGLISH; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java new file mode 100644 index 00000000..caa9c7ab --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java @@ -0,0 +1,74 @@ +package me.cxdev.commerce.proxy.handler; + +import de.hybris.platform.core.Registry; + +import io.undertow.server.HttpServerExchange; +import io.undertow.server.handlers.resource.ClassPathResourceManager; +import io.undertow.server.handlers.resource.Resource; +import io.undertow.server.handlers.resource.ResourceHandler; +import io.undertow.server.handlers.resource.ResourceManager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import me.cxdev.commerce.proxy.livecycle.ProxyLocalRouteHandler; + +/** + * A local route handler that serves static files directly from the extension's classpath. + *

+ * It looks for files within the {@code resources/static-content} directory. If a requested + * file exists locally, this handler intercepts the request and bypasses the standard + * frontend or backend proxy routing. + *

+ */ +public class StaticContentHandler implements ProxyLocalRouteHandler { + private static final Logger LOG = LoggerFactory.getLogger(StaticContentHandler.class); + private static final String STATIC_FOLDER = "cxdevproxy/static-content"; + + private final ResourceManager resourceManager; + private final ResourceHandler resourceHandler; + + /** + * Initializes the static content handler. + * Sets up Undertow's native resource management using the current classloader. + */ + public StaticContentHandler() { + // Uses the extension's classloader to resolve files from the resources folder + this.resourceManager = new ClassPathResourceManager(Registry.class.getClassLoader(), STATIC_FOLDER); + + // Undertow's native handler for serving static files securely and efficiently + this.resourceHandler = new ResourceHandler(this.resourceManager); + } + + /** + * Evaluates whether the incoming request targets an existing static file. + * + * @param exchange The current HTTP server exchange. + * @return {@code true} if the requested path matches an existing file in the static folder, {@code false} otherwise. + */ + @Override + public boolean matches(HttpServerExchange exchange) { + try { + String path = exchange.getRequestPath(); + Resource resource = resourceManager.getResource(path); + + // Match only if the resource actually exists and is a file (not a directory) + return resource != null && !resource.isDirectory(); + } catch (Exception e) { + LOG.error("Error checking for static resource: {}", exchange.getRequestPath(), e); + return false; + } + } + + /** + * Serves the matched static file to the client. + * + * @param exchange The current HTTP server exchange. + * @throws Exception If an error occurs while reading or writing the file. + */ + @Override + public void handleRequest(HttpServerExchange exchange) throws Exception { + // Delegate the actual file serving (MIME types, caching headers, etc.) to Undertow + resourceHandler.handleRequest(exchange); + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java new file mode 100644 index 00000000..b5303135 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java @@ -0,0 +1,15 @@ +package me.cxdev.commerce.proxy.livecycle; + +import io.undertow.server.HttpServerExchange; + +/** + * Interface for applying custom rules and headers to an Undertow HttpServerExchange + * before it is proxied to the target server. + */ +public interface ProxyHttpServerExchangeHandler { + /** + * Applies rules or modifications to the exchange. + * * @param exchange the current HTTP server exchange + */ + void apply(HttpServerExchange exchange); +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java new file mode 100644 index 00000000..95b33872 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java @@ -0,0 +1,26 @@ +package me.cxdev.commerce.proxy.livecycle; + +import io.undertow.server.HttpServerExchange; + +/** + * Interface for handling requests directly within the Undertow proxy, + * bypassing the standard routing to the frontend or backend. + * Useful for serving local HTML pages or mocking endpoints. + */ +public interface ProxyLocalRouteHandler { + /** + * Determines if this handler is responsible for the current request. + * + * @param exchange the current HTTP server exchange + * @return true if this handler should process the request, false otherwise + */ + boolean matches(HttpServerExchange exchange); + + /** + * Processes the request and sends a direct response to the client. + * + * @param exchange the current HTTP server exchange + * @throws Exception if an error occurs during processing + */ + void handleRequest(HttpServerExchange exchange) throws Exception; +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java new file mode 100644 index 00000000..8f2d7a84 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java @@ -0,0 +1,397 @@ +package me.cxdev.commerce.proxy.livecycle; + +import static java.util.function.Predicate.isEqual; +import static java.util.function.Predicate.not; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URI; +import java.security.KeyStore; +import java.util.Arrays; +import java.util.List; + +import javax.net.ssl.*; + +import de.hybris.bootstrap.config.ExtensionInfo; +import de.hybris.bootstrap.config.WebExtensionModule; +import de.hybris.platform.core.MasterTenant; +import de.hybris.platform.core.Registry; +import de.hybris.platform.util.Utilities; + +import io.undertow.Undertow; +import io.undertow.protocols.ssl.UndertowXnioSsl; +import io.undertow.server.HttpHandler; +import io.undertow.server.HttpServerExchange; +import io.undertow.server.handlers.proxy.LoadBalancingProxyClient; +import io.undertow.server.handlers.proxy.ProxyHandler; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.SmartLifecycle; +import org.xnio.OptionMap; +import org.xnio.Xnio; +import org.xnio.ssl.XnioSsl; + +import me.cxdev.commerce.proxy.trust.AcceptAllTrustManager; + +/** + * Manages the lifecycle of an embedded Undertow reverse proxy server for SAP Commerce. + *

+ * This manager is responsible for starting and stopping the Undertow server, configuring + * inbound SSL connections, and setting up the routing rules to dispatch incoming requests + * either to a local frontend (e.g., an Angular Dev Server) or the SAP Commerce backend (Tomcat). + * It also supports intercepting requests via custom local route handlers. + *

+ */ +public class UndertowProxyManager implements SmartLifecycle { + private static final Logger LOG = LoggerFactory.getLogger(UndertowProxyManager.class); + + // Spring Injected Properties + private boolean enabled; + + // SSL Properties + private boolean sslEnabled; + private String sslKeystorePath; + private String sslKeystorePassword; + private String sslKeystoreAlias; + + // Server Binding Properties + private String serverBindAddress; + private String serverHostname; + private String serverProtocol; + private int serverPort; + + // Proxy Target Properties + private String frontendProtocol; + private String frontendHostname; + private int frontendPort; + private String backendProtocol; + private String backendHostname; + private int backendPort; + private String backendContexts; + + // List of Local Routes + private List localRouteHandlers; + + // Proxy Handlers + private List frontendHandlers; + private List backendHandlers; + + private Undertow server; + private boolean running = false; + + /** + * Starts the embedded Undertow proxy server. + * Initializes proxy clients for frontend and backend, applies custom handler rules, + * and binds the server to the configured host and port. + */ + @Override + public void start() { + if (!enabled) { + LOG.info("cxdevproxy is disabled (cxdevproxy.enabled=false). Undertow proxy will not be started."); + return; + } + + if (!sslEnabled) { + this.serverProtocol = "http"; + LOG.info("SSL is disabled. Forcing server protocol to 'http'."); + } + + LOG.info("Starting embedded Undertow proxy (Protocol: {})...", this.serverProtocol); + + try { + String frontendUrl = frontendProtocol + "://" + frontendHostname + ":" + frontendPort; + LoadBalancingProxyClient frontendClient = new LoadBalancingProxyClient() + .addHost(new URI(frontendUrl), createTrustAllXnioSsl(frontendHostname)) + .setConnectionsPerThread(20); + + String backendUrl = backendProtocol + "://" + backendHostname + ":" + backendPort; + LoadBalancingProxyClient backendClient = new LoadBalancingProxyClient() + .addHost(new URI(backendUrl), createTrustAllXnioSsl(backendHostname)) + .setConnectionsPerThread(20); + + HttpHandler baseFrontendHandler = ProxyHandler.builder().setProxyClient(frontendClient).build(); + HttpHandler baseBackendHandler = ProxyHandler.builder().setProxyClient(backendClient).setMaxRequestTime(30000).build(); + + HttpHandler finalFrontendHandler = applyFrontendRules(baseFrontendHandler); + HttpHandler finalBackendHandler = applyBackendRules(baseBackendHandler); + + List activeBackendContexts = determineBackendContexts(); + LOG.info("Active backend routing contexts: {}", activeBackendContexts); + + HttpHandler routingHandler = exchange -> { + // 1. Check if a local route handler wants to intercept the request + if (localRouteHandlers != null) { + for (ProxyLocalRouteHandler localHandler : localRouteHandlers) { + if (localHandler.matches(exchange)) { + LOG.debug("Serving request {} {} with local handler {}.", exchange.getRequestMethod(), exchange.getRequestURI(), + localHandler.getClass().getSimpleName()); + localHandler.handleRequest(exchange); + return; + } + } + } + + // 2. Regular proxy routing if no local handler matched + routeRequest(exchange, activeBackendContexts, finalBackendHandler, finalFrontendHandler); + }; + + Undertow.Builder serverBuilder = Undertow.builder().setHandler(routingHandler); + + if (sslEnabled) { + SSLContext serverSslContext = createServerSSLContext(); + if (serverSslContext == null) { + return; + } + serverBuilder.addHttpsListener(serverPort, serverBindAddress, serverSslContext); + LOG.info("Undertow proxy listening securely on {}://{}:{} (HTTPS).", serverProtocol, serverBindAddress, serverPort); + } else { + serverBuilder.addHttpListener(serverPort, serverBindAddress); + LOG.info("Undertow proxy listening on {}://{}:{} (HTTP).", serverProtocol, serverBindAddress, serverPort); + } + + server = serverBuilder.build(); + server.start(); + running = true; + + } catch (Exception e) { + LOG.error("Error starting Undertow proxy", e); + } + } + + /** + * Determines the URL context paths that should be routed to the SAP Commerce backend. + * Uses explicitly configured contexts if provided, otherwise performs auto-discovery + * by scanning all installed web extensions for their web roots. + * + * @return A list of backend context paths (e.g., ["/backoffice", "/occ"]). + */ + private List determineBackendContexts() { + if (StringUtils.isNotBlank(this.backendContexts)) { + return Arrays.stream(this.backendContexts.split(",")) + .map(String::trim) + .filter(StringUtils::isNotBlank) + .toList(); + } + + LOG.info("No manual backend contexts configured. Starting auto-discovery via Utilities.getWebroot()..."); + + return Utilities.getInstalledExtensionNames(MasterTenant.getInstance()).stream() + .map(Utilities::getExtensionInfo) + .filter(ExtensionInfo::isWebExtension) + .map(ExtensionInfo::getWebModule) + .map(WebExtensionModule::getWebRoot) + .filter(not(isEqual("/"))) + .distinct() + .sorted() + .toList(); + } + + /** + * Routes the incoming HTTP request to either the backend or the frontend proxy handler + * based on the request path and the determined backend contexts. + * + * @param exchange The current HTTP server exchange. + * @param backendContexts The list of context paths mapped to the backend. + * @param backendHandler The handler responsible for backend routing. + * @param frontendHandler The handler responsible for frontend routing. + * @throws Exception If an error occurs during routing. + */ + private void routeRequest(HttpServerExchange exchange, List backendContexts, HttpHandler backendHandler, HttpHandler frontendHandler) throws Exception { + String path = exchange.getRequestPath(); + boolean isBackendRequest = backendContexts.stream().anyMatch(path::startsWith); + + if (isBackendRequest) { + LOG.debug("Serving request {} {} with backend handler.", exchange.getRequestMethod(), exchange.getRequestURI()); + backendHandler.handleRequest(exchange); + } else { + LOG.debug("Serving request {} {} with frontend handler.", exchange.getRequestMethod(), exchange.getRequestURI()); + frontendHandler.handleRequest(exchange); + } + } + + /** + * Wraps the base frontend handler with any configured custom interceptors/handlers. + * + * @param next The base proxy handler. + * @return A chained HTTP handler applying all configured frontend rules. + */ + protected HttpHandler applyFrontendRules(HttpHandler next) { + return exchange -> { + if (frontendHandlers != null) { + frontendHandlers.forEach(handler -> handler.apply(exchange)); + } + next.handleRequest(exchange); + }; + } + + /** + * Wraps the base backend handler with any configured custom interceptors/handlers. + * + * @param next The base proxy handler. + * @return A chained HTTP handler applying all configured backend rules. + */ + protected HttpHandler applyBackendRules(HttpHandler next) { + return exchange -> { + if (backendHandlers != null) { + backendHandlers.forEach(handler -> handler.apply(exchange)); + } + next.handleRequest(exchange); + }; + } + + /** + * Creates the SSL context used by the Undertow server to accept incoming HTTPS connections. + * Loads the keystore configured in the properties. + * + * @return The configured SSLContext, or null if configuration is invalid. + * @throws Exception If keystore loading or context initialization fails. + */ + private SSLContext createServerSSLContext() throws Exception { + if (StringUtils.isBlank(sslKeystorePath)) { + LOG.error("Keystore path is empty or not set. Proxy startup aborted."); + return null; + } + + File keystoreFile = new File(sslKeystorePath.trim()); + + if (!keystoreFile.exists() || !keystoreFile.isFile()) { + LOG.error("Keystore not found at: {}. Proxy server will not be started.", keystoreFile.getAbsolutePath()); + return null; + } + + KeyStore keyStore = KeyStore.getInstance("PKCS12"); + try (InputStream is = new FileInputStream(keystoreFile)) { + keyStore.load(is, sslKeystorePassword != null ? sslKeystorePassword.toCharArray() : new char[0]); + } + + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(keyStore, sslKeystorePassword != null ? sslKeystorePassword.toCharArray() : new char[0]); + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(kmf.getKeyManagers(), null, null); + return sslContext; + } + + /** + * Creates a permissive SSL client context for outbound proxy connections to target systems. + * Disables strict certificate validation to allow proxying to local self-signed endpoints. + * + * @param serverNameIndicator The SNI hostname to use, if any. + * @return The configured XnioSsl instance. + * @throws Exception If SSL context initialization fails. + */ + private XnioSsl createTrustAllXnioSsl(String serverNameIndicator) throws Exception { + TrustManager[] trustAllCerts = new TrustManager[] { + new AcceptAllTrustManager() + }; + + SSLContext sc = SSLContext.getInstance("TLS"); + sc.init(null, trustAllCerts, new java.security.SecureRandom()); + + ClassLoader rootClassLoader = Registry.class.getClassLoader(); + return new UndertowXnioSsl(Xnio.getInstance(rootClassLoader), OptionMap.EMPTY, sc); + } + + /** + * Stops the embedded Undertow proxy server and releases resources. + */ + @Override + public void stop() { + if (server != null) { + LOG.info("Stopping embedded Undertow proxy..."); + server.stop(); + running = false; + } + } + + @Override + public boolean isRunning() { + return running; + } + + @Override + public int getPhase() { + return Integer.MAX_VALUE; + } + + // --- Setters for Spring Injection --- + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public void setSslEnabled(boolean sslEnabled) { + this.sslEnabled = sslEnabled; + } + + public void setSslKeystorePath(String sslKeystorePath) { + this.sslKeystorePath = sslKeystorePath; + } + + public void setSslKeystorePassword(String sslKeystorePassword) { + this.sslKeystorePassword = sslKeystorePassword; + } + + public void setSslKeystoreAlias(String sslKeystoreAlias) { + this.sslKeystoreAlias = sslKeystoreAlias; + } + + public void setServerBindAddress(String serverBindAddress) { + this.serverBindAddress = serverBindAddress; + } + + public void setServerHostname(String serverHostname) { + this.serverHostname = serverHostname; + } + + public void setServerProtocol(String serverProtocol) { + this.serverProtocol = serverProtocol; + } + + public void setServerPort(int serverPort) { + this.serverPort = serverPort; + } + + public void setFrontendProtocol(String frontendProtocol) { + this.frontendProtocol = frontendProtocol; + } + + public void setFrontendHostname(String frontendHostname) { + this.frontendHostname = frontendHostname; + } + + public void setFrontendPort(int frontendPort) { + this.frontendPort = frontendPort; + } + + public void setBackendProtocol(String backendProtocol) { + this.backendProtocol = backendProtocol; + } + + public void setBackendHostname(String backendHostname) { + this.backendHostname = backendHostname; + } + + public void setBackendPort(int backendPort) { + this.backendPort = backendPort; + } + + public void setBackendContexts(String backendContexts) { + this.backendContexts = backendContexts; + } + + public void setLocalRouteHandlers(List localRouteHandlers) { + this.localRouteHandlers = localRouteHandlers; + } + + public void setFrontendHandlers(List frontendHandlers) { + this.frontendHandlers = frontendHandlers; + } + + public void setBackendHandlers(List backendHandlers) { + this.backendHandlers = backendHandlers; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java new file mode 100644 index 00000000..f3b3fb51 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java @@ -0,0 +1,38 @@ +package me.cxdev.commerce.proxy.trust; + +import java.net.Socket; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLEngine; +import javax.net.ssl.X509ExtendedTrustManager; + +public class AcceptAllTrustManager extends X509ExtendedTrustManager { + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } + + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) { + } + + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) { + } + + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { + } + + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { + } +} diff --git a/core-customize/hybris/config/cloud/local-dev.properties b/core-customize/hybris/config/cloud/local-dev.properties index 27c6dfa1..2d647225 100644 --- a/core-customize/hybris/config/cloud/local-dev.properties +++ b/core-customize/hybris/config/cloud/local-dev.properties @@ -1 +1,4 @@ # cloud/local-dev.properties + +# Enable CxDev Proxy +cxdevproxy.enabled=true \ No newline at end of file diff --git a/core-customize/hybris/config/localextensions.xml b/core-customize/hybris/config/localextensions.xml index ae154b02..9dcf84da 100644 --- a/core-customize/hybris/config/localextensions.xml +++ b/core-customize/hybris/config/localextensions.xml @@ -13,5 +13,8 @@ + + + From f7ffb3680588e4f0ff90c5890db54b2d3efa6f70 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:21:02 +0100 Subject: [PATCH 13/28] CxDevProxy JWT token handling --- .../resources/cxdevproxy-spring.xml | 1 + .../cxdevproxy/jwt/customer/besteller.json | 5 + .../cxdevproxy/jwt/customer/besucher.json | 5 + .../cxdevproxy/jwt/customer/customer.json | 5 + .../cxdevproxy/jwt/customer/training.json | 5 + .../cxdevproxy/jwt/employee/admin.json | 5 + .../cxdevproxy/jwt/employee/cmsmanager.json | 5 + .../jwt/employee/productmanager.json | 5 + .../cxdevproxy/static-content/index.html | 131 +++++++++++++ .../proxy/handler/JwtInjectorHandler.java | 58 ++++++ .../proxy/service/JwtTokenService.java | 184 ++++++++++++++++++ 11 files changed, 409 insertions(+) create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/index.html create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java create mode 100644 core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy-spring.xml index 941bfbd0..ca820573 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy-spring.xml +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy-spring.xml @@ -50,5 +50,6 @@ + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json new file mode 100644 index 00000000..c6d8cfcd --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json @@ -0,0 +1,5 @@ +{ + "sub": "besteller", + "name": "Moritz Besteller", + "authorities": ["ROLE_B2BCUSTOMERGROUP", "ROLE_B2BCUSTOMERADMINGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json new file mode 100644 index 00000000..b02daaaa --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json @@ -0,0 +1,5 @@ +{ + "sub": "besucher", + "name": "Max Besucher", + "authorities": ["ROLE_B2BCUSTOMERGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json new file mode 100644 index 00000000..56de5216 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json @@ -0,0 +1,5 @@ +{ + "sub": "customer@cxdev.me", + "name": "Default Customer", + "authorities": ["ROLE_B2BCUSTOMERGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json new file mode 100644 index 00000000..59769665 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json @@ -0,0 +1,5 @@ +{ + "sub": "besucher", + "name": "Franz Training", + "authorities": ["ROLE_B2BCUSTOMERGROUP", "ROLE_TRAININGGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json new file mode 100644 index 00000000..8d8be540 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json @@ -0,0 +1,5 @@ +{ + "sub": "admin", + "name": "Shop Admin", + "authorities": ["ROLE_ADMINGROUP", "ROLE_EMPLOYEEGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json new file mode 100644 index 00000000..2a2608e1 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json @@ -0,0 +1,5 @@ +{ + "sub": "cmsmanager", + "name": "CMS Manager", + "authorities": ["ROLE_CMSMANAGERGROUP", "ROLE_EMPLOYEEGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json new file mode 100644 index 00000000..a30fe49c --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json @@ -0,0 +1,5 @@ +{ + "sub": "productmanager", + "name": "Product Manager", + "authorities": ["ROLE_PRODUCTMANAGERGROUP", "ROLE_EMPLOYEEGROUP"] +} \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/index.html b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/index.html new file mode 100644 index 00000000..84c136d0 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/index.html @@ -0,0 +1,131 @@ + + + + + + CX Dev Proxy - Portal + + + + +
+

🚀 CX Dev Proxy

+ +
+ Currently logged in as:
+ None + (None) +
+ + + +

🢠Employees (Internal Apps)

+
+
+

admin

Shop Admin (Full Access)

+
+
+

cmsmanager

SmartEdit & CMS Access

+
+
+

productmanager

PIM & Backoffice Access

+
+
+ +

ðŸ›ï¸ Customers (Storefront)

+
+
+

besucher

Max Besucher

+
+
+

besteller

Moritz Besteller

+
+
+

training

Franz Training

+
+
+
+ + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java new file mode 100644 index 00000000..4a8b7d5f --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java @@ -0,0 +1,58 @@ +package me.cxdev.commerce.proxy.handler; + +import io.undertow.server.HttpServerExchange; +import io.undertow.server.handlers.Cookie; +import io.undertow.util.Headers; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import me.cxdev.commerce.proxy.livecycle.ProxyHttpServerExchangeHandler; +import me.cxdev.commerce.proxy.service.JwtTokenService; + +/** + * Interceptor that injects a mocked JWT into the HTTP request before routing it to the backend. + *

+ * It checks the incoming request for a specific cookie ({@code cxdev_user}) set by the + * proxy's developer portal. If found, it requests a signed JWT from the {@link JwtTokenService} + * and appends it as an standard {@code Authorization: Bearer } header. + *

+ */ +public class JwtInjectorHandler implements ProxyHttpServerExchangeHandler { + private static final Logger LOG = LoggerFactory.getLogger(JwtInjectorHandler.class); + private static final String USER_ID_COOKIE_NAME = "cxdevproxy_user_id"; + private static final String USER_TYPE_COOKIE_NAME = "cxdevproxy_user_type"; + + private JwtTokenService jwtTokenService; + + /** + * Evaluates the request cookies and injects the JWT Authorization header if applicable. + * + * @param exchange The current HTTP server exchange. + */ + @Override + public void apply(HttpServerExchange exchange) { + Cookie userIdCookie = exchange.getRequestCookie(USER_ID_COOKIE_NAME); + Cookie userTypeCookie = exchange.getRequestCookie(USER_TYPE_COOKIE_NAME); + + if (userIdCookie != null && StringUtils.isNotBlank(userIdCookie.getValue())) { + String userType = userTypeCookie.getValue(); + String userId = userIdCookie.getValue(); + String token = jwtTokenService.getOrGenerateToken(userType, userId); + + if (token != null) { + // Remove any existing authorization header from the client to enforce our mock token + exchange.getRequestHeaders().remove(Headers.AUTHORIZATION); + + // Inject the mocked token + exchange.getRequestHeaders().put(Headers.AUTHORIZATION, "Bearer " + token); + LOG.debug("Injected mocked JWT for user '{}' into request to {}", userId, exchange.getRequestPath()); + } + } + } + + public void setJwtTokenService(JwtTokenService jwtTokenService) { + this.jwtTokenService = jwtTokenService; + } +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java new file mode 100644 index 00000000..9c07ec42 --- /dev/null +++ b/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java @@ -0,0 +1,184 @@ +package me.cxdev.commerce.proxy.service; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.util.Date; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import com.nimbusds.jose.JWSAlgorithm; +import com.nimbusds.jose.JWSHeader; +import com.nimbusds.jose.JWSSigner; +import com.nimbusds.jose.crypto.RSASSASigner; +import com.nimbusds.jwt.JWTClaimsSet; +import com.nimbusds.jwt.SignedJWT; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; + +/** + * Service responsible for loading JWT templates, generating signed tokens, and caching them. + *

+ * It uses the local domain's private key (extracted from the PKCS12 keystore) to sign the + * tokens using the RS256 algorithm. Static claims are loaded from JSON templates in the + * classpath, while dynamic claims (like iat, exp) are calculated on the fly. + *

+ */ +public class JwtTokenService implements InitializingBean { + private static final Logger LOG = LoggerFactory.getLogger(JwtTokenService.class); + private static final long TOKEN_VALIDITY_MS = 3600 * 1000L; // 1 hour validity + + private String keystorePath; + private String keystorePassword; + private String keystoreAlias; + + private PrivateKey privateKey; + private final Map tokenCache = new ConcurrentHashMap<>(); + + @Override + public void afterPropertiesSet() throws Exception { + loadPrivateKey(); + } + + /** + * Extracts the private key from the configured PKCS12 keystore. + */ + private void loadPrivateKey() throws Exception { + if (StringUtils.isBlank(keystorePath)) { + LOG.warn("Keystore path not configured. JWT signing will not work."); + return; + } + + File keystoreFile = new File(keystorePath.trim()); + if (!keystoreFile.exists()) { + LOG.error("Keystore not found at {}. JWT signing disabled.", keystoreFile.getAbsolutePath()); + return; + } + + KeyStore keyStore = KeyStore.getInstance("PKCS12"); + char[] password = keystorePassword != null ? keystorePassword.toCharArray() : new char[0]; + + try (InputStream is = new FileInputStream(keystoreFile)) { + keyStore.load(is, password); + } + + KeyStore.PrivateKeyEntry privateKeyEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry( + keystoreAlias, new KeyStore.PasswordProtection(password)); + + if (privateKeyEntry != null) { + this.privateKey = privateKeyEntry.getPrivateKey(); + LOG.info("Successfully loaded private key for alias '{}' for JWT signing.", keystoreAlias); + } else { + LOG.error("Could not find private key for alias '{}'.", keystoreAlias); + } + } + + /** + * Retrieves a signed JWT for the given user ID. + * Uses a cached token if it is still valid; otherwise, generates a new one. + * + * @param userType The type of the user (e.g., "employee"). + * @param userId The ID of the user (e.g., "admin"). + * @return The signed JWT as a Base64 encoded string, or null if generation fails. + */ + public String getOrGenerateToken(String userType, String userId) { + if (privateKey == null) { + return null; + } + + CachedToken cached = tokenCache.get(userId); + if (cached != null && cached.isValid()) { + return cached.getToken(); + } + + String newToken = generateSignedToken(userType, userId); + if (newToken != null) { + // Cache token to expire slightly before the actual JWT expiry to avoid edge cases + tokenCache.put(userId, new CachedToken(newToken, System.currentTimeMillis() + TOKEN_VALIDITY_MS - 60000)); + } + return newToken; + } + + /** + * Reads the JSON template, appends dynamic claims, and signs the JWT. + */ + private String generateSignedToken(String userType, String userId) { + String templatePath = "cxdevproxy/jwt/" + userType + "/" + userId + ".json"; + try (InputStream is = getClass().getClassLoader().getResourceAsStream(templatePath)) { + if (is == null) { + LOG.warn("No JWT template found for user at classpath: {}", templatePath); + return null; + } + + String jsonContent = IOUtils.toString(is, StandardCharsets.UTF_8); + + // Parse static claims from the JSON file + JWTClaimsSet templateClaims = JWTClaimsSet.parse(jsonContent); + + // Calculate dynamic validity + Date now = new Date(); + Date expiry = new Date(now.getTime() + TOKEN_VALIDITY_MS); + + // Merge claims + JWTClaimsSet finalClaims = new JWTClaimsSet.Builder(templateClaims) + .issueTime(now) + .expirationTime(expiry) + .issuer("cxdevproxy") + .build(); + + // Sign the JWT + JWSSigner signer = new RSASSASigner(this.privateKey); + JWSHeader header = new JWSHeader.Builder(JWSAlgorithm.RS256).keyID(keystoreAlias).build(); + + SignedJWT signedJWT = new SignedJWT(header, finalClaims); + signedJWT.sign(signer); + + LOG.debug("Successfully generated new signed JWT for user '{}'", userId); + return signedJWT.serialize(); + + } catch (Exception e) { + LOG.error("Failed to generate JWT for user '{}'", userId, e); + return null; + } + } + + public void setKeystorePath(String keystorePath) { + this.keystorePath = keystorePath; + } + + public void setKeystorePassword(String keystorePassword) { + this.keystorePassword = keystorePassword; + } + + public void setKeystoreAlias(String keystoreAlias) { + this.keystoreAlias = keystoreAlias; + } + + /** + * Internal wrapper to hold a cached token and its local expiration time. + */ + private static class CachedToken { + private final String token; + private final long expiresAt; + + public CachedToken(String token, long expiresAt) { + this.token = token; + this.expiresAt = expiresAt; + } + + public String getToken() { + return token; + } + + public boolean isValid() { + return System.currentTimeMillis() < expiresAt; + } + } +} From 5aaf0664ef2d28530413cee1c6b6c6804fb33cfd Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:46:51 +0100 Subject: [PATCH 14/28] increase year in README.md files --- .../hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md | 2 +- .../hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md | 2 +- .../hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md | 2 +- .../hybris/bin/custom/sapcxtools/sapcxreporting/README.md | 2 +- .../hybris/bin/custom/sapcxtools/sapcxtemplate/README.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md index 22667ddf..a67efc53 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md @@ -372,4 +372,4 @@ them. And if you are missing a builder, feel free to raise an issue or to create _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2025, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md index 9c4a0c89..41becfa1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md @@ -56,4 +56,4 @@ For the sync status updates, one need to configure a property using the conventi _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2025, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md index 1b47fc10..5bf0672b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md @@ -171,4 +171,4 @@ Another example for configuring OAuth with Auth0 within the frontend can be foun _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2025, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md index 348fbc80..aff6b8b8 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md @@ -72,4 +72,4 @@ capabilities on custom objects, e.g. special item types introduces by the projec _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2025, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md index dbff9e1e..af1fc6ba 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md @@ -22,4 +22,4 @@ COPY-TEXT ACTIVATION / SETTINGS _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2025, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, SAP CX Tools_ \ No newline at end of file From 5c6fdb445f32ca871db017abb528f573f3f62aa8 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:52:03 +0100 Subject: [PATCH 15/28] apply spotless code styles --- .../SynchronousImpExDataImportExecutor.java | 12 ++++----- .../setup/ReliableSystemSetupExecutor.java | 26 +++++++++---------- .../toolkit/setup/SystemSetupEnvironment.java | 8 +++--- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java index b2e215ed..6a6297c0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java @@ -32,13 +32,13 @@ public class SynchronousImpExDataImportExecutor implements ImpExDataImportExecut private final ImportService importService; private ResourceLoader resourceLoader; - public SynchronousImpExDataImportExecutor(SystemSetupEnvironment environment, CommonI18NService commonI18NService, ImportService importService) { - this.environment = environment; - this.commonI18NService = commonI18NService; - this.importService = importService; - } + public SynchronousImpExDataImportExecutor(SystemSetupEnvironment environment, CommonI18NService commonI18NService, ImportService importService) { + this.environment = environment; + this.commonI18NService = commonI18NService; + this.importService = importService; + } - @Override + @Override public void importImpexFile(SystemSetupContext context, final String file, final String fileEncoding) { this.importImpexFile(context, file, fileEncoding, true); } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java index 9d050636..1370376a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java @@ -44,20 +44,20 @@ public final class ReliableSystemSetupExecutor implements ApplicationContextAwar private final ImpExDataImporter essentialDataImporter; private final List projectDataImporters; - public ReliableSystemSetupExecutor( - ValidationService validationService, - ImpExDataImporter elementaryDataImporter, - ImpExDataImporter releasePatchesImporter, - ImpExDataImporter essentialDataImporter, + public ReliableSystemSetupExecutor( + ValidationService validationService, + ImpExDataImporter elementaryDataImporter, + ImpExDataImporter releasePatchesImporter, + ImpExDataImporter essentialDataImporter, List projectDataImporters) { - this.validationService = validationService; - this.elementaryDataImporter = elementaryDataImporter; - this.releasePatchesImporter = releasePatchesImporter; - this.essentialDataImporter = essentialDataImporter; - this.projectDataImporters = projectDataImporters; - } - - public void reliableSetupPhases(final SystemSetupContext context) { + this.validationService = validationService; + this.elementaryDataImporter = elementaryDataImporter; + this.releasePatchesImporter = releasePatchesImporter; + this.essentialDataImporter = essentialDataImporter; + this.projectDataImporters = projectDataImporters; + } + + public void reliableSetupPhases(final SystemSetupContext context) { Consumer importData = importer -> importer.importData(context); if (context.getType().isEssential()) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java index 7ba9c36a..104706a8 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java @@ -46,13 +46,13 @@ public final class SystemSetupEnvironment { private final ConfigurationService configurationService; private FileBasedConfigurationBuilder persistentConfiguration; - public SystemSetupEnvironment(String fileName, ConfigurationService configurationService) { + public SystemSetupEnvironment(String fileName, ConfigurationService configurationService) { this.fileName = fileName; - this.configurationService = configurationService; + this.configurationService = configurationService; this.updatePersistentConfigurationBuilder(); - } + } - public boolean useLegacyModeForImpEx() { + public boolean useLegacyModeForImpEx() { return configurationService.getConfiguration().getBoolean(LEGACYMODEKEY, false); } From 62999b8b21e4d5de86c26e55a32a1cebb7fe9938 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:52:23 +0100 Subject: [PATCH 16/28] apply constructor injection to test classes --- ...gurationPropertyAccessorAttributeHandlerTests.java | 4 ++-- .../reporting/report/DefaultReportServiceTests.java | 11 +++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java index 6e5df25e..d5a73fda 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java @@ -15,7 +15,7 @@ @UnitTest public class ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests { private ConfigurationServiceFake configurationService; - private ValueFieldOfConfigurationPropertyAccessorAttributeHandler handler = new ValueFieldOfConfigurationPropertyAccessorAttributeHandler(); + private ValueFieldOfConfigurationPropertyAccessorAttributeHandler handler; @Before public void setUp() throws Exception { @@ -23,7 +23,7 @@ public void setUp() throws Exception { configurationService.setProperty("sample.key1", "custom value 1"); configurationService.setProperty("sample.key2", "custom value 2"); - handler.setConfigurationService(configurationService); + handler = new ValueFieldOfConfigurationPropertyAccessorAttributeHandler(configurationService); } @Test diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java index facdd6d3..dede5c6e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java @@ -56,8 +56,7 @@ public void setUp() throws Exception { when(reportGenerator.getExtension()).thenReturn("csv"); when(reportGenerator.createReport(eq(fileConfiguration), eq(EMPTY_SEARCH_RESULT), any(File.class))).thenReturn(true); - service = new DefaultReportService(); - service.setGenerators(Map.of(ReportExportFormat.CSV, reportGenerator)); + service = new DefaultReportService(Map.of(ReportExportFormat.CSV, reportGenerator)); } @Test @@ -140,15 +139,13 @@ public void whenReportFileCannotBeCreated_noReportIsGenerated() throws IOExcepti File fileUnabledToBeCreated = mock(File.class); when(fileUnabledToBeCreated.exists()).thenReturn(false); when(fileUnabledToBeCreated.createNewFile()).thenReturn(false); - // doThrow(IOException.class).when(fileUnabledToBeCreated).createNewFile(); - service = new DefaultReportService() { + service = new DefaultReportService(Map.of(ReportExportFormat.CSV, reportGenerator)) { @Override protected File getTemporaryReportFile(String filename) { return fileUnabledToBeCreated; } }; - service.setGenerators(Map.of(ReportExportFormat.CSV, reportGenerator)); Optional reportFile = service.getReportFile(fileConfiguration, EMPTY_SEARCH_RESULT); @@ -162,18 +159,16 @@ public void whenReportFileCreationFails_noReportIsGenerated() throws IOException when(fileUnabledToBeCreated.exists()).thenReturn(false); doThrow(IOException.class).when(fileUnabledToBeCreated).createNewFile(); - service = new DefaultReportService() { + service = new DefaultReportService(Map.of(ReportExportFormat.CSV, reportGenerator)) { @Override protected File getTemporaryReportFile(String filename) { return fileUnabledToBeCreated; } }; - service.setGenerators(Map.of(ReportExportFormat.CSV, reportGenerator)); Optional reportFile = service.getReportFile(fileConfiguration, EMPTY_SEARCH_RESULT); assertThat(reportFile).isNotPresent(); verify(reportGenerator, never()).createReport(eq(fileConfiguration), eq(EMPTY_SEARCH_RESULT), any(File.class)); } - } From 4f945694ba52b519d54878426920fbc005120ac3 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:54:01 +0100 Subject: [PATCH 17/28] remove sapcxtemplate extension in favor of yvoid template --- .../sapcxtools/sapcxtemplate/.gitignore | 46 ---- .../custom/sapcxtools/sapcxtemplate/.project | 34 --- .../sapcxtools/sapcxtemplate/CONTRIBUTING.md | 4 - .../sapcxtools/sapcxtemplate/LICENSE.md | 201 ------------------ .../custom/sapcxtools/sapcxtemplate/README.md | 25 --- .../sapcxtemplate/extensioninfo.xml | 7 - .../sapcxtemplate/external-dependencies.xml | 10 - .../sapcxtemplate/project.properties | 6 - .../resources/sapcxtemplate-spring.xml | 5 - .../constants/CxTemplateConstants.java | 13 -- .../config/ExtensionConfigurationTests.java | 18 -- .../hybris/config/localextensions.xml | 1 - 12 files changed, 370 deletions(-) delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.gitignore delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.project delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/LICENSE.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/project.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/resources/sapcxtemplate-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/src/tools/sapcx/commerce/template/constants/CxTemplateConstants.java delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/testsrc/tools/sapcx/commerce/template/config/ExtensionConfigurationTests.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.gitignore b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.gitignore deleted file mode 100644 index bd0966d2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# Folders to ignore, whatever the place they are -.DS_Store -.metadata -.settings -classes -testclasses -eclipsebin -gensrc - -# .classpath files and lib folder in sapcxtools to ignore -.classpath -lib/ - -# Filename patterns to ignore -*.class -build.xml -Generated*.java -platformhome.properties -*testclasses.xml -extensioninfo.xsd -*hmc.jar -hmc.xsd -items.xsd -beans.xsd -ruleset.xml -*.log -.pmd -*build.number -base.properties - -# Addon specific copy folders -**/_ui/addons -**/views/addons -**/tld/addons -**/tags/addons -**/messages/addons -**/lib/addons -**/web/addonsrc -**/_ui-src/addons -**/web/addontestsrc -**/web/commonwebsrc/*/ -**/web/webroot/WEB-INF/lib/addon-* -wro_addons.xml - -# Backoffice artifacts -*_bof.jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.project b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.project deleted file mode 100644 index 67082239..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/.project +++ /dev/null @@ -1,34 +0,0 @@ - - - sapcxtemplate - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - - - - 1642058460820 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/LICENSE.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/LICENSE.md deleted file mode 100644 index 9776fe0d..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/LICENSE.md +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [2025] [SAP CX Tools] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md deleted file mode 100644 index af1fc6ba..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# SAP CX Template - -The `sapcxtemplate` extension improves ... - -## FEATURE DESCRIPTION - -COPY-TEXT INTRODUCTION - -### How to activate and use - -COPY-TEXT ACTIVATION / SETTINGS - -### Configuration parameters - -| Parameter | Type | Description | -|-----------|------|-------------| -| | | | - - - -## License - -_Licensed under the Apache License, Version 2.0, January 2004_ - -_Copyright 2026, SAP CX Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml deleted file mode 100644 index 441273a9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/extensioninfo.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml deleted file mode 100644 index fcb6092f..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/external-dependencies.xml +++ /dev/null @@ -1,10 +0,0 @@ - - 4.0.0 - tools.sapcx - sapcxtemplate - 5.0.0-snapshot - jar - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/project.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/project.properties deleted file mode 100644 index 156bc225..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/project.properties +++ /dev/null @@ -1,6 +0,0 @@ -# ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools -# ---------------------------------------------------------------------------- - -# Location of the file for the global platform spring application context -sapcxtemplate.application-context=sapcxtemplate-spring.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/resources/sapcxtemplate-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/resources/sapcxtemplate-spring.xml deleted file mode 100644 index 109dd219..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/resources/sapcxtemplate-spring.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/src/tools/sapcx/commerce/template/constants/CxTemplateConstants.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/src/tools/sapcx/commerce/template/constants/CxTemplateConstants.java deleted file mode 100644 index 24188001..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/src/tools/sapcx/commerce/template/constants/CxTemplateConstants.java +++ /dev/null @@ -1,13 +0,0 @@ -package tools.sapcx.commerce.template.constants; - -/** - * Global class for all constants. This class is required by the platform and - * will not been used for any other purpose. - */ -public final class CxTemplateConstants { - public static final String EXTENSIONNAME = "sapcxtemplate"; - - private CxTemplateConstants() { - // empty to avoid instantiating this constant class - } -} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/testsrc/tools/sapcx/commerce/template/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/testsrc/tools/sapcx/commerce/template/config/ExtensionConfigurationTests.java deleted file mode 100644 index 94f50b22..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxtemplate/testsrc/tools/sapcx/commerce/template/config/ExtensionConfigurationTests.java +++ /dev/null @@ -1,18 +0,0 @@ -package tools.sapcx.commerce.template.config; - -import de.hybris.bootstrap.annotations.UnitTest; - -import org.junit.Test; - -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; - -@UnitTest -public class ExtensionConfigurationTests { - @Test - public void extensionConfiguration() { - InstalledExtensionVerifier.verifier() - .requires("sapcxtemplate") - .requires("sapcommercetoolkit") - .verify(); - } -} diff --git a/core-customize/hybris/config/localextensions.xml b/core-customize/hybris/config/localextensions.xml index ae154b02..1702d2d1 100644 --- a/core-customize/hybris/config/localextensions.xml +++ b/core-customize/hybris/config/localextensions.xml @@ -8,7 +8,6 @@ - From 14ae5d267b7ffc2ce3a5702bb716a57465a44fdf Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:57:40 +0100 Subject: [PATCH 18/28] correct project name of sapcxenvconfig extension --- .../hybris/bin/custom/sapcxtools/sapcxenvconfig/.project | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project index 67082239..983eea65 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project +++ b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project @@ -1,6 +1,6 @@ - sapcxtemplate + sapcxenvconfig From 32397d7f0b60a148b84d07d214ea9fb407cb4630 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 03:58:02 +0100 Subject: [PATCH 19/28] remove obsolete singlesignon extensions --- core-customize/hybris/config/localextensions.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core-customize/hybris/config/localextensions.xml b/core-customize/hybris/config/localextensions.xml index 1702d2d1..00d384c4 100644 --- a/core-customize/hybris/config/localextensions.xml +++ b/core-customize/hybris/config/localextensions.xml @@ -3,10 +3,6 @@ - - - - From 75e78a4f37a72b5cb97debd1a6ed4bc357a42d7a Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 04:01:17 +0100 Subject: [PATCH 20/28] remove obsolete search and singlesignon extensions --- .github/workflows/dependency-check.yml | 2 +- ci/config/testing-integration.properties | 2 +- ci/config/testing-unit.properties | 2 +- .../hybris/config/cloud/persona/development.properties | 2 +- core-customize/manifest.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 89b7e04f..d29f0a9f 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - extension: ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxsearch", "sapcxenvconfig", "sapcxsinglesignon"] + extension: ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxenvconfig"] steps: - uses: actions/checkout@v4 - name: Set up JDK diff --git a/ci/config/testing-integration.properties b/ci/config/testing-integration.properties index 1a7447a9..979be73f 100644 --- a/ci/config/testing-integration.properties +++ b/ci/config/testing-integration.properties @@ -1,7 +1,7 @@ standalone.javaoptions=${tomcat.mem} -javaagent:${HYBRIS_BIN_DIR}/../../../ci/lib/jacocoagent.jar=includes=tools.sapcx.commerce.*,destfile=${HYBRIS_LOG_DIR}/junit/jacoco-integration.exec installed.tenants=junit -testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxsearch,sapcxenvconfig,sapcxsinglesignon +testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig testclasses.packages=tools.sapcx.commerce.* testclasses.suppress.junit.tenant=false testclasses.reportdir=${HYBRIS_LOG_DIR}/junit/test-results/integration diff --git a/ci/config/testing-unit.properties b/ci/config/testing-unit.properties index c5d94f9a..da2a18e7 100644 --- a/ci/config/testing-unit.properties +++ b/ci/config/testing-unit.properties @@ -1,7 +1,7 @@ standalone.javaoptions=${tomcat.mem} -javaagent:${HYBRIS_BIN_DIR}/../../../ci/lib/jacocoagent.jar=includes=tools.sapcx.commerce.*,destfile=${HYBRIS_LOG_DIR}/junit/jacoco-unit.exec installed.tenants= -testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxsearch,sapcxenvconfig,sapcxsinglesignon +testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig testclasses.packages=tools.sapcx.commerce.* testclasses.suppress.junit.tenant=true testclasses.reportdir=${HYBRIS_LOG_DIR}/junit/test-results/unit diff --git a/core-customize/hybris/config/cloud/persona/development.properties b/core-customize/hybris/config/cloud/persona/development.properties index 3304a3f0..e582080e 100644 --- a/core-customize/hybris/config/cloud/persona/development.properties +++ b/core-customize/hybris/config/cloud/persona/development.properties @@ -17,7 +17,7 @@ sapcommercetoolkit.impeximport.environment.importtestdata=true #*****************************************************************************# # Testing -testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig,sapcxsearch,sapcxsinglesignon,sapcxssoauth0 +testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig testclasses.packages=tools.sapcx.commerce.* testclasses.suppress.junit.tenant=true testclasses.reportdir=${HYBRIS_LOG_DIR}/junit/test-results diff --git a/core-customize/manifest.json b/core-customize/manifest.json index 97303d38..88749097 100644 --- a/core-customize/manifest.json +++ b/core-customize/manifest.json @@ -43,7 +43,7 @@ } ], "tests": { - "extensions": ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxsearch", "sapcxsinglesignon"], + "extensions": ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxenvconfig"], "annotations": ["UnitTests", "IntegrationTests"], "packages": ["tools.sapcx.commerce.*"] } From 690a5aeb4dc73483debb67917976b055d987d1d5 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 06:36:21 +0100 Subject: [PATCH 21/28] rename of sapcx tool to cxdev due to name rights --- .github/workflows/buildandtest.yml | 22 +- .github/workflows/dependency-check.yml | 24 +- .gitignore | 2 +- .java-version | 2 +- CONTRIBUTING.md | 65 +- LICENSE.md | 2 +- README.md | 16 +- build.gradle.kts | 6 +- ci/config/localextensions-template.xml | 2 +- ci/config/testing-integration.properties | 6 +- ci/config/testing-unit.properties | 6 +- codecov.yml | 6 +- core-customize/build.gradle.kts | 60 +- .../eclipse-formatter-settings.xml | 2 +- .../cxdevbackoffice}/.gitignore | 2 +- .../cxdevbackoffice}/.project | 2 +- .../cxdevbackoffice}/LICENSE.md | 2 +- .../cxdevbackoffice}/README.md | 22 +- .../ConfigurableBackofficeLocaleService.java | 2 +- .../GenericItemSyncRelatedItemsVisitor.java | 15 +- ...figurableBackofficeLocaleServiceTests.java | 6 +- ...nericItemSyncRelatedItemsVisitorTests.java | 6 +- .../cxdevbackoffice/buildcallbacks.xml | 9 + .../cxdevbackoffice}/extensioninfo.xml | 7 +- .../external-dependencies.xml | 4 +- .../cxdevbackoffice}/project.properties | 12 +- .../cng/css/cxdevbackoffice_common.scss} | 4 +- .../support/cxdevbackoffice-variables.scss} | 0 .../cxdevbackoffice-backoffice-config.xml} | 2 +- .../cxdevbackoffice-backoffice-spring.xml} | 8 +- .../cxdevbackoffice-backoffice-widgets.xml} | 0 .../resources/cxdevbackoffice-spring.xml} | 0 .../constants/CxBackofficeConstants.java | 4 +- .../config/ExtensionConfigurationTests.java | 8 +- .../cxdevenvconfig}/.gitignore | 2 +- .../cxdevenvconfig}/.project | 2 +- .../cxdevenvconfig}/LICENSE.md | 2 +- .../cxdevenvconfig}/README.md | 46 +- .../cxdevenvconfig}/extensioninfo.xml | 4 +- .../cxdevenvconfig}/external-dependencies.xml | 4 +- .../cxdevenvconfig}/project.properties | 10 +- .../resources/cxdevenvconfig-beans.xml} | 2 +- .../resources/cxdevenvconfig-spring.xml} | 2 +- .../web/spring/cxdevenvconfig-web-spring.xml} | 2 +- .../constants/CxEnvConfigConstants.java | 5 +- .../FrontendConfigurationController.java | 7 +- ...tSpecificFrontendConfigurationService.java | 8 +- .../FrontendConfigurationService.java | 2 +- .../frontend/ConfigurationServiceFake.java | 2 +- ...ificFrontendConfigurationServiceTests.java | 10 +- .../cxdevreporting}/.gitignore | 2 +- .../cxdevreporting}/.project | 2 +- .../cxdevreporting}/LICENSE.md | 2 +- .../cxdevreporting}/README.md | 28 +- .../scss/cxdevreporting-variables.scss} | 0 .../actions/executereport/definition.xml | 8 +- .../icon_action_exportreport_default.png | Bin .../icon_action_exportreport_disabled.png | Bin .../icons/icon_action_exportreport_hover.png | Bin .../executereport/labels/labels_de.properties | 0 .../executereport/labels/labels_en.properties | 0 .../actions/validatereport/definition.xml | 8 +- .../icon_action_validatereport_default.png | Bin .../icon_action_validatereport_disabled.png | Bin .../icon_action_validatereport_hover.png | Bin .../labels/labels_de.properties | 0 .../labels/labels_en.properties | 0 .../action/ExecuteReportAction.java | 13 +- .../action/ValidateReportAction.java | 11 +- .../commerce/reporting/backoffice/.gitkeep | 0 .../cxdevreporting}/extensioninfo.xml | 7 +- .../cxdevreporting}/external-dependencies.xml | 4 +- .../cxdevreporting/project.properties | 26 + .../cxdevreporting-backoffice-config.xml} | 40 +- .../labels_de.properties | 11 + .../labels_en.properties | 11 + .../cxdevreporting-backoffice-spring.xml} | 2 +- .../resources/cxdevreporting-beans.xml} | 2 +- .../resources/cxdevreporting-items.xml} | 22 +- .../resources/cxdevreporting-spring.xml} | 28 +- .../sampledata/default-reports.impex | 0 .../cxdevreporting-locales_de.properties} | 0 .../cxdevreporting-locales_en.properties} | 0 .../constants/CxReportingConstants.java | 4 +- ...erationScheduleInitDefaultInterceptor.java | 4 +- ...ationPropertyAccessorAttributeHandler.java | 4 +- .../ExcelDocumentNotAvailableException.java | 2 +- .../download/ReportDownloadFacade.java | 2 +- .../download/SelfDeletingFileInputStream.java | 2 +- .../download/SolrReportDownloadFacade.java | 12 +- .../reporting/generator/ReportGenerator.java | 12 + .../ReportGeneratorJobPerformable.java | 19 +- .../generator/csv/CsvLineBuilder.java | 2 +- .../generator/csv/CsvReportGenerator.java | 10 +- .../generator/csv/CsvReportWriter.java | 6 +- .../generator/excel/ExcelReportGenerator.java | 10 +- .../QueryReportConfigurationPopulator.java | 6 +- .../report/DefaultReportService.java | 16 +- .../reporting/report/ReportService.java | 10 +- .../search/AbstractGenericSearchFacade.java | 2 +- .../FlexibleSearchGenericSearchService.java | 2 +- .../reporting/search/GenericSearchResult.java | 2 +- .../search/GenericSearchResultHeader.java | 2 +- .../search/GenericSearchService.java | 2 +- .../config/ExtensionConfigurationTests.java | 8 +- ...torCronJobInitDefaultInterceptorTests.java | 10 +- ...PropertyAccessorAttributeHandlerTests.java | 8 +- .../csv/CsvReportGeneratorTests.java | 8 +- .../report/DefaultReportServiceTests.java | 24 +- .../DefaultGenericFlexibleSearchTests.java | 10 +- .../GenericSearchResultHeaderTests.java | 2 +- .../search/ResultSetMetaDataMock.java | 2 +- .../reporting/search/ResultSetMock.java | 2 +- .../cxdevtoolkit}/.gitignore | 2 +- .../cxdevtoolkit}/.project | 2 +- .../cxdevtoolkit}/LICENSE.md | 2 +- .../cxdevtoolkit}/README.md | 104 +- .../cxdevtoolkit}/extensioninfo.xml | 4 +- .../cxdevtoolkit}/external-dependencies.xml | 4 +- .../cxdevtoolkit}/project.properties | 98 +- .../cxdevtoolkit-backoffice-config.xml} | 6 +- .../labels_de.properties | 2 + .../labels_en.properties | 2 + .../cxdevtoolkit-backoffice-spring.xml} | 8 +- .../resources/cxdevtoolkit-items.xml} | 0 .../resources/cxdevtoolkit-spring.xml | 9 + .../email-templates/messages.properties} | 0 .../resources/cxdevtoolkit}/models-spring.xml | 4 +- .../cxdevtoolkit}/sessionhandling-spring.xml | 2 +- .../cxdevtoolkit}/systemsetup-spring.xml | 50 +- .../thymeleafemails-fake-spring.xml | 27 + .../cxdevtoolkit}/thymeleafemails-spring.xml | 14 +- .../cxdevtoolkit-locales_de.properties} | 0 .../cxdevtoolkit-locales_en.properties} | 0 .../toolkit/constants/ToolkitConstants.java | 4 +- .../email/DefaultHtmlEmailService.java | 2 +- .../toolkit/email/HtmlEmailAddress.java | 2 +- .../toolkit/email/HtmlEmailBuilder.java | 9 +- .../toolkit/email/HtmlEmailGenerator.java | 2 +- .../toolkit/email/HtmlEmailService.java | 2 +- .../toolkit/email/ProxyHtmlEmail.java | 2 +- .../email/ThymeleafHtmlEmailGenerator.java | 2 +- .../AbstractHtmlEmailAttachmentBuilder.java | 2 +- .../attachments/EmailAfterBuildHook.java | 2 +- .../FileBasedHtmlEmailAttachmentBuilder.java | 2 +- .../HtmlEmailAttachmentBuilder.java | 2 +- .../HtmlEmailAttachmentBuilders.java | 2 +- .../MediaBasedHtmlEmailAttachmentBuilder.java | 2 +- .../URLBasedHtmlEmailAttachmentBuilder.java | 2 +- ...yHtmlEmailsMaintenanceCleanupStrategy.java | 4 +- .../StoreLocallyHtmlEmailServiceFake.java | 7 +- .../commerce/toolkit/impex/ImpExTasks.java | 10 +- .../executor/ImpExDataImportExecutor.java | 2 +- .../executor/ImpExDataImporterLogger.java | 2 +- .../SynchronousImpExDataImportExecutor.java | 4 +- .../model/FailureLoggingModelService.java | 2 +- .../toolkit/session/CxLocalViewExecutor.java | 2 +- .../session/LocalViewExecutionBody.java | 2 +- .../toolkit/session/LocalViewExecutor.java | 2 +- .../toolkit/setup/ImpExDataImporter.java | 2 +- .../setup/ReliableSystemSetupExecutor.java | 2 +- .../toolkit/setup/SystemSetupEnvironment.java | 20 +- .../toolkit/setup/ToolkitSystemSetup.java | 4 +- .../importer/PrefixBasedDataImporter.java | 16 +- .../setup/importer/ProjectDataImporter.java | 2 +- .../importer/ReleasePatchesImporter.java | 4 +- .../config/ExtensionConfigurationTests.java | 6 +- .../email/DefaultHtmlEmailServiceTests.java | 2 +- .../toolkit/email/HtmlEmailAddressTests.java | 2 +- .../toolkit/email/HtmlEmailBuilderTests.java | 9 +- ...HtmlEmailGeneratorDefaultMethodsTests.java | 5 +- .../ThymeleafHtmlEmailGeneratorTests.java | 2 +- ...reInDatabaseHtmlEmailServiceFakeTests.java | 7 +- ...calDirectoryHtmlEmailServiceFakeTests.java | 2 +- .../ImpExDataImporterLoggerTests.java | 2 +- .../setup/SystemSetupEnvironmentTests.java | 4 +- .../setup/ToolkitSystemSetupTests.java | 86 +- .../ExceptionThrowingItemModelAttribute.java | 2 +- .../InMemoryDynamicAttributeHandler.java | 2 +- .../InMemoryDynamicItemModelAttribute.java | 2 +- .../itemmodel/InMemoryItemAwareAttribute.java | 2 +- .../itemmodel/InMemoryItemModelAttribute.java | 2 +- .../itemmodel/InMemoryItemModelContext.java | 6 +- .../InMemoryItemModelContextAccessor.java | 2 +- .../InMemoryLocalizedItemModelAttribute.java | 4 +- .../itemmodel/InMemoryModelFactory.java | 4 +- .../testing/itemmodel/ItemModelAttribute.java | 2 +- .../catalog/CatalogVersionServiceFake.java | 4 +- .../catalog/ClassificationServiceFake.java | 2 +- .../config/ConfigurationServiceFake.java | 2 +- .../testdoubles/config/MessageSourceStub.java | 2 +- .../testdoubles/core/DummyTypeService.java | 2 +- .../core/I18NServiceStubForLocales.java | 2 +- .../core/InMemoryModelService.java | 4 +- .../core/InMemoryModelServiceTests.java | 2 +- .../core/InterceptorContextStub.java | 2 +- .../testdoubles/core/ModelServiceFake.java | 4 +- .../testdoubles/core/ModelServiceSpy.java | 2 +- .../core/ValidationServiceSpy.java | 2 +- .../testdoubles/dao/GenericDaoFake.java | 4 +- .../dao/GenericDaoFakeThrowingException.java | 4 +- .../testdoubles/datamapping/ConverterSpy.java | 2 +- .../email/HtmlEmailGeneratorFake.java | 5 +- .../testdoubles/event/EventServiceFake.java | 2 +- .../testdoubles/event/EventServiceSpy.java | 2 +- .../testdoubles/models/AddressBuilder.java | 4 +- .../testdoubles/models/CategoryBuilder.java | 4 +- .../models/CategoryTreeBuilder.java | 2 +- .../models/CustomPropertyBuilder.java | 2 +- .../testdoubles/models/ProductBuilder.java | 4 +- .../search/FlexibleSearchServiceStub.java | 2 +- .../testdoubles/user/SessionServiceFake.java | 2 +- .../testing/testdoubles/user/TenantDummy.java | 2 +- .../testdoubles/user/UserServiceFake.java | 4 +- .../toolkit/testing/utils/MockingUtils.java | 6 +- .../testing/utils/ReflectionUtils.java | 2 +- .../verifier/DelegationPatternVerifier.java | 10 +- .../verifier/InstalledExtensionVerifier.java | 2 +- .../sapcommercetoolkit/CONTRIBUTING.md | 4 - .../sapcommercetoolkit-locales_en.properties | 4 - .../labels.properties | 2 - .../labels_de.properties | 2 - .../labels_en.properties | 2 - .../resources/sapcommercetoolkit-spring.xml | 9 - .../thymeleafemails-fake-spring.xml | 27 - .../sapcxbackoffice/CONTRIBUTING.md | 4 - .../sapcxbackoffice/buildcallbacks.xml | 12 - .../sapcxtools/sapcxenvconfig/CONTRIBUTING.md | 4 - .../sapcxtools/sapcxreporting/CONTRIBUTING.md | 4 - .../executereport/labels/labels.properties | 4 - .../validatereport/labels/labels.properties | 2 - .../sapcxreporting/project.properties | 26 - .../sapcxreporting-locales.properties | 44 - .../labels.properties | 11 - .../labels_de.properties | 11 - .../labels_en.properties | 11 - .../reporting/generator/ReportGenerator.java | 12 - .../hybris/config/cloud/common.properties | 2 +- .../cloud/persona/development.properties | 12 +- .../cloud/persona/production.properties | 4 +- .../config/cloud/persona/staging.properties | 8 +- .../hybris/config/localextensions.xml | 13 +- .../config/solr/instances/cloud/configsets | 1 + .../config/solr/instances/cloud/log4j2.xml | 88 ++ .../config/solr/instances/cloud/security.json | 156 +++ .../config/solr/instances/cloud/solr.p12 | Bin 0 -> 2733 bytes .../config/solr/instances/cloud/solr.xml | 40 + .../solr/instances/cloud/solr_client.p12 | Bin 0 -> 2693 bytes .../config/solr/instances/cloud/zoo.cfg | 34 + .../hybris/config/tomcat/README.txt | 10 + core-customize/manifest.json | 6 +- .../default/conf/lang/contractions_ca.txt | 8 + .../default/conf/lang/contractions_fr.txt | 15 + .../default/conf/lang/contractions_ga.txt | 5 + .../default/conf/lang/contractions_it.txt | 23 + .../default/conf/lang/hyphenations_ga.txt | 5 + .../default/conf/lang/stemdict_nl.txt | 6 + .../default/conf/lang/stoptags_ja.txt | 420 +++++++ .../default/conf/lang/stopwords_ar.txt | 125 ++ .../default/conf/lang/stopwords_bg.txt | 193 +++ .../default/conf/lang/stopwords_ca.txt | 220 ++++ .../default/conf/lang/stopwords_cz.txt | 172 +++ .../default/conf/lang/stopwords_da.txt | 110 ++ .../default/conf/lang/stopwords_de.txt | 294 +++++ .../default/conf/lang/stopwords_el.txt | 78 ++ .../default/conf/lang/stopwords_en.txt | 54 + .../default/conf/lang/stopwords_es.txt | 356 ++++++ .../default/conf/lang/stopwords_eu.txt | 99 ++ .../default/conf/lang/stopwords_fa.txt | 313 +++++ .../default/conf/lang/stopwords_fi.txt | 97 ++ .../default/conf/lang/stopwords_fr.txt | 186 +++ .../default/conf/lang/stopwords_ga.txt | 110 ++ .../default/conf/lang/stopwords_gl.txt | 161 +++ .../default/conf/lang/stopwords_hi.txt | 235 ++++ .../default/conf/lang/stopwords_hu.txt | 211 ++++ .../default/conf/lang/stopwords_hy.txt | 46 + .../default/conf/lang/stopwords_id.txt | 359 ++++++ .../default/conf/lang/stopwords_it.txt | 303 +++++ .../default/conf/lang/stopwords_ja.txt | 127 ++ .../default/conf/lang/stopwords_lv.txt | 172 +++ .../default/conf/lang/stopwords_nl.txt | 119 ++ .../default/conf/lang/stopwords_no.txt | 194 +++ .../default/conf/lang/stopwords_pt.txt | 253 ++++ .../default/conf/lang/stopwords_ro.txt | 233 ++++ .../default/conf/lang/stopwords_ru.txt | 243 ++++ .../default/conf/lang/stopwords_sv.txt | 133 ++ .../default/conf/lang/stopwords_th.txt | 119 ++ .../default/conf/lang/stopwords_tr.txt | 212 ++++ .../default/conf/lang/userdict_ja.txt | 29 + .../configsets/default/conf/protwords.txt | 0 .../solr/configsets/default/conf/schema.xml | 1066 +++++++++++++++++ .../configsets/default/conf/solrconfig.xml | 620 ++++++++++ .../configsets/default/conf/stopwords.txt | 3 + .../solr/configsets/default/conf/synonyms.txt | 3 + gradle/wrapper/gradle-wrapper.jar | Bin 59821 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 47 +- gradlew.bat | 41 +- settings.gradle | 2 +- sonar-project.properties | 10 +- 300 files changed, 8985 insertions(+), 1012 deletions(-) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevbackoffice}/.gitignore (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/.project (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevbackoffice}/LICENSE.md (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/README.md (75%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx => cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev}/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx => cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev}/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java (96%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/buildcallbacks.xml rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/extensioninfo.xml (64%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/external-dependencies.xml (82%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevbackoffice}/project.properties (63%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/sapcxbackoffice_common.scss => cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/cxdevbackoffice_common.scss} (87%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/support/sapcxbackoffice-variables.scss => cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/support/cxdevbackoffice-variables.scss} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-config.xml => cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-config.xml} (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-spring.xml => cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-spring.xml} (86%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-widgets.xml => cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-widgets.xml} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-spring.xml => cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-spring.xml} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/src/tools/sapcx => cxdevtools/cxdevbackoffice/src/me/cxdev}/commerce/backoffice/constants/CxBackofficeConstants.java (70%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice/testsrc/tools/sapcx => cxdevtools/cxdevbackoffice/testsrc/me/cxdev}/commerce/backoffice/config/ExtensionConfigurationTests.java (57%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevenvconfig}/.gitignore (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevenvconfig}/.project (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevenvconfig}/LICENSE.md (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevenvconfig}/README.md (82%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevenvconfig}/extensioninfo.xml (75%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevenvconfig}/external-dependencies.xml (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig => cxdevtools/cxdevenvconfig}/project.properties (74%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-beans.xml => cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-beans.xml} (82%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-spring.xml => cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-spring.xml} (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/resources/occ/v2/sapcxenvconfigocc/web/spring/sapcxenvconfig-web-spring.xml => cxdevtools/cxdevenvconfig/resources/occ/v2/cxdevenvconfigocc/web/spring/cxdevenvconfig-web-spring.xml} (88%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/src/tools/sapcx => cxdevtools/cxdevenvconfig/src/me/cxdev}/commerce/config/constants/CxEnvConfigConstants.java (63%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/src/tools/sapcx => cxdevtools/cxdevenvconfig/src/me/cxdev}/commerce/config/controller/FrontendConfigurationController.java (87%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/src/tools/sapcx => cxdevtools/cxdevenvconfig/src/me/cxdev}/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/src/tools/sapcx => cxdevtools/cxdevenvconfig/src/me/cxdev}/commerce/config/frontend/FrontendConfigurationService.java (76%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/testsrc/tools/sapcx => cxdevtools/cxdevenvconfig/testsrc/me/cxdev}/commerce/config/frontend/ConfigurationServiceFake.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxenvconfig/testsrc/tools/sapcx => cxdevtools/cxdevenvconfig/testsrc/me/cxdev}/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java (88%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/.gitignore (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/.project (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxbackoffice => cxdevtools/cxdevreporting}/LICENSE.md (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/README.md (83%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/email-templates/messages.properties => cxdevtools/cxdevreporting/backoffice/resources/scss/cxdevreporting-variables.scss} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/executereport/definition.xml (67%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_default.png (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_disabled.png (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_hover.png (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/executereport/labels/labels_de.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/executereport/labels/labels_en.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/validatereport/definition.xml (67%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_default.png (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_disabled.png (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_hover.png (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/validatereport/labels/labels_de.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/resources/widgets/actions/validatereport/labels/labels_en.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/backoffice/src/tools/sapcx => cxdevtools/cxdevreporting/backoffice/src/me/cxdev}/commerce/reporting/backoffice/action/ExecuteReportAction.java (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/backoffice/src/tools/sapcx => cxdevtools/cxdevreporting/backoffice/src/me/cxdev}/commerce/reporting/backoffice/action/ValidateReportAction.java (85%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/backoffice/testsrc/tools/sapcx/commerce/reporting/backoffice/.gitkeep (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/extensioninfo.xml (67%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting => cxdevtools/cxdevreporting}/external-dependencies.xml (89%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/project.properties rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-config.xml => cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-config.xml} (93%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_de.properties create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_en.properties rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-spring.xml => cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-spring.xml} (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/sapcxreporting-beans.xml => cxdevtools/cxdevreporting/resources/cxdevreporting-beans.xml} (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/sapcxreporting-items.xml => cxdevtools/cxdevreporting/resources/cxdevreporting-items.xml} (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml => cxdevtools/cxdevreporting/resources/cxdevreporting-spring.xml} (70%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/sapcxreporting => cxdevtools/cxdevreporting/resources/cxdevreporting}/sampledata/default-reports.impex (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales_de.properties => cxdevtools/cxdevreporting/resources/localization/cxdevreporting-locales_de.properties} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales_en.properties => cxdevtools/cxdevreporting/resources/localization/cxdevreporting-locales_en.properties} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/constants/CxReportingConstants.java (73%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java (88%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/download/ExcelDocumentNotAvailableException.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/download/ReportDownloadFacade.java (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/download/SelfDeletingFileInputStream.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/download/SolrReportDownloadFacade.java (82%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGenerator.java rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/generator/ReportGeneratorJobPerformable.java (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/generator/csv/CsvLineBuilder.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/generator/csv/CsvReportGenerator.java (83%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/generator/csv/CsvReportWriter.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/generator/excel/ExcelReportGenerator.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/populators/QueryReportConfigurationPopulator.java (85%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/report/DefaultReportService.java (86%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/report/ReportService.java (77%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/search/AbstractGenericSearchFacade.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/search/FlexibleSearchGenericSearchService.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/search/GenericSearchResult.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/search/GenericSearchResultHeader.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/src/tools/sapcx => cxdevtools/cxdevreporting/src/me/cxdev}/commerce/reporting/search/GenericSearchService.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/config/ExtensionConfigurationTests.java (58%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java (82%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/generator/csv/CsvReportGeneratorTests.java (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/report/DefaultReportServiceTests.java (88%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/search/GenericSearchResultHeaderTests.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/search/ResultSetMetaDataMock.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/testsrc/tools/sapcx => cxdevtools/cxdevreporting/testsrc/me/cxdev}/commerce/reporting/search/ResultSetMock.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/.gitignore (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/.project (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/LICENSE.md (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/README.md (74%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/extensioninfo.xml (75%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/external-dependencies.xml (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit => cxdevtools/cxdevtoolkit}/project.properties (58%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-config.xml => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-config.xml} (96%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_de.properties create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_en.properties rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-spring.xml => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-spring.xml} (55%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-items.xml => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-items.xml} (100%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-spring.xml rename core-customize/hybris/bin/custom/{sapcxtools/sapcxreporting/backoffice/resources/scss/sapcxreporting-variables.scss => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/email-templates/messages.properties} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit}/models-spring.xml (82%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit}/sessionhandling-spring.xml (86%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit}/systemsetup-spring.xml (53%) create mode 100644 core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-fake-spring.xml rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit => cxdevtools/cxdevtoolkit/resources/cxdevtoolkit}/thymeleafemails-spring.xml (81%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_de.properties => cxdevtools/cxdevtoolkit/resources/localization/cxdevtoolkit-locales_de.properties} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales.properties => cxdevtools/cxdevtoolkit/resources/localization/cxdevtoolkit-locales_en.properties} (100%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/constants/ToolkitConstants.java (69%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/DefaultHtmlEmailService.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/HtmlEmailAddress.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/HtmlEmailBuilder.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/HtmlEmailGenerator.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/HtmlEmailService.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/ProxyHtmlEmail.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/EmailAfterBuildHook.java (80%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java (84%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/impex/ImpExTasks.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/model/FailureLoggingModelService.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/session/CxLocalViewExecutor.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/session/LocalViewExecutionBody.java (82%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/session/LocalViewExecutor.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/ImpExDataImporter.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/ReliableSystemSetupExecutor.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/SystemSetupEnvironment.java (85%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/ToolkitSystemSetup.java (92%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java (79%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/importer/ProjectDataImporter.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/src/tools/sapcx => cxdevtools/cxdevtoolkit/src/me/cxdev}/commerce/toolkit/setup/importer/ReleasePatchesImporter.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/config/ExtensionConfigurationTests.java (59%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/HtmlEmailAddressTests.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/HtmlEmailBuilderTests.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/setup/SystemSetupEnvironmentTests.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/setup/ToolkitSystemSetupTests.java (86%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java (75%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java (69%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java (86%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java (89%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java (93%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java (96%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java (91%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java (74%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java (94%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/user/TenantDummy.java (99%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java (98%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/utils/MockingUtils.java (95%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/utils/ReflectionUtils.java (97%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java (90%) rename core-customize/hybris/bin/custom/{sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx => cxdevtools/cxdevtoolkit/testsrc/me/cxdev}/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java (97%) delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_en.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_de.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_en.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-fake-spring.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/buildcallbacks.xml delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/CONTRIBUTING.md delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/project.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_de.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_en.properties delete mode 100644 core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGenerator.java create mode 120000 core-customize/hybris/config/solr/instances/cloud/configsets create mode 100644 core-customize/hybris/config/solr/instances/cloud/log4j2.xml create mode 100644 core-customize/hybris/config/solr/instances/cloud/security.json create mode 100644 core-customize/hybris/config/solr/instances/cloud/solr.p12 create mode 100644 core-customize/hybris/config/solr/instances/cloud/solr.xml create mode 100644 core-customize/hybris/config/solr/instances/cloud/solr_client.p12 create mode 100644 core-customize/hybris/config/solr/instances/cloud/zoo.cfg create mode 100644 core-customize/hybris/config/tomcat/README.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ca.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/contractions_fr.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ga.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/contractions_it.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/hyphenations_ga.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stemdict_nl.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stoptags_ja.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ar.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_bg.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ca.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_cz.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_da.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_de.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_el.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_en.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_es.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_eu.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fa.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fi.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fr.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ga.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_gl.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hi.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hu.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hy.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_id.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_it.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ja.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_lv.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_nl.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_no.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_pt.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ro.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ru.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_sv.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_th.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_tr.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/lang/userdict_ja.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/protwords.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/schema.xml create mode 100644 core-customize/solr/server/solr/configsets/default/conf/solrconfig.xml create mode 100644 core-customize/solr/server/solr/configsets/default/conf/stopwords.txt create mode 100644 core-customize/solr/server/solr/configsets/default/conf/synonyms.txt diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index add2974f..80821dd8 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -5,11 +5,11 @@ on: branches: [develop] paths: - "core-customize/manifest.json" - - "core-customize/hybris/bin/custom/sapcxtools/**/*.java" - - "core-customize/hybris/bin/custom/sapcxtools/**/*-beans.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/*-items.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/extensioninfo.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/external-dependencies.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/*.java" + - "core-customize/hybris/bin/custom/cxdevtools/**/*-beans.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/*-items.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/extensioninfo.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/external-dependencies.xml" pull_request: branches: [main, develop] schedule: @@ -38,16 +38,16 @@ jobs: path: dependencies - name: SAP download config env: - SAPCX_ARTEFACT_BASEURL: ${{ secrets.SAPCX_ARTEFACT_BASEURL }} - SAPCX_ARTEFACT_USER: ${{ secrets.SAPCX_ARTEFACT_USER }} - SAPCX_ARTEFACT_PASSWORD: ${{ secrets.SAPCX_ARTEFACT_PASSWORD }} + CXDEV_ARTEFACT_BASEURL: ${{ secrets.CXDEV_ARTEFACT_BASEURL }} + CXDEV_ARTEFACT_USER: ${{ secrets.CXDEV_ARTEFACT_USER }} + CXDEV_ARTEFACT_PASSWORD: ${{ secrets.CXDEV_ARTEFACT_PASSWORD }} shell: bash run: | mkdir -p ${HOME}/.gradle echo "GRADLE_USER_HOME=${HOME}/.gradle" >> $GITHUB_ENV - echo "SAPCX_ARTEFACT_BASEURL=${SAPCX_ARTEFACT_BASEURL}" >> ${HOME}/.gradle/gradle.properties - echo "SAPCX_ARTEFACT_USER=${SAPCX_ARTEFACT_USER}" >> ${HOME}/.gradle/gradle.properties - echo "SAPCX_ARTEFACT_PASSWORD=${SAPCX_ARTEFACT_PASSWORD}" >> ${HOME}/.gradle/gradle.properties + echo "CXDEV_ARTEFACT_BASEURL=${CXDEV_ARTEFACT_BASEURL}" >> ${HOME}/.gradle/gradle.properties + echo "CXDEV_ARTEFACT_USER=${CXDEV_ARTEFACT_USER}" >> ${HOME}/.gradle/gradle.properties + echo "CXDEV_ARTEFACT_PASSWORD=${CXDEV_ARTEFACT_PASSWORD}" >> ${HOME}/.gradle/gradle.properties - name: SAP Commerce environment run: | echo "HYBRIS_OPT_CONFIG_DIR=$GITHUB_WORKSPACE/core-customize/hybris/config/local-config" >> $GITHUB_ENV diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index d29f0a9f..3fad6f79 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -5,11 +5,11 @@ on: branches: [develop] paths: - "core-customize/manifest.json" - - "core-customize/hybris/bin/custom/sapcxtools/**/*.java" - - "core-customize/hybris/bin/custom/sapcxtools/**/*-beans.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/*-items.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/extensioninfo.xml" - - "core-customize/hybris/bin/custom/sapcxtools/**/external-dependencies.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/*.java" + - "core-customize/hybris/bin/custom/cxdevtools/**/*-beans.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/*-items.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/extensioninfo.xml" + - "core-customize/hybris/bin/custom/cxdevtools/**/external-dependencies.xml" pull_request: branches: [main, develop] workflow_dispatch: @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - extension: ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxenvconfig"] + extension: ["cxdevtoolkit", "cxdevbackoffice", "cxdevreporting", "cxdevenvconfig"] steps: - uses: actions/checkout@v4 - name: Set up JDK @@ -37,16 +37,16 @@ jobs: path: dependencies - name: SAP download config env: - SAPCX_ARTEFACT_BASEURL: ${{ secrets.SAPCX_ARTEFACT_BASEURL }} - SAPCX_ARTEFACT_USER: ${{ secrets.SAPCX_ARTEFACT_USER }} - SAPCX_ARTEFACT_PASSWORD: ${{ secrets.SAPCX_ARTEFACT_PASSWORD }} + CXDEV_ARTEFACT_BASEURL: ${{ secrets.CXDEV_ARTEFACT_BASEURL }} + CXDEV_ARTEFACT_USER: ${{ secrets.CXDEV_ARTEFACT_USER }} + CXDEV_ARTEFACT_PASSWORD: ${{ secrets.CXDEV_ARTEFACT_PASSWORD }} shell: bash run: | mkdir -p ${HOME}/.gradle echo "GRADLE_USER_HOME=${HOME}/.gradle" >> $GITHUB_ENV - echo "SAPCX_ARTEFACT_BASEURL=${SAPCX_ARTEFACT_BASEURL}" >> ${HOME}/.gradle/gradle.properties - echo "SAPCX_ARTEFACT_USER=${SAPCX_ARTEFACT_USER}" >> ${HOME}/.gradle/gradle.properties - echo "SAPCX_ARTEFACT_PASSWORD=${SAPCX_ARTEFACT_PASSWORD}" >> ${HOME}/.gradle/gradle.properties + echo "CXDEV_ARTEFACT_BASEURL=${CXDEV_ARTEFACT_BASEURL}" >> ${HOME}/.gradle/gradle.properties + echo "CXDEV_ARTEFACT_USER=${CXDEV_ARTEFACT_USER}" >> ${HOME}/.gradle/gradle.properties + echo "CXDEV_ARTEFACT_PASSWORD=${CXDEV_ARTEFACT_PASSWORD}" >> ${HOME}/.gradle/gradle.properties - name: SAP Commerce environment run: | echo "HYBRIS_OPT_CONFIG_DIR=$GITHUB_WORKSPACE/core-customize/hybris/config/local-config" >> $GITHUB_ENV diff --git a/.gitignore b/.gitignore index c0f255f8..1dc0c171 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,7 @@ core-customize/hybris/temp/ core-customize/hybris/data/ core-customize/hybris/config/local-config/ -# only allow sapcxtools extension +# only allow cxdevtools extension core-customize/hybris/bin/modules/ core-customize/hybris/bin/platform/ diff --git a/.java-version b/.java-version index 962d54c3..480d6e0d 100644 --- a/.java-version +++ b/.java-version @@ -1 +1 @@ -21.0.9-sapmchn \ No newline at end of file +21.0.10-sapmchn \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 382cf1ff..0b8f976b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing -## SAP CX Tools Contributor License Agreement +## CX DEV Tools Contributor License Agreement - You will only submit contributions where you have authored 100% of the content. - You will only submit contributions to which you have the necessary rights. This means that if you are employed you @@ -42,7 +42,7 @@ Please add the following lines to your pull request description: ```markdown --- -I hereby agree to the terms of the SAP CX Tools Contributor License Agreement. +I hereby agree to the terms of the CX DEV Tools Contributor License Agreement. ``` ## Coding Conventions @@ -120,64 +120,3 @@ Use American English spelling rules when writing documentation as well as for co - `WARN`: potential usage or configuration errors that should not halt execution - `INFO`: information the users might want to know but not by default - `DEBUG`: information the developers might want to know to understand execution - -## Extensions - -All of the extensions have their own repository and are integrated using `git subtree` into this repository or into project. This -procedure was choosen for two major reasons: - -1. A centralized repository holding defined releases of the individual extensions and guaranteeing the compatibility with the standard. -1. The individual extension repositories allow a clean integration into projects, i.e. direct integration of the source code. - -### How-to use - -In order to use an extension from the sapcx.tools you can either download the build artefact from our build pipeline (work in progress) or -integration the extension directly into your repository using git subtree. The following commands shall give you a guidance on how to -integration the extensions into your local repository. Keep in mind, that you need to run these commands from the root of your project. -For the sake of simplicity, we assume that you use the default CCv2 repository layout for your project: - -- The following command is used to add an extension "foobar" into your repository: -`git subtree add --squash --message="add extension foobar from SAP CX Tools" --prefix=core-customize/hybris/bin/custom/sapcxtools/foobar git@github.com:sapcxtools/foobar.git main` -- For future updates, please use the following command: -`git subtree pull --squash --message="update extension foobar from SAP CX Tools" --prefix=core-customize/hybris/bin/custom/sapcxtools/foobar git@github.com:sapcxtools/foobar.git main` -- If you want to push changes from the local repository into the extension, please use: -`git subtree push --prefix=core-customize/hybris/bin/custom/sapcxtools/foobar git@github.com:sapcxtools/foobar.git feature/` - -Please note, we typically use `--squash` to reduce the number of commits within your project repository. If you want the whole history -available in your project, feel free to leave out this parameter. Still, we do not recommend this. We also do not recommend to pull other -branches than main. This could lead to conflicts once you want to update back to main. - -### Guidelines for the individual extension repositories - -Before merging a feature into the `main` branch of an extension, a github workflow sends the feature-branch to the centralized repository. -Let's assume a new feature `feature/my-idea` was pushed via `git subtree push` into extension `foobar`. The workflow checks out the -centralized repository, and creates a branch called `foobar/feature/my-idea`. Then it performs a `git subtree pull` command without -`--squash` and pointing to the feature branch `feature/my-idea` from the `foobar` extension. It pushes the new branch to the centralized -repository. - -The centralized repository now also runs a github workflow that automatically creates a pull-request into the `develop` branch for this -feature. With that pull-request, the default workflows from the centralized repository are executed, verifying if everything is fine. In -addition, the repository maintainer will perform custom reviews and may ask you for changes. You can perform your changes within your -project repository and by pushing those to the extension repository `foobar` by updating your feature-branch `feature/my-idea`. This can -be done by running the same `git subtree push` command as before, after you have made your changes in the project repository. - -The github workflow will detect your updates and updates the feature-branch on the centralized repository by resetting it to the previous -state, typically develop, and run `git subtree pull` just like the first time. We need to reset the feature-branch `foobar/feature/my-idea` -first, otherwise we would get an additional merge commit for every update of the the feature-branch. - -Once the pull-request from feature-branch `foobar/feature/my-idea` was accepted and merged into `develop` the feature-branch `feature-my-idea` -will also be removed from the extensions repository. Another github workflow is triggered that automatically pulls the changes with the -`develop` branch of the centralized repository and updates the `develop` branch of the extensions repository by running: -`git subtree pull --squash --message="merge feature/my-idea into develop" --prefix=core-customize/hybris/bin/custom/sapcxtools/foobar git@github.com:sapcxtools/foobar.git develop` - -When the next version of SAP CX tools is released, the same action is done, all included extensions are triggered to also merge their -`develop` branches into their `main` branches, just like the centralized repository. After the release we recommend you to run an update -as mentioned above. Again, we do not recommend to skip the `--squash` option, as you will see all your commits twice in the history. - -__CAUTION:__ For those who use this repository itself to develop on features, please make sure that you do not push your changes from the -extensions to the extensions repositories using `git subtree push`. This will be done automatically for you, once your pull-request has -been accepted and merged into `develop`. Also make sure that you only use the pattern `feature/` for your feature-branches, so there -won't be any kind of conflicts with the feature-branches that have automatically been created. - -While this process seems to be complicated, it guarantees that all extensions included in SAP CX tools are interoperatable and work -individually, with only their own dependencies resolved. If you have questions, feel free to get in touch with us in the discussion board. diff --git a/LICENSE.md b/LICENSE.md index 7aff51ca..8ab94bdf 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [2023] [SAP CX Tools] + Copyright [2023] [CX DEV Tools] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 156b8c49..2a2118b7 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# SAP CX Workspace +# CX DEV Workspace -[![Build & Test](https://github.com/sapcxtools/workspace/actions/workflows/buildandtest.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/buildandtest.yml) -[![Code Analysis](https://github.com/sapcxtools/workspace/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/code-analysis.yml) -[![Code Coverage](https://codecov.io/gh/sapcxtools/workspace/branch/main/graph/badge.svg?token=F1BIK8R7NZ)](https://codecov.io/gh/sapcxtools/workspace) -[![Dependency Check](https://github.com/sapcxtools/workspace/actions/workflows/dependency-check.yml/badge.svg)](https://github.com/sapcxtools/workspace/actions/workflows/dependency-check.yml) +[![Build & Test](https://github.com/cxdevtools/workspace/actions/workflows/buildandtest.yml/badge.svg)](https://github.com/cxdevtools/workspace/actions/workflows/buildandtest.yml) +[![Code Analysis](https://github.com/cxdevtools/workspace/actions/workflows/code-analysis.yml/badge.svg)](https://github.com/cxdevtools/workspace/actions/workflows/code-analysis.yml) +[![Code Coverage](https://codecov.io/gh/cxdevtools/workspace/branch/main/graph/badge.svg?token=F1BIK8R7NZ)](https://codecov.io/gh/cxdevtools/workspace) +[![Dependency Check](https://github.com/cxdevtools/workspace/actions/workflows/dependency-check.yml/badge.svg)](https://github.com/cxdevtools/workspace/actions/workflows/dependency-check.yml) All extensions available in this repository are built with high test coverage and do not influence the behavior of your project without changes to your configuration. This is guaranteed and intended by design, because the extensions @@ -14,8 +14,8 @@ configuration parameter. ## Contributing Contributions are both welcomed and appreciated. For specific guidelines regarding contributions, please see -[CONTRIBUTING.md](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) in the root directory of the +[CONTRIBUTING.md](https://github.com/cxdevtools/workspace/blob/main/CONTRIBUTING.md) in the root directory of the project. Those willing to use milestone or SNAPSHOT releases are encouraged to file feature requests and bug reports -using the project's [issue tracker](https://github.com/sapcxtools/workspace/issues). Issues marked with an -`help wanted` label are specifically +using the project's [issue tracker](https://github.com/cxdevtools/workspace/issues). Issues marked with an +`help wanted` label are specifically targeted for community contributions. diff --git a/build.gradle.kts b/build.gradle.kts index 503d62fb..185c414e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("com.diffplug.spotless") version("8.1.0") + id("com.diffplug.spotless") version("8.2.1") } repositories { @@ -10,8 +10,8 @@ spotless { val importOrderConfigFile = project.file("core-customize/conventions/eclipse.importorder") val javaFormatterConfigFile = project.file("core-customize/conventions/eclipse-formatter-settings.xml") java { - target("core-customize/hybris/bin/custom/sapcxtools/**/*.java") - targetExclude("core-customize/hybris/bin/custom/sapcxtools/**/gensrc/**") + target("core-customize/hybris/bin/custom/cxdevtools/**/*.java") + targetExclude("core-customize/hybris/bin/custom/cxdevtools/**/gensrc/**") importOrderFile(importOrderConfigFile) eclipse().configFile(javaFormatterConfigFile) removeUnusedImports() diff --git a/ci/config/localextensions-template.xml b/ci/config/localextensions-template.xml index 0dbccaad..eced0c49 100644 --- a/ci/config/localextensions-template.xml +++ b/ci/config/localextensions-template.xml @@ -3,7 +3,7 @@ - + diff --git a/ci/config/testing-integration.properties b/ci/config/testing-integration.properties index 979be73f..051a9e60 100644 --- a/ci/config/testing-integration.properties +++ b/ci/config/testing-integration.properties @@ -1,8 +1,8 @@ -standalone.javaoptions=${tomcat.mem} -javaagent:${HYBRIS_BIN_DIR}/../../../ci/lib/jacocoagent.jar=includes=tools.sapcx.commerce.*,destfile=${HYBRIS_LOG_DIR}/junit/jacoco-integration.exec +standalone.javaoptions=${tomcat.mem} -javaagent:${HYBRIS_BIN_DIR}/../../../ci/lib/jacocoagent.jar=includes=me.cxdev.commerce.*,destfile=${HYBRIS_LOG_DIR}/junit/jacoco-integration.exec installed.tenants=junit -testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig -testclasses.packages=tools.sapcx.commerce.* +testclasses.extensions=cxdevtoolkit,cxdevbackoffice,cxdevreporting,cxdevenvconfig +testclasses.packages=me.cxdev.* testclasses.suppress.junit.tenant=false testclasses.reportdir=${HYBRIS_LOG_DIR}/junit/test-results/integration diff --git a/ci/config/testing-unit.properties b/ci/config/testing-unit.properties index da2a18e7..b370b8f8 100644 --- a/ci/config/testing-unit.properties +++ b/ci/config/testing-unit.properties @@ -1,8 +1,8 @@ -standalone.javaoptions=${tomcat.mem} -javaagent:${HYBRIS_BIN_DIR}/../../../ci/lib/jacocoagent.jar=includes=tools.sapcx.commerce.*,destfile=${HYBRIS_LOG_DIR}/junit/jacoco-unit.exec +standalone.javaoptions=${tomcat.mem} -javaagent:${HYBRIS_BIN_DIR}/../../../ci/lib/jacocoagent.jar=includes=me.cxdev.commerce.*,destfile=${HYBRIS_LOG_DIR}/junit/jacoco-unit.exec installed.tenants= -testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig -testclasses.packages=tools.sapcx.commerce.* +testclasses.extensions=cxdevtoolkit,cxdevbackoffice,cxdevreporting,cxdevenvconfig +testclasses.packages=me.cxdev.* testclasses.suppress.junit.tenant=true testclasses.reportdir=${HYBRIS_LOG_DIR}/junit/test-results/unit diff --git a/codecov.yml b/codecov.yml index 6b0e6a3f..820efb36 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,4 +1,4 @@ ignore: - - "core-customize/hybris/bin/custom/sapcxtools/**/backoffice/src/**/*" - - "core-customize/hybris/bin/custom/sapcxtools/**/gensrc/**/*" - - "core-customize/hybris/bin/custom/sapcxtools/**/testsrc/**/*" + - "core-customize/hybris/bin/custom/cxdevtools/**/backoffice/src/**/*" + - "core-customize/hybris/bin/custom/cxdevtools/**/gensrc/**/*" + - "core-customize/hybris/bin/custom/cxdevtools/**/testsrc/**/*" diff --git a/core-customize/build.gradle.kts b/core-customize/build.gradle.kts index 313039be..c264117a 100644 --- a/core-customize/build.gradle.kts +++ b/core-customize/build.gradle.kts @@ -13,6 +13,17 @@ plugins { `maven-publish` } +val solrVersionMap = mapOf( + /* + * version 8 unfortunately has a different download URL and is currently not working. But it is the version that is + * supplied with the standard zip, so we're fine unless the solr version is changed and then changed back in + * manifest.json + */ + "8.11" to "8.11.2", + "9.2" to "9.2.1", + "9.5" to "9.5.0" +) + val dependencyDir = "../dependencies" val workingDir = project.projectDir val binDir = "${workingDir}/hybris/bin" @@ -22,6 +33,13 @@ repositories { mavenCentral() } +val solrVersion = solrVersionMap[CCV2.manifest.solrVersion] ?: "9.2.1" +val solrServer: Configuration by configurations.creating + +dependencies { + solrServer("org.apache.solr:solr:${solrVersion}") +} + hybris { // what files should be deleted when cleaning up the platform? // (cloudhofolders will be downloaded by custom configuration) @@ -53,18 +71,49 @@ hybris { // When this mode is enabled, the bootstrapInclude configuration property is ignored. sparseBootstrap { enabled = true - alwaysIncluded = listOf() + alwaysIncluded = listOf("solrserver") } } +tasks.register("fetchSolr") { + src(uri("https://archive.apache.org/dist/solr/solr/${solrVersion}/solr-${solrVersion}.tgz")) + dest("${dependencyDir}/solr-${solrVersion}.tgz") + overwrite(false) +} + +val repackSolr = tasks.register("repackSolr") { + dependsOn("fetchSolr") + from(tarTree("${dependencyDir}/solr-${solrVersion}.tgz")) + archiveFileName = "solr-${solrVersion}.zip" + destinationDirectory = file(dependencyDir) +} + +publishing { + publications { + create("solr") { + groupId = "org.apache.solr" + artifactId = "solr" + version = solrVersion + + artifact(repackSolr.get().archiveFile) + } + } +} + +tasks.named("yinstallSolr") { + // this task is available because of the solr-publication above. + dependsOn("publishSolrPublicationToMavenLocal") +} + tasks.ybuild { + dependsOn("publishSolrPublicationToMavenLocal") group = "build" } -if (project.hasProperty("SAPCX_ARTEFACT_BASEURL") && project.hasProperty("SAPCX_ARTEFACT_USER") && project.hasProperty("SAPCX_ARTEFACT_PASSWORD")) { - val BASEURL = project.property("SAPCX_ARTEFACT_BASEURL") as String - val USER = project.property("SAPCX_ARTEFACT_USER") as String - val PASSWORD = project.property("SAPCX_ARTEFACT_PASSWORD") as String +if (project.hasProperty("CXDEV_ARTEFACT_BASEURL") && project.hasProperty("CXDEV_ARTEFACT_USER") && project.hasProperty("CXDEV_ARTEFACT_PASSWORD")) { + val BASEURL = project.property("CXDEV_ARTEFACT_BASEURL") as String + val USER = project.property("CXDEV_ARTEFACT_USER") as String + val PASSWORD = project.property("CXDEV_ARTEFACT_PASSWORD") as String val AUTHORIZATION = Base64.getEncoder().encodeToString((USER + ":" + PASSWORD).toByteArray()) val COMMERCE_VERSION = CCV2.manifest.effectiveVersion @@ -159,6 +208,7 @@ tasks.register("setupLocalDevelopment") { description = "Setup local development" dependsOn( "bootstrapPlatform", + "yinstallSolr", "generateLocalDeveloperProperties", "installManifestAddons", "enableModeltMock" diff --git a/core-customize/conventions/eclipse-formatter-settings.xml b/core-customize/conventions/eclipse-formatter-settings.xml index dec1ff27..c6fdbc93 100644 --- a/core-customize/conventions/eclipse-formatter-settings.xml +++ b/core-customize/conventions/eclipse-formatter-settings.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.gitignore b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/.gitignore similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.gitignore rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/.gitignore index bd0966d2..ca19572e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.gitignore +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/.gitignore @@ -7,7 +7,7 @@ testclasses eclipsebin gensrc -# .classpath files and lib folder in sapcxtools to ignore +# .classpath files and lib folder in cxdevtools to ignore .classpath lib/ diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/.project b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/.project similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/.project rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/.project index 83e275d6..1b0eb4f1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/.project +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/.project @@ -1,6 +1,6 @@ - sapcxbackoffice + cxdevbackoffice diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/LICENSE.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/LICENSE.md similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/LICENSE.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/LICENSE.md index 9776fe0d..8676c108 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/LICENSE.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/LICENSE.md @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [2025] [SAP CX Tools] + Copyright [2025] [CX DEV Tools] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/README.md similarity index 75% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/README.md index 41becfa1..bc93772e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/README.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/README.md @@ -1,11 +1,11 @@ -# SAP CX Backoffice +# CX DEV Backoffice -The `sapcxbackoffice` extension improves the experience with the SAP CX Backoffice Application. +The `cxdevbackoffice` extension improves the experience with the CX DEV Backoffice Application. ## FEATURE DESCRIPTION -This extension provides the common backoffice configuration for SAP CX Tools, e.g. -the base node in the tree navigation with the ID `sapcxtools_treenode_main`. +This extension provides the common backoffice configuration for CX DEV Tools, e.g. +the base node in the tree navigation with the ID `cxdevtools_treenode_main`. In addition, it contributes two major features to the backoffice application. @@ -26,12 +26,12 @@ be introduced for each and every relation that influences the sync status of an Instead, one can configure the relation by introducing a platform property with the following convention: -`sapcxbackoffice.sync.relateditems.=,,...` +`cxdevbackoffice.sync.relateditems.=,,...` For example, the following relations would be valid: -- `sapcxbackoffice.sync.relateditems.Product=mymedia,prospect,reference` -- `sapcxbackoffice.sync.relateditems.Category=heroProduct` +- `cxdevbackoffice.sync.relateditems.Product=mymedia,prospect,reference` +- `cxdevbackoffice.sync.relateditems.Category=heroProduct` ### How to activate and use @@ -47,13 +47,13 @@ For the sync status updates, one need to configure a property using the conventi | Parameter | Type | Description | |-----------|------|-------------| -| sapcxbackoffice.i18n.data.sortbyisocode | boolean | Order languages of localized fields by their ISO code in backoffice administration (default: false) | -| sapcxbackoffice.i18n.ui.locales | String | Limit UI languages for backoffice login. If empty, use all available languages (default: empty) | -| sapcxbackoffice.sync.relateditems.* | String | Sync status configuration for items with related items that should update the sync status (one line per type) | +| cxdevbackoffice.i18n.data.sortbyisocode | boolean | Order languages of localized fields by their ISO code in backoffice administration (default: false) | +| cxdevbackoffice.i18n.ui.locales | String | Limit UI languages for backoffice login. If empty, use all available languages (default: empty) | +| cxdevbackoffice.sync.relateditems.* | String | Sync status configuration for items with related items that should update the sync status (one line per type) | ## License _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2026, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, CX DEV Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java index 03558058..2261375d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev/commerce/backoffice/i18n/ConfigurableBackofficeLocaleService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.backoffice.i18n; +package me.cxdev.commerce.backoffice.i18n; import java.util.ArrayList; import java.util.Collections; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java index 50cf2bda..9e3da019 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/src/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/src/me/cxdev/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitor.java @@ -1,7 +1,6 @@ -package tools.sapcx.commerce.backoffice.sync; +package me.cxdev.commerce.backoffice.sync; import java.util.*; -import java.util.stream.Collectors; import de.hybris.platform.core.model.ItemModel; import de.hybris.platform.core.model.type.ComposedTypeModel; @@ -18,16 +17,16 @@ * be introduced for each and every relation that influences the sync status of an {@link ItemModel}. Instead, one can * configure the relation by introducing a platform property with the following convention: * - * sapcxbackoffice.sync.relateditems.=,,... + * cxdevbackoffice.sync.relateditems.=,,... * * For example, the following relations would be valid: - * sapcxbackoffice.sync.relateditems.Product=mymedia,prospect,reference - * sapcxbackoffice.sync.relateditems.Category=heroProduct + * cxdevbackoffice.sync.relateditems.Product=mymedia,prospect,reference + * cxdevbackoffice.sync.relateditems.Category=heroProduct * ... */ public class GenericItemSyncRelatedItemsVisitor implements ItemVisitor { @VisibleForTesting - protected static final String CXBACKOFFICE_SYNC_RELATEDITEMS = "sapcxbackoffice.sync.relateditems."; + protected static final String CXBACKOFFICE_SYNC_RELATEDITEMS = "cxdevbackoffice.sync.relateditems."; private ModelService modelService; private Map> attributes = new HashMap<>(); @@ -45,14 +44,14 @@ public List visit(ItemModel itemModel, List list, Map this.getAttributeAsList(itemModel, attr)) .filter(Objects::nonNull) .flatMap(Collection::stream) - .collect(Collectors.toList()); + .toList(); } private ArrayList getTypeCodesForItemModel(ItemModel itemModel) { ComposedTypeModel type = typeService.getComposedTypeForClass(itemModel.getClass()); List superTypes = CollectionUtils.emptyIfNull(type.getAllSuperTypes()).stream() .map(ComposedTypeModel::getCode) - .collect(Collectors.toList()); + .toList(); ArrayList typeCodes = new ArrayList<>(superTypes); typeCodes.add(type.getCode()); return typeCodes; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java index 4c67a02a..3978a404 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/i18n/ConfigurableBackofficeLocaleServiceTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.backoffice.i18n; +package me.cxdev.commerce.backoffice.i18n; import static org.assertj.core.api.Assertions.assertThat; @@ -11,8 +11,8 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.testdoubles.core.I18NServiceStubForLocales; -import tools.sapcx.commerce.toolkit.testing.testdoubles.user.UserServiceFake; +import me.cxdev.commerce.toolkit.testing.testdoubles.core.I18NServiceStubForLocales; +import me.cxdev.commerce.toolkit.testing.testdoubles.user.UserServiceFake; @UnitTest public class ConfigurableBackofficeLocaleServiceTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java index 8d4d2204..f20eb504 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/backoffice/testsrc/tools/sapcx/commerce/backoffice/sync/GenericItemSyncRelatedItemsVisitorTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.backoffice.sync; +package me.cxdev.commerce.backoffice.sync; import static org.hamcrest.Matchers.*; @@ -19,8 +19,8 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.testdoubles.core.DummyTypeService; -import tools.sapcx.commerce.toolkit.testing.testdoubles.core.InMemoryModelService; +import me.cxdev.commerce.toolkit.testing.testdoubles.core.DummyTypeService; +import me.cxdev.commerce.toolkit.testing.testdoubles.core.InMemoryModelService; @UnitTest public class GenericItemSyncRelatedItemsVisitorTests { diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/buildcallbacks.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/buildcallbacks.xml new file mode 100644 index 00000000..208d84b7 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/buildcallbacks.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml similarity index 64% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml index e6eb0c3a..b2c72f86 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml @@ -1,11 +1,10 @@ - - + + - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml index e07cc73d..a7d14274 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml @@ -1,8 +1,8 @@ 4.0.0 - tools.sapcx - sapcxbackoffice + me.cxdev + cxdevbackoffice 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/project.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/project.properties similarity index 63% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/project.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/project.properties index 4e8e6dfd..cb293e0d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/project.properties +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/project.properties @@ -1,16 +1,16 @@ # ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools +# Copyright (c) 2026 CX DEV Tools # ---------------------------------------------------------------------------- # Location of the file for the global platform spring application context -sapcxbackoffice.application-context=sapcxbackoffice-spring.xml +cxdevbackoffice.application-context=cxdevbackoffice-spring.xml # Order languages of localized fields by their ISO code in backoffice administration -sapcxbackoffice.i18n.data.sortbyisocode=false +cxdevbackoffice.i18n.data.sortbyisocode=false # Limit UI languages for backoffice login (use all if empty) -sapcxbackoffice.i18n.ui.locales= +cxdevbackoffice.i18n.ui.locales= # Sync status configuration for items with related items that should update the sync status, examples: -# sapcxbackoffice.sync.relateditems.Product=linkedProspectForDownloadMedia,referenceToOtherType -# sapcxbackoffice.sync.relateditems.Category=linkedHeroProduct +# cxdevbackoffice.sync.relateditems.Product=linkedProspectForDownloadMedia,referenceToOtherType +# cxdevbackoffice.sync.relateditems.Category=linkedHeroProduct diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/sapcxbackoffice_common.scss b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/cxdevbackoffice_common.scss similarity index 87% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/sapcxbackoffice_common.scss rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/cxdevbackoffice_common.scss index 835433d1..b0ab06ed 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/sapcxbackoffice_common.scss +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/cxdevbackoffice_common.scss @@ -1,8 +1,8 @@ @import "cockpitng-globals.scss"; -@import "./support/sapcxbackoffice-variables.scss"; +@import "./support/cxdevbackoffice-variables.scss"; /*Icons for explorer tree */ -div.yw-explorerTree .y-tree-icon-sapcxtools_treenode_main.y-tree-icon:before { +div.yw-explorerTree .y-tree-icon-cxdevtools_treenode_main.y-tree-icon:before { font-family: var(--bo-content-icon-font-family); content: "\e10c"; color: var(--bo-content-icon-color); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/support/sapcxbackoffice-variables.scss b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/support/cxdevbackoffice-variables.scss similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/cockpitng/cng/css/support/sapcxbackoffice-variables.scss rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cockpitng/cng/css/support/cxdevbackoffice-variables.scss diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-config.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-config.xml similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-config.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-config.xml index 3788d0f1..20146822 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-config.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-config.xml @@ -17,7 +17,7 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-spring.xml similarity index 86% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-spring.xml index 4e2604c1..9c8896d9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-spring.xml @@ -18,14 +18,14 @@ - + - - + + - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-widgets.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-widgets.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-backoffice-widgets.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-backoffice-widgets.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-spring.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/resources/sapcxbackoffice-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/resources/cxdevbackoffice-spring.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/src/tools/sapcx/commerce/backoffice/constants/CxBackofficeConstants.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/src/me/cxdev/commerce/backoffice/constants/CxBackofficeConstants.java similarity index 70% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/src/tools/sapcx/commerce/backoffice/constants/CxBackofficeConstants.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/src/me/cxdev/commerce/backoffice/constants/CxBackofficeConstants.java index c10edb17..fe84238a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/src/tools/sapcx/commerce/backoffice/constants/CxBackofficeConstants.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/src/me/cxdev/commerce/backoffice/constants/CxBackofficeConstants.java @@ -1,11 +1,11 @@ -package tools.sapcx.commerce.backoffice.constants; +package me.cxdev.commerce.backoffice.constants; /** * Global class for all constants. This class is required by the platform and * will not been used for any other purpose. */ public final class CxBackofficeConstants { - public static final String EXTENSIONNAME = "sapcxbackoffice"; + public static final String EXTENSIONNAME = "cxdevbackoffice"; private CxBackofficeConstants() { // empty to avoid instantiating this constant class diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/testsrc/tools/sapcx/commerce/backoffice/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/testsrc/me/cxdev/commerce/backoffice/config/ExtensionConfigurationTests.java similarity index 57% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/testsrc/tools/sapcx/commerce/backoffice/config/ExtensionConfigurationTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/testsrc/me/cxdev/commerce/backoffice/config/ExtensionConfigurationTests.java index 2d13e2ff..d8513071 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/testsrc/tools/sapcx/commerce/backoffice/config/ExtensionConfigurationTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/testsrc/me/cxdev/commerce/backoffice/config/ExtensionConfigurationTests.java @@ -1,19 +1,19 @@ -package tools.sapcx.commerce.backoffice.config; +package me.cxdev.commerce.backoffice.config; import de.hybris.bootstrap.annotations.UnitTest; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; +import me.cxdev.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; @UnitTest public class ExtensionConfigurationTests { @Test public void extensionConfiguration() { InstalledExtensionVerifier.verifier() - .requires("sapcxbackoffice") + .requires("cxdevbackoffice") .requires("backoffice") - .requires("sapcommercetoolkit") + .requires("cxdevtoolkit") .verify(); } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/.gitignore b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/.gitignore similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/.gitignore rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/.gitignore index bd0966d2..ca19572e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/.gitignore +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/.gitignore @@ -7,7 +7,7 @@ testclasses eclipsebin gensrc -# .classpath files and lib folder in sapcxtools to ignore +# .classpath files and lib folder in cxdevtools to ignore .classpath lib/ diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/.project similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/.project index 983eea65..70b27ace 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/.project +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/.project @@ -1,6 +1,6 @@ - sapcxenvconfig + cxdevenvconfig diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/LICENSE.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/LICENSE.md similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/LICENSE.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/LICENSE.md index 9776fe0d..8676c108 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/LICENSE.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/LICENSE.md @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [2025] [SAP CX Tools] + Copyright [2025] [CX DEV Tools] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/README.md similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/README.md index 5bf0672b..0e13ca42 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/README.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/README.md @@ -1,6 +1,6 @@ -# SAP CX Environment Configuration +# CX DEV Environment Configuration -The `sapcxenvconfig` extension provides core implementations to provide environment specific configuration +The `cxdevenvconfig` extension provides core implementations to provide environment specific configuration to the Spartacus frontend. SAP does not deliver any solution to this topic, see also the long running thread and discussion going on at https://github.com/SAP/spartacus/issues/5772 (since 2018!). @@ -16,11 +16,11 @@ environment specific base, solving the issue above. ### How to activate and use To activate the functionality, one needs to set the configuration parameters accordingly for each -environment, i.e. the `sapcxenvconfig.environment.id` and `sapcxenvconfig.environment.name` property +environment, i.e. the `cxdevenvconfig.environment.id` and `cxdevenvconfig.environment.name` property which are set to values used for local development by default. In addition, the desired frontend configuration properties needs to be added as properties, each -prefixed with `sapcxenvconfig.frontend.` (see an example below). +prefixed with `cxdevenvconfig.frontend.` (see an example below). In addition to the backend configuration, the composable storefront needs to be extended with a config factory, typically in the `custom-config.module.ts` module file: @@ -30,7 +30,7 @@ config factory, typically in the `custom-config.module.ts` module file: import { Meta } from '@angular/platform-browser'; import { XhrFactory } from '@angular/common'; import { provideConfigFactory } from "@spartacus/core"; -import { securedConfigChunkFromBackend } from "./sapcxenvconfig"; +import { securedConfigChunkFromBackend } from "./cxdevenvconfig"; @NgModule({ // ... @@ -41,7 +41,7 @@ import { securedConfigChunkFromBackend } from "./sapcxenvconfig"; }) ``` -The imported file `sapcxenvconfig.ts` should be created next to the `custom-config.module.ts` and +The imported file `cxdevenvconfig.ts` should be created next to the `custom-config.module.ts` and contains the following content (complete file shown): ```typescript @@ -113,11 +113,11 @@ native HTTP request functionality of the browsers. | Parameter | Type | Description | |-----------|------|-------------| -| sapcxenvconfig.environment.id | String | the ID of the environment (default: L1) | -| sapcxenvconfig.environment.name | String | the name of the environment (default: Local Development) | -| sapcxenvconfig.frontend.mykey | String | specifies a frontend configuration property with key `mykey` and a value given to the property | -| sapcxenvconfig.frontend.myobject.variable1 | String | specifies a frontend configuration property within context `myobject` with key `variable1` and a value given to the property | -| sapcxenvconfig.frontend.myobject.variable2 | String | specifies a frontend configuration property within context `myobject` with key `variable2` and a value given to the property | +| cxdevenvconfig.environment.id | String | the ID of the environment (default: L1) | +| cxdevenvconfig.environment.name | String | the name of the environment (default: Local Development) | +| cxdevenvconfig.frontend.mykey | String | specifies a frontend configuration property with key `mykey` and a value given to the property | +| cxdevenvconfig.frontend.myobject.variable1 | String | specifies a frontend configuration property within context `myobject` with key `variable1` and a value given to the property | +| cxdevenvconfig.frontend.myobject.variable2 | String | specifies a frontend configuration property within context `myobject` with key `variable2` and a value given to the property | #### Example configuration @@ -125,16 +125,16 @@ native HTTP request functionality of the browsers. As an example, the following frontend configuration properties will result in the JSON object returned as shown below: ``` -sapcxenvconfig.environment.id=P1 -sapcxenvconfig.environment.name=Production -sapcxenvconfig.frontend.domain.type=SampleType -sapcxenvconfig.frontend.domain.object1.id=obj1 -sapcxenvconfig.frontend.domain.object1.name=Any Object -sapcxenvconfig.frontend.domain.object2.id=obj2 -sapcxenvconfig.frontend.domain.object2.name=Other Object -sapcxenvconfig.frontend.domain.other.key=value -sapcxenvconfig.frontend.toplevel.key=value -sapcxenvconfig.frontend.toplevel.enabled=true +cxdevenvconfig.environment.id=P1 +cxdevenvconfig.environment.name=Production +cxdevenvconfig.frontend.domain.type=SampleType +cxdevenvconfig.frontend.domain.object1.id=obj1 +cxdevenvconfig.frontend.domain.object1.name=Any Object +cxdevenvconfig.frontend.domain.object2.id=obj2 +cxdevenvconfig.frontend.domain.object2.name=Other Object +cxdevenvconfig.frontend.domain.other.key=value +cxdevenvconfig.frontend.toplevel.key=value +cxdevenvconfig.frontend.toplevel.enabled=true ``` ```json @@ -165,10 +165,10 @@ sapcxenvconfig.frontend.toplevel.enabled=true ``` Another example for configuring OAuth with Auth0 within the frontend can be found in the documentation of the -`sapcxenvconfig` extension. +`cxdevenvconfig` extension. ## License _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2026, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, CX DEV Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml similarity index 75% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml index e9fca2ab..550d9989 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml @@ -1,8 +1,8 @@ + name="cxdevenvconfig" version="5.0.0-snapshot" usemaven="true"> - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml index 86512d38..626b6b91 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml @@ -1,8 +1,8 @@ 4.0.0 - tools.sapcx - sapcxenvconfig + me.cxdev + cxdevenvconfig 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/project.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/project.properties similarity index 74% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/project.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/project.properties index 4b3b6280..3679c74c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/project.properties +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/project.properties @@ -1,9 +1,9 @@ # ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools +# Copyright (c) 2026 CX DEV Tools # ---------------------------------------------------------------------------- # Location of the file for the global platform spring application context -sapcxenvconfig.application-context=sapcxenvconfig-spring.xml +cxdevenvconfig.application-context=cxdevenvconfig-spring.xml ############################################################################## # Environment specific frontend configuration @@ -12,7 +12,7 @@ sapcxenvconfig.application-context=sapcxenvconfig-spring.xml # environment.name - the name of the environment (default: Local Development) # # Frontend configuration properties (for an example, please see README.md) -# sapcxenvconfig.frontend.toplevel.key=value (optional) +# cxdevenvconfig.frontend.toplevel.key=value (optional) ############################################################################## -sapcxenvconfig.environment.id=L1 -sapcxenvconfig.environment.name=Local Development +cxdevenvconfig.environment.id=L1 +cxdevenvconfig.environment.name=Local Development diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-beans.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-beans.xml similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-beans.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-beans.xml index 9ee96182..d1b5f999 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-beans.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-beans.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-spring.xml similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-spring.xml index ff530059..699266b4 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/sapcxenvconfig-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/cxdevenvconfig-spring.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/occ/v2/sapcxenvconfigocc/web/spring/sapcxenvconfig-web-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/occ/v2/cxdevenvconfigocc/web/spring/cxdevenvconfig-web-spring.xml similarity index 88% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/occ/v2/sapcxenvconfigocc/web/spring/sapcxenvconfig-web-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/occ/v2/cxdevenvconfigocc/web/spring/cxdevenvconfig-web-spring.xml index 8ce6ad6c..afc910f0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/resources/occ/v2/sapcxenvconfigocc/web/spring/sapcxenvconfig-web-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/resources/occ/v2/cxdevenvconfigocc/web/spring/cxdevenvconfig-web-spring.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/constants/CxEnvConfigConstants.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/constants/CxEnvConfigConstants.java similarity index 63% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/constants/CxEnvConfigConstants.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/constants/CxEnvConfigConstants.java index 09329820..46eef2b4 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/constants/CxEnvConfigConstants.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/constants/CxEnvConfigConstants.java @@ -1,11 +1,10 @@ -package tools.sapcx.commerce.config.constants; +package me.cxdev.commerce.config.constants; @SuppressWarnings({ "deprecation", "squid:CallToDeprecatedMethod" }) public class CxEnvConfigConstants extends GeneratedCxEnvConfigConstants { - public static final String EXTENSIONNAME = "sapcxenvconfig"; + public static final String EXTENSIONNAME = "cxdevenvconfig"; private CxEnvConfigConstants() { // empty } - } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/controller/FrontendConfigurationController.java similarity index 87% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/controller/FrontendConfigurationController.java index dd1bc183..24adfa33 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/controller/FrontendConfigurationController.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/controller/FrontendConfigurationController.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.config.controller; +package me.cxdev.commerce.config.controller; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -7,10 +7,9 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import tools.sapcx.commerce.config.FrontendConfigurationWsDto; -import tools.sapcx.commerce.config.frontend.FrontendConfigurationService; - import jakarta.annotation.Resource; +import me.cxdev.commerce.config.FrontendConfigurationWsDto; +import me.cxdev.commerce.config.frontend.FrontendConfigurationService; @RestController @RequestMapping(value = "/{baseSiteId}/configuration") diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java index 41cee986..fae650df 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.config.frontend; +package me.cxdev.commerce.config.frontend; import java.nio.charset.Charset; import java.util.ArrayList; @@ -10,9 +10,9 @@ import pl.jalokim.propertiestojson.util.PropertiesToJsonConverterBuilder; public class EnvironmentSpecificFrontendConfigurationService implements FrontendConfigurationService { - static final String ENVIRONMENT_ID_CONFIGURATION_KEY = "sapcxenvconfig.environment.id"; - static final String ENVIRONMENT_NAME_CONFIGURATION_KEY = "sapcxenvconfig.environment.name"; - static final String FRONTEND_CONFIGURATION_PREFIX = "sapcxenvconfig.frontend"; + static final String ENVIRONMENT_ID_CONFIGURATION_KEY = "cxdevenvconfig.environment.id"; + static final String ENVIRONMENT_NAME_CONFIGURATION_KEY = "cxdevenvconfig.environment.name"; + static final String FRONTEND_CONFIGURATION_PREFIX = "cxdevenvconfig.frontend"; private ConfigurationService configurationService; private int generatedHashCode = -1; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/frontend/FrontendConfigurationService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/frontend/FrontendConfigurationService.java similarity index 76% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/frontend/FrontendConfigurationService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/frontend/FrontendConfigurationService.java index 1afae2fd..3e5dece1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/src/tools/sapcx/commerce/config/frontend/FrontendConfigurationService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/src/me/cxdev/commerce/config/frontend/FrontendConfigurationService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.config.frontend; +package me.cxdev.commerce.config.frontend; public interface FrontendConfigurationService { String getEnvironmentId(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/testsrc/me/cxdev/commerce/config/frontend/ConfigurationServiceFake.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/testsrc/me/cxdev/commerce/config/frontend/ConfigurationServiceFake.java index b022ab54..1161b201 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/ConfigurationServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/testsrc/me/cxdev/commerce/config/frontend/ConfigurationServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.config.frontend; +package me.cxdev.commerce.config.frontend; import de.hybris.platform.servicelayer.config.ConfigurationService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/testsrc/me/cxdev/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java similarity index 88% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/testsrc/me/cxdev/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java index f6361028..5b0190c9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/testsrc/tools/sapcx/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/testsrc/me/cxdev/commerce/config/frontend/EnvironmentSpecificFrontendConfigurationServiceTests.java @@ -1,9 +1,9 @@ -package tools.sapcx.commerce.config.frontend; +package me.cxdev.commerce.config.frontend; +import static me.cxdev.commerce.config.frontend.EnvironmentSpecificFrontendConfigurationService.ENVIRONMENT_ID_CONFIGURATION_KEY; +import static me.cxdev.commerce.config.frontend.EnvironmentSpecificFrontendConfigurationService.ENVIRONMENT_NAME_CONFIGURATION_KEY; +import static me.cxdev.commerce.config.frontend.EnvironmentSpecificFrontendConfigurationService.FRONTEND_CONFIGURATION_PREFIX; import static org.assertj.core.api.Assertions.assertThat; -import static tools.sapcx.commerce.config.frontend.EnvironmentSpecificFrontendConfigurationService.ENVIRONMENT_ID_CONFIGURATION_KEY; -import static tools.sapcx.commerce.config.frontend.EnvironmentSpecificFrontendConfigurationService.ENVIRONMENT_NAME_CONFIGURATION_KEY; -import static tools.sapcx.commerce.config.frontend.EnvironmentSpecificFrontendConfigurationService.FRONTEND_CONFIGURATION_PREFIX; import java.util.Map; @@ -19,7 +19,7 @@ public class EnvironmentSpecificFrontendConfigurationServiceTests { @Test public void withNoPropertiesSet_returnEmptyJsonObject() { - setupService(Map.of("sapcxenvconfig.unknown.key", "value")); + setupService(Map.of("cxdevenvconfig.unknown.key", "value")); // @formatter:off String frontendConfiguration = service.getFrontendConfiguration(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/.gitignore b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/.gitignore similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/.gitignore rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/.gitignore index bd0966d2..ca19572e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/.gitignore +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/.gitignore @@ -7,7 +7,7 @@ testclasses eclipsebin gensrc -# .classpath files and lib folder in sapcxtools to ignore +# .classpath files and lib folder in cxdevtools to ignore .classpath lib/ diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/.project b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/.project similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/.project rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/.project index 45b9753c..57cfb0e0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/.project +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/.project @@ -1,6 +1,6 @@ - sapcxreporting + cxdevreporting diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/LICENSE.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/LICENSE.md similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/LICENSE.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/LICENSE.md index 9776fe0d..8676c108 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/LICENSE.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/LICENSE.md @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [2025] [SAP CX Tools] + Copyright [2025] [CX DEV Tools] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/README.md similarity index 83% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/README.md index aff6b8b8..3368577d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/README.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/README.md @@ -1,6 +1,6 @@ -# SAP CX Reporting +# CX DEV Reporting -The `sapcxreporting` extension provides reporting capabilities within the Backoffice. With support of flexible search queries a report +The `cxdevreporting` extension provides reporting capabilities within the Backoffice. With support of flexible search queries a report configuration with dynamic configuration properties, i.e. one can use named properties within the query and link them within the backoffice application to existing objects like products, categories, catalog versions, user or groups, and configuration values from the properties. @@ -46,7 +46,7 @@ The configuration of a report should be self-explaining: You can provide your own Subclasses of `QueryReportConfigurationParameter` to support your customer project with additional lookup capabilities on custom objects, e.g. special item types introduces by the project team. To get an example, have a look into the -`sapcxreporting-items.xml` file to see how it was done for some standard types. +`cxdevreporting-items.xml` file to see how it was done for some standard types. ### Known limitations of the implementation: - with large result sets the POI library reaches its limitations, use CSV as a fallback @@ -55,16 +55,16 @@ capabilities on custom objects, e.g. special item types introduces by the projec | Parameter | Type | Description | |-----------|------|-------------| -| sapcxreporting.report.format.csv.encoding | character | default option for new reports, default: `UTF-8` | -| sapcxreporting.report.format.csv.commentchar | character | default option for new reports, default: `#` | -| sapcxreporting.report.format.csv.fieldseparator | character | default option for new reports, default: `;` | -| sapcxreporting.report.format.csv.textseparator | character | default option for new reports, default: `"` | -| sapcxreporting.report.format.csv.linebreak | character | default option for new reports, default: `\n` | -| sapcxreporting.report.format.excel.highlightheader | boolean | default option for new reports, default: `false` | -| sapcxreporting.report.format.excel.alternatinglines | boolean | default option for new reports, default: `false` | -| sapcxreporting.report.format.excel.freezeheader | boolean | default option for new reports, default: `true` | -| sapcxreporting.report.format.excel.activatefilter | boolean | default option for new reports, default: `true` | -| sapcxreporting.report.format.excel.autosizecolumns | boolean | default option for new reports, default: `true` | +| cxdevreporting.report.format.csv.encoding | character | default option for new reports, default: `UTF-8` | +| cxdevreporting.report.format.csv.commentchar | character | default option for new reports, default: `#` | +| cxdevreporting.report.format.csv.fieldseparator | character | default option for new reports, default: `;` | +| cxdevreporting.report.format.csv.textseparator | character | default option for new reports, default: `"` | +| cxdevreporting.report.format.csv.linebreak | character | default option for new reports, default: `\n` | +| cxdevreporting.report.format.excel.highlightheader | boolean | default option for new reports, default: `false` | +| cxdevreporting.report.format.excel.alternatinglines | boolean | default option for new reports, default: `false` | +| cxdevreporting.report.format.excel.freezeheader | boolean | default option for new reports, default: `true` | +| cxdevreporting.report.format.excel.activatefilter | boolean | default option for new reports, default: `true` | +| cxdevreporting.report.format.excel.autosizecolumns | boolean | default option for new reports, default: `true` | @@ -72,4 +72,4 @@ capabilities on custom objects, e.g. special item types introduces by the projec _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2026, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, CX DEV Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/email-templates/messages.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/scss/cxdevreporting-variables.scss similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/email-templates/messages.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/scss/cxdevreporting-variables.scss diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/definition.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/definition.xml similarity index 67% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/definition.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/definition.xml index c0b3d2f1..cfad7465 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/definition.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/definition.xml @@ -1,13 +1,13 @@ - Download Report Executes the query and downloads the generated report. - SAP CX Tools + CX DEV Tools 1.0 - tools.sapcx.commerce.reporting.backoffice.action.ExecuteReportAction - tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel + me.cxdev.commerce.reporting.backoffice.action.ExecuteReportAction + me.cxdev.commerce.reporting.model.QueryReportConfigurationModel java.lang.Object icons/icon_action_exportreport_default.png icons/icon_action_exportreport_hover.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_default.png b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_default.png similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_default.png rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_default.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_disabled.png b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_disabled.png similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_disabled.png rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_disabled.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_hover.png b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_hover.png similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_hover.png rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/icons/icon_action_exportreport_hover.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/labels/labels_de.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels_de.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/labels/labels_de.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels_en.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/labels/labels_en.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels_en.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/executereport/labels/labels_en.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/definition.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/definition.xml similarity index 67% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/definition.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/definition.xml index 9c53f00a..2f6eaf72 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/definition.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/definition.xml @@ -1,13 +1,13 @@ - Validate Report Executes the query and verifies if it is valid. - SAP CX Tools + CX DEV Tools 1.0 - tools.sapcx.commerce.reporting.backoffice.action.ValidateReportAction - tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel + me.cxdev.commerce.reporting.backoffice.action.ValidateReportAction + me.cxdev.commerce.reporting.model.QueryReportConfigurationModel java.lang.Object icons/icon_action_validatereport_default.png icons/icon_action_validatereport_hover.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_default.png b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_default.png similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_default.png rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_default.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_disabled.png b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_disabled.png similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_disabled.png rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_disabled.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_hover.png b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_hover.png similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_hover.png rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/icons/icon_action_validatereport_hover.png diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_de.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_de.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_de.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_en.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_en.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_en.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/resources/widgets/actions/validatereport/labels/labels_en.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/src/me/cxdev/commerce/reporting/backoffice/action/ExecuteReportAction.java similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/src/me/cxdev/commerce/reporting/backoffice/action/ExecuteReportAction.java index 4b99d9ec..98866be8 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ExecuteReportAction.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/src/me/cxdev/commerce/reporting/backoffice/action/ExecuteReportAction.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.backoffice.action; +package me.cxdev.commerce.reporting.backoffice.action; import static org.apache.commons.lang3.StringUtils.defaultIfBlank; @@ -22,13 +22,12 @@ import org.zkoss.zul.Filedownload; import org.zkoss.zul.Messagebox; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.report.ReportService; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.FlexibleSearchGenericSearchService; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; - import jakarta.annotation.Resource; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.report.ReportService; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.FlexibleSearchGenericSearchService; +import me.cxdev.commerce.reporting.search.GenericSearchResult; public class ExecuteReportAction implements CockpitAction { private static final Logger LOG = LoggerFactory.getLogger(ExecuteReportAction.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/src/me/cxdev/commerce/reporting/backoffice/action/ValidateReportAction.java similarity index 85% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/src/me/cxdev/commerce/reporting/backoffice/action/ValidateReportAction.java index d4c527f1..4e311964 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/src/tools/sapcx/commerce/reporting/backoffice/action/ValidateReportAction.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/src/me/cxdev/commerce/reporting/backoffice/action/ValidateReportAction.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.backoffice.action; +package me.cxdev.commerce.reporting.backoffice.action; import java.text.MessageFormat; import java.util.Map; @@ -11,12 +11,11 @@ import org.slf4j.LoggerFactory; import org.zkoss.zhtml.Messagebox; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.report.ReportService; -import tools.sapcx.commerce.reporting.search.FlexibleSearchGenericSearchService; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; - import jakarta.annotation.Resource; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.report.ReportService; +import me.cxdev.commerce.reporting.search.FlexibleSearchGenericSearchService; +import me.cxdev.commerce.reporting.search.GenericSearchResult; public class ValidateReportAction implements CockpitAction { private static final Logger LOG = LoggerFactory.getLogger(ValidateReportAction.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/testsrc/tools/sapcx/commerce/reporting/backoffice/.gitkeep b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/testsrc/tools/sapcx/commerce/reporting/backoffice/.gitkeep similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/testsrc/tools/sapcx/commerce/reporting/backoffice/.gitkeep rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/backoffice/testsrc/tools/sapcx/commerce/reporting/backoffice/.gitkeep diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml similarity index 67% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml index 218d51d9..424199db 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml @@ -1,12 +1,11 @@ - + - + - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml index 2a776a7c..8ad21e60 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml @@ -1,8 +1,8 @@ 4.0.0 - tools.sapcx - sapcxreporting + me.cxdev + cxdevreporting 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/project.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/project.properties new file mode 100644 index 00000000..d65cf311 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/project.properties @@ -0,0 +1,26 @@ +# ---------------------------------------------------------------------------- +# Copyright (c) 2026 CX DEV Tools +# ---------------------------------------------------------------------------- + +# Location of the file for the global platform spring application context +cxdevreporting.application-context=cxdevreporting-spring.xml + +# Report job config +cxdevreporting.report.job.code=reportGeneratorJobPerformable + +# CSV format settings +cxdevreporting.report.format.csv.encoding=UTF-8 +cxdevreporting.report.format.csv.commentchar=# +cxdevreporting.report.format.csv.fieldseparator=; +cxdevreporting.report.format.csv.textseparator=" +cxdevreporting.report.format.csv.linebreak=\n + +# Excel format settings +cxdevreporting.report.format.excel.highlightheader=false +cxdevreporting.report.format.excel.alternatinglines=false +cxdevreporting.report.format.excel.freezeheader=true +cxdevreporting.report.format.excel.activatefilter=true +cxdevreporting.report.format.excel.autosizecolumns=true + +# Sample data +cxdevtoolkit.impeximport.sampledata.8100.reports=/cxdevreporting/sampledata/default-reports.impex \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-config.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-config.xml similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-config.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-config.xml index 2d6ec488..d9a83a8d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-config.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-config.xml @@ -17,13 +17,13 @@ - - - - - - - + + + + + + + @@ -108,8 +108,8 @@ - - + + @@ -147,8 +147,8 @@ - - + + @@ -163,9 +163,9 @@ - - - + + + @@ -187,7 +187,7 @@ - + rows @@ -198,15 +198,15 @@ - - + + - + showOptionalField @@ -239,8 +239,8 @@ - - + + diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_de.properties new file mode 100644 index 00000000..001561e3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_de.properties @@ -0,0 +1,11 @@ +cxdevreporting.treenode.reporting=Reporting +cxdevreporting.treenode.reporting.parameters=Parameter +cxdevreporting.backoffice.tab.report=Bericht +cxdevreporting.backoffice.section.report=Konfiguration +cxdevreporting.backoffice.panel.general=Allgemein +cxdevreporting.backoffice.panel.query=Anfrage +cxdevreporting.backoffice.tab.reportformat=Formatierung +cxdevreporting.backoffice.section.reportformat.csv=CSV Einstellungen +cxdevreporting.backoffice.section.reportformat.excel=Excel Einstellungen +cxdevreporting.backoffice.tab.reportschedules=Zeitplan +cxdevreporting.backoffice.section.reportschedules=Einstellungen \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_en.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_en.properties new file mode 100644 index 00000000..1e1fa24c --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-labels/labels_en.properties @@ -0,0 +1,11 @@ +cxdevreporting.treenode.reporting=Reporting +cxdevreporting.treenode.reporting.parameters=Parameter +cxdevreporting.backoffice.tab.report=Report +cxdevreporting.backoffice.section.report=Configuration +cxdevreporting.backoffice.panel.general=General +cxdevreporting.backoffice.panel.query=Query +cxdevreporting.backoffice.tab.reportformat=Format +cxdevreporting.backoffice.section.reportformat.csv=CSV settings +cxdevreporting.backoffice.section.reportformat.excel=Excel settings +cxdevreporting.backoffice.tab.reportschedules=Schedules +cxdevreporting.backoffice.section.reportschedules=Settings \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-spring.xml similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-spring.xml index da4ef30b..a686650b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-backoffice-spring.xml @@ -4,7 +4,7 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-beans.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-beans.xml similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-beans.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-beans.xml index e870aae4..8198ad43 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-beans.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-beans.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-items.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-items.xml similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-items.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-items.xml index a605e982..20d271a8 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-items.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-items.xml @@ -68,7 +68,7 @@ - tools.sapcx.commerce.reporting.enums.ReportExportFormat.EXCEL + me.cxdev.commerce.reporting.enums.ReportExportFormat.EXCEL @@ -92,43 +92,43 @@ - de.hybris.platform.util.Config.getString("sapcxreporting.report.format.csv.encoding", "UTF-8") + de.hybris.platform.util.Config.getString("cxdevreporting.report.format.csv.encoding", "UTF-8") - de.hybris.platform.util.Config.getChar("sapcxreporting.report.format.csv.commentchar", '#') + de.hybris.platform.util.Config.getChar("cxdevreporting.report.format.csv.commentchar", '#') - de.hybris.platform.util.Config.getChar("sapcxreporting.report.format.csv.fieldseparator", ';') + de.hybris.platform.util.Config.getChar("cxdevreporting.report.format.csv.fieldseparator", ';') - de.hybris.platform.util.Config.getChar("sapcxreporting.report.format.csv.textseparator", '"') + de.hybris.platform.util.Config.getChar("cxdevreporting.report.format.csv.textseparator", '"') - de.hybris.platform.util.Config.getString("sapcxreporting.report.format.csv.linebreak", "\n") + de.hybris.platform.util.Config.getString("cxdevreporting.report.format.csv.linebreak", "\n") - de.hybris.platform.util.Config.getBoolean("sapcxreporting.report.format.excel.highlightheader", false) + de.hybris.platform.util.Config.getBoolean("cxdevreporting.report.format.excel.highlightheader", false) - de.hybris.platform.util.Config.getBoolean("sapcxreporting.report.format.excel.freezeheader", false) + de.hybris.platform.util.Config.getBoolean("cxdevreporting.report.format.excel.freezeheader", false) - de.hybris.platform.util.Config.getBoolean("sapcxreporting.report.format.excel.activatefilter", false) + de.hybris.platform.util.Config.getBoolean("cxdevreporting.report.format.excel.activatefilter", false) - de.hybris.platform.util.Config.getBoolean("sapcxreporting.report.format.excel.autosizecolumns", false) + de.hybris.platform.util.Config.getBoolean("cxdevreporting.report.format.excel.autosizecolumns", false) - de.hybris.platform.util.Config.getBoolean("sapcxreporting.report.format.excel.alternatinglines", false) + de.hybris.platform.util.Config.getBoolean("cxdevreporting.report.format.excel.alternatinglines", false) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-spring.xml similarity index 70% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-spring.xml index d8a6ac1b..d8516bcb 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting-spring.xml @@ -7,7 +7,7 @@ http://www.springframework.org/schema/util/spring-util.xsd"> - + @@ -17,27 +17,27 @@ - + + key-type="me.cxdev.commerce.reporting.enums.ReportExportFormat" + value-type="me.cxdev.commerce.reporting.generator.ReportGenerator"> - + - + - + @@ -46,24 +46,24 @@ - + + value-type="me.cxdev.commerce.reporting.search.AbstractGenericSearchFacade"> - + - + - + @@ -71,7 +71,7 @@ - + @@ -79,5 +79,5 @@ - + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting/sampledata/default-reports.impex b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting/sampledata/default-reports.impex similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting/sampledata/default-reports.impex rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/cxdevreporting/sampledata/default-reports.impex diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/localization/cxdevreporting-locales_de.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales_de.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/localization/cxdevreporting-locales_de.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales_en.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/localization/cxdevreporting-locales_en.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales_en.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/resources/localization/cxdevreporting-locales_en.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/constants/CxReportingConstants.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/constants/CxReportingConstants.java similarity index 73% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/constants/CxReportingConstants.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/constants/CxReportingConstants.java index b79e63e9..6887f24b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/constants/CxReportingConstants.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/constants/CxReportingConstants.java @@ -1,11 +1,11 @@ -package tools.sapcx.commerce.reporting.constants; +package me.cxdev.commerce.reporting.constants; /** * Global class for all constants. This class is required by the platform and * will not been used for any other purpose. */ public final class CxReportingConstants extends GeneratedCxReportingConstants { - public static final String EXTENSIONNAME = "sapcxreporting"; + public static final String EXTENSIONNAME = "cxdevreporting"; private CxReportingConstants() { // empty to avoid instantiating this constant class diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java index cbbd5fb3..a6553a16 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/domain/ReportGenerationScheduleInitDefaultInterceptor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.domain; +package me.cxdev.commerce.reporting.domain; import de.hybris.platform.servicelayer.exceptions.AmbiguousIdentifierException; import de.hybris.platform.servicelayer.exceptions.ModelNotFoundException; @@ -10,7 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.sapcx.commerce.reporting.model.ReportGenerationScheduleModel; +import me.cxdev.commerce.reporting.model.ReportGenerationScheduleModel; public class ReportGenerationScheduleInitDefaultInterceptor implements InitDefaultsInterceptor { private static final Logger LOG = LoggerFactory.getLogger(ReportGenerationScheduleInitDefaultInterceptor.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java similarity index 88% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java index eab3879a..888f2f32 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandler.java @@ -1,11 +1,11 @@ -package tools.sapcx.commerce.reporting.domain; +package me.cxdev.commerce.reporting.domain; import de.hybris.platform.servicelayer.config.ConfigurationService; import de.hybris.platform.servicelayer.model.attribute.AbstractDynamicAttributeHandler; import org.apache.commons.lang3.StringUtils; -import tools.sapcx.commerce.reporting.model.ConfigurationPropertyAccessorModel; +import me.cxdev.commerce.reporting.model.ConfigurationPropertyAccessorModel; public class ValueFieldOfConfigurationPropertyAccessorAttributeHandler extends AbstractDynamicAttributeHandler { private final ConfigurationService configurationService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/ExcelDocumentNotAvailableException.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/ExcelDocumentNotAvailableException.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/ExcelDocumentNotAvailableException.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/ExcelDocumentNotAvailableException.java index cb0e88eb..78a32fa0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/ExcelDocumentNotAvailableException.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/ExcelDocumentNotAvailableException.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.download; +package me.cxdev.commerce.reporting.download; public class ExcelDocumentNotAvailableException extends RuntimeException { public ExcelDocumentNotAvailableException() { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/ReportDownloadFacade.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/ReportDownloadFacade.java similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/ReportDownloadFacade.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/ReportDownloadFacade.java index ca4d7587..661e4d2f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/ReportDownloadFacade.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/ReportDownloadFacade.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.download; +package me.cxdev.commerce.reporting.download; import java.io.InputStream; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/SelfDeletingFileInputStream.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/SelfDeletingFileInputStream.java index 74cf04e4..ea227a3a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SelfDeletingFileInputStream.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/SelfDeletingFileInputStream.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.download; +package me.cxdev.commerce.reporting.download; import java.io.File; import java.io.FileInputStream; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/SolrReportDownloadFacade.java similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/SolrReportDownloadFacade.java index be0f9ec7..31e7233b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/download/SolrReportDownloadFacade.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/download/SolrReportDownloadFacade.java @@ -1,15 +1,15 @@ -package tools.sapcx.commerce.reporting.download; +package me.cxdev.commerce.reporting.download; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.Map; -import tools.sapcx.commerce.reporting.enums.ReportExportFormat; -import tools.sapcx.commerce.reporting.report.ReportService; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.AbstractGenericSearchFacade; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.enums.ReportExportFormat; +import me.cxdev.commerce.reporting.report.ReportService; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.AbstractGenericSearchFacade; +import me.cxdev.commerce.reporting.search.GenericSearchResult; public class SolrReportDownloadFacade implements ReportDownloadFacade { private final ReportService reportService; diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGenerator.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGenerator.java new file mode 100644 index 00000000..a5d033e9 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGenerator.java @@ -0,0 +1,12 @@ +package me.cxdev.commerce.reporting.generator; + +import java.io.File; + +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; + +public interface ReportGenerator { + boolean createReport(QueryFileConfigurationData report, GenericSearchResult searchResult, File file); + + String getExtension(); +} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGeneratorJobPerformable.java similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGeneratorJobPerformable.java index 05ab2c3a..c884663b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGeneratorJobPerformable.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/ReportGeneratorJobPerformable.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.generator; +package me.cxdev.commerce.reporting.generator; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; @@ -36,17 +36,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.model.ReportGenerationScheduleModel; -import tools.sapcx.commerce.reporting.report.ReportService; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; -import tools.sapcx.commerce.reporting.search.GenericSearchService; -import tools.sapcx.commerce.toolkit.email.HtmlEmailGenerator; -import tools.sapcx.commerce.toolkit.email.HtmlEmailService; - import jakarta.activation.DataSource; import jakarta.mail.util.ByteArrayDataSource; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.model.ReportGenerationScheduleModel; +import me.cxdev.commerce.reporting.report.ReportService; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.search.GenericSearchService; +import me.cxdev.commerce.toolkit.email.HtmlEmailGenerator; +import me.cxdev.commerce.toolkit.email.HtmlEmailService; public class ReportGeneratorJobPerformable extends AbstractJobPerformable { private static final Logger LOG = LoggerFactory.getLogger(ReportGeneratorJobPerformable.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvLineBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvLineBuilder.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvLineBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvLineBuilder.java index 2fe0506b..f5663d67 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvLineBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvLineBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.generator.csv; +package me.cxdev.commerce.reporting.generator.csv; import java.util.HashMap; import java.util.Iterator; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvReportGenerator.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvReportGenerator.java similarity index 83% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvReportGenerator.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvReportGenerator.java index d61d27b4..e549c69e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvReportGenerator.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvReportGenerator.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.generator.csv; +package me.cxdev.commerce.reporting.generator.csv; import java.io.File; import java.io.IOException; @@ -7,10 +7,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.sapcx.commerce.reporting.generator.ReportGenerator; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; -import tools.sapcx.commerce.reporting.search.GenericSearchResultHeader; +import me.cxdev.commerce.reporting.generator.ReportGenerator; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.search.GenericSearchResultHeader; public class CsvReportGenerator implements ReportGenerator { private static final Logger LOG = LoggerFactory.getLogger(CsvReportGenerator.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvReportWriter.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvReportWriter.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvReportWriter.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvReportWriter.java index e368ddfa..ac66098c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/csv/CsvReportWriter.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/csv/CsvReportWriter.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.generator.csv; +package me.cxdev.commerce.reporting.generator.csv; import java.io.File; import java.io.FileNotFoundException; @@ -9,8 +9,8 @@ import org.apache.commons.lang3.StringUtils; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; /** * Implementation of the {@link CSVWriter} that takes the configuration for the CSV file from the underlying diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/excel/ExcelReportGenerator.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/excel/ExcelReportGenerator.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/excel/ExcelReportGenerator.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/excel/ExcelReportGenerator.java index c5e2f312..85ec3353 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/excel/ExcelReportGenerator.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/generator/excel/ExcelReportGenerator.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.generator.excel; +package me.cxdev.commerce.reporting.generator.excel; import java.io.File; import java.io.FileOutputStream; @@ -17,10 +17,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.sapcx.commerce.reporting.generator.ReportGenerator; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; -import tools.sapcx.commerce.reporting.search.GenericSearchResultHeader; +import me.cxdev.commerce.reporting.generator.ReportGenerator; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.search.GenericSearchResultHeader; public class ExcelReportGenerator implements ReportGenerator { private static final Logger LOG = LoggerFactory.getLogger(ExcelReportGenerator.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/populators/QueryReportConfigurationPopulator.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/populators/QueryReportConfigurationPopulator.java similarity index 85% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/populators/QueryReportConfigurationPopulator.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/populators/QueryReportConfigurationPopulator.java index 71087d88..7035049d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/populators/QueryReportConfigurationPopulator.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/populators/QueryReportConfigurationPopulator.java @@ -1,10 +1,10 @@ -package tools.sapcx.commerce.reporting.populators; +package me.cxdev.commerce.reporting.populators; import de.hybris.platform.converters.Populator; import de.hybris.platform.servicelayer.dto.converter.ConversionException; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; public class QueryReportConfigurationPopulator implements Populator { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/report/DefaultReportService.java similarity index 86% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/report/DefaultReportService.java index 74574c84..0c322978 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/DefaultReportService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/report/DefaultReportService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.report; +package me.cxdev.commerce.reporting.report; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; @@ -14,12 +14,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.sapcx.commerce.reporting.enums.ReportExportFormat; -import tools.sapcx.commerce.reporting.generator.ReportGenerator; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationParameterModel; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.enums.ReportExportFormat; +import me.cxdev.commerce.reporting.generator.ReportGenerator; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationParameterModel; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; public class DefaultReportService implements ReportService { private static final Logger LOG = LoggerFactory.getLogger(DefaultReportService.class); @@ -95,7 +95,7 @@ public Map getReportParameters(QueryReportConfigurationModel rep public File getReportDirectory() { File reportDir = FileUtils.getTempDirectory() .toPath() - .resolve("sapcxtools") + .resolve("cxdevtools") .resolve("reports") .toFile(); if (!reportDir.exists()) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/ReportService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/report/ReportService.java similarity index 77% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/ReportService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/report/ReportService.java index 85ef386b..11150df5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/report/ReportService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/report/ReportService.java @@ -1,14 +1,14 @@ -package tools.sapcx.commerce.reporting.report; +package me.cxdev.commerce.reporting.report; import java.io.File; import java.util.List; import java.util.Map; import java.util.Optional; -import tools.sapcx.commerce.reporting.enums.ReportExportFormat; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.enums.ReportExportFormat; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; /** * Service to turn a generic search result into medias. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/AbstractGenericSearchFacade.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/AbstractGenericSearchFacade.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/AbstractGenericSearchFacade.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/AbstractGenericSearchFacade.java index f646b1c9..9d9927f7 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/AbstractGenericSearchFacade.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/AbstractGenericSearchFacade.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import static org.apache.commons.collections4.ListUtils.emptyIfNull; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/FlexibleSearchGenericSearchService.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/FlexibleSearchGenericSearchService.java index 6cb463ea..7d13bcc4 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/FlexibleSearchGenericSearchService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/FlexibleSearchGenericSearchService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import java.sql.Connection; import java.sql.PreparedStatement; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchResult.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchResult.java index 1161b241..15bb4f0b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResult.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchResult.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import java.util.List; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchResultHeader.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchResultHeader.java index 1b46e88c..62823171 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchResultHeader.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchResultHeader.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchService.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchService.java index c3b27f82..2a446b8f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/search/GenericSearchService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/src/me/cxdev/commerce/reporting/search/GenericSearchService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/config/ExtensionConfigurationTests.java similarity index 58% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/config/ExtensionConfigurationTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/config/ExtensionConfigurationTests.java index 883ec015..45749f84 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/config/ExtensionConfigurationTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/config/ExtensionConfigurationTests.java @@ -1,19 +1,19 @@ -package tools.sapcx.commerce.reporting.config; +package me.cxdev.commerce.reporting.config; import de.hybris.bootstrap.annotations.UnitTest; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; +import me.cxdev.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; @UnitTest public class ExtensionConfigurationTests { @Test public void extensionConfiguration() { InstalledExtensionVerifier.verifier() - .requires("sapcxreporting") + .requires("cxdevreporting") .requires("platformbackoffice") - .requires("sapcommercetoolkit") + .requires("cxdevtoolkit") .verify(); } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java index e1c1c8bd..59960315 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/domain/ReportGeneratorCronJobInitDefaultInterceptorTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.domain; +package me.cxdev.commerce.reporting.domain; import static org.assertj.core.api.Assertions.assertThat; @@ -10,10 +10,10 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.reporting.model.ReportGenerationScheduleModel; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; -import tools.sapcx.commerce.toolkit.testing.testdoubles.core.InterceptorContextStub; -import tools.sapcx.commerce.toolkit.testing.testdoubles.search.FlexibleSearchServiceStub; +import me.cxdev.commerce.reporting.model.ReportGenerationScheduleModel; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.testdoubles.core.InterceptorContextStub; +import me.cxdev.commerce.toolkit.testing.testdoubles.search.FlexibleSearchServiceStub; @UnitTest public class ReportGeneratorCronJobInitDefaultInterceptorTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java index d5a73fda..35b60055 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/domain/ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests.java @@ -1,7 +1,7 @@ -package tools.sapcx.commerce.reporting.domain; +package me.cxdev.commerce.reporting.domain; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; import static org.assertj.core.api.Assertions.assertThat; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; import de.hybris.bootstrap.annotations.UnitTest; @@ -9,8 +9,8 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.reporting.model.ConfigurationPropertyAccessorModel; -import tools.sapcx.commerce.toolkit.testing.testdoubles.config.ConfigurationServiceFake; +import me.cxdev.commerce.reporting.model.ConfigurationPropertyAccessorModel; +import me.cxdev.commerce.toolkit.testing.testdoubles.config.ConfigurationServiceFake; @UnitTest public class ValueFieldOfConfigurationPropertyAccessorAttributeHandlerTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/generator/csv/CsvReportGeneratorTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/generator/csv/CsvReportGeneratorTests.java similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/generator/csv/CsvReportGeneratorTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/generator/csv/CsvReportGeneratorTests.java index 66ad520b..4d5ec477 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/generator/csv/CsvReportGeneratorTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/generator/csv/CsvReportGeneratorTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.generator.csv; +package me.cxdev.commerce.reporting.generator.csv; import static org.assertj.core.api.Assertions.assertThat; @@ -14,9 +14,9 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; -import tools.sapcx.commerce.reporting.search.GenericSearchResultHeader; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.reporting.search.GenericSearchResultHeader; @UnitTest public class CsvReportGeneratorTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/report/DefaultReportServiceTests.java similarity index 88% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/report/DefaultReportServiceTests.java index dede5c6e..20f1219f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/report/DefaultReportServiceTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/report/DefaultReportServiceTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.report; +package me.cxdev.commerce.reporting.report; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -24,15 +24,15 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.reporting.enums.ReportExportFormat; -import tools.sapcx.commerce.reporting.generator.ReportGenerator; -import tools.sapcx.commerce.reporting.model.CatalogVersionConfigurationParameterModel; -import tools.sapcx.commerce.reporting.model.CategoryConfigurationParameterModel; -import tools.sapcx.commerce.reporting.model.ProductConfigurationParameterModel; -import tools.sapcx.commerce.reporting.model.QueryReportConfigurationModel; -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.reporting.enums.ReportExportFormat; +import me.cxdev.commerce.reporting.generator.ReportGenerator; +import me.cxdev.commerce.reporting.model.CatalogVersionConfigurationParameterModel; +import me.cxdev.commerce.reporting.model.CategoryConfigurationParameterModel; +import me.cxdev.commerce.reporting.model.ProductConfigurationParameterModel; +import me.cxdev.commerce.reporting.model.QueryReportConfigurationModel; +import me.cxdev.commerce.reporting.report.data.QueryFileConfigurationData; +import me.cxdev.commerce.reporting.search.GenericSearchResult; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; @UnitTest public class DefaultReportServiceTests { @@ -63,7 +63,7 @@ public void setUp() throws Exception { public void verifyReportDirectoryIsExisting() { File reportDirectory = service.getReportDirectory(); assertThat(reportDirectory.exists()).isTrue(); - assertThat(reportDirectory.getAbsolutePath()).endsWith("sapcxtools/reports"); + assertThat(reportDirectory.getAbsolutePath()).endsWith("cxdevtools/reports"); } @Test @@ -73,7 +73,7 @@ public void verifyReportDirectoryIsRecreatedIfMissing() throws IOException { File reportDirectory = service.getReportDirectory(); assertThat(reportDirectory.exists()).isTrue(); - assertThat(reportDirectory.getAbsolutePath()).endsWith("sapcxtools/reports"); + assertThat(reportDirectory.getAbsolutePath()).endsWith("cxdevtools/reports"); } @Test diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java index 2596eabb..4bc1bfc5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/DefaultGenericFlexibleSearchTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.entry; @@ -42,10 +42,10 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; -import tools.sapcx.commerce.toolkit.testing.testdoubles.catalog.CatalogVersionServiceFake; -import tools.sapcx.commerce.toolkit.testing.testdoubles.user.SessionServiceFake; -import tools.sapcx.commerce.toolkit.testing.testdoubles.user.UserServiceFake; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.testdoubles.catalog.CatalogVersionServiceFake; +import me.cxdev.commerce.toolkit.testing.testdoubles.user.SessionServiceFake; +import me.cxdev.commerce.toolkit.testing.testdoubles.user.UserServiceFake; @UnitTest @RunWith(MockitoJUnitRunner.class) diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/GenericSearchResultHeaderTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/GenericSearchResultHeaderTests.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/GenericSearchResultHeaderTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/GenericSearchResultHeaderTests.java index 2e5f2c8e..c5d96176 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/GenericSearchResultHeaderTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/GenericSearchResultHeaderTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/ResultSetMetaDataMock.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/ResultSetMetaDataMock.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/ResultSetMetaDataMock.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/ResultSetMetaDataMock.java index 49a066bd..cace31f9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/ResultSetMetaDataMock.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/ResultSetMetaDataMock.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import java.sql.ResultSetMetaData; import java.sql.SQLException; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/ResultSetMock.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/ResultSetMock.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/ResultSetMock.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/ResultSetMock.java index 74ab3dc4..440726af 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/testsrc/tools/sapcx/commerce/reporting/search/ResultSetMock.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/testsrc/me/cxdev/commerce/reporting/search/ResultSetMock.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.reporting.search; +package me.cxdev.commerce.reporting.search; import java.io.ByteArrayInputStream; import java.io.InputStream; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/.gitignore b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/.gitignore similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/.gitignore rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/.gitignore index 4c820fbb..a90b6578 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/.gitignore +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/.gitignore @@ -7,7 +7,7 @@ testclasses eclipsebin gensrc -# .classpath files and lib folder in sapcxtools to ignore +# .classpath files and lib folder in cxdevtools to ignore .classpath lib/ diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/.project b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/.project similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/.project rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/.project index ed9d8896..b5f56500 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/.project +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/.project @@ -1,6 +1,6 @@ - sapcommercetoolkit + cxdevtoolkit diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/LICENSE.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/LICENSE.md similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/LICENSE.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/LICENSE.md index 9776fe0d..8676c108 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/LICENSE.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/LICENSE.md @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [2025] [SAP CX Tools] + Copyright [2025] [CX DEV Tools] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/README.md similarity index 74% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/README.md index a67efc53..57f1f7f0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/README.md +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/README.md @@ -1,6 +1,6 @@ # SAP Commerce Toolkit -The `sapcommercetoolkit` extension improves the SAP Commerce developer experience by offering a number of helpful functions optimizing the +The `cxdevtoolkit` extension improves the SAP Commerce developer experience by offering a number of helpful functions optimizing the maintenance & operation of the platform, including data imports (essential, initial, sample & test), handling of emails, and a feature to run unit tests without bootstrapping the platform, incl. a series of test doubles and builders that make writing unit tests easier. @@ -14,9 +14,9 @@ With this implementation, the logging can be enhanced to print all errors and ex ### How to activate and use Example: To enable better logging for catalog synchronization failures, one has to do the following steps: -1) Activate the spring profile 'sapcommercetools-modelservice-failurelogging' +1) Activate the spring profile 'cxdevtoolkit-modelservice-failurelogging' 2) Reduce the logging level of the following loggers to DEBUG -- `tools.sapcx.commerce.toolkit.model.FailureLoggingModelService` +- `me.cxdev.commerce.toolkit.model.FailureLoggingModelService` - `de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService` 3) Set the following properties: - `synchronization.itemcopycreator.stacktraces=true` @@ -47,27 +47,27 @@ default SAP extensions. | Parameter | Type | Description | |------------------------------------------------------------------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| sapcommercetoolkit.impeximport.configuration.legacymode | Boolean | Flag for running all impex imports in legacy mode
(default: `false`) | -| sapcommercetoolkit.impeximport.configuration.enablecodeexecution | Boolean | Flag for running all impex imports with code execution
(default: `true`) | -| sapcommercetoolkit.impeximport.configuration.validationmode | String | Validation mode for running impex imports
(default: `strict`) | -| sapcommercetoolkit.impeximport.configuration.defaultlocale | String | Default locale for running impex imports
(default: `en`) | -| sapcommercetoolkit.impeximport.environment.legacysystemsetup | Booelan | Define if the legacy system setup mode shall be used. With legacy mode, the system setup is executed from within this extension. Otherwise, the project needs to trigger the system setup.
(default: `true`) | -| sapcommercetoolkit.impeximport.environment.configurationfile | String | Path to the configuration file that is generated and maintained by the extension. This path must be shared between all cluster nodes!
(default: `${HYBRIS_DATA_DIR}/sapcommercetoolkit/configuration.properties`) | -| sapcommercetoolkit.impeximport.environment.isdevelopment | Boolean | Flag for development environments. If an environment is flagged as development, all sample data and test data imports are performed.
(default: `false`) | -| sapcommercetoolkit.impeximport.environment.supportlocalizedfiles | Boolean | Add support for localized files for all activated languages.
(default: `false`) | -| sapcommercetoolkit.impeximport.environment.importsampledata | Boolean | If the flag is set to true, sample data imports are performed on this environment.
(default: `false`) | -| sapcommercetoolkit.impeximport.environment.importtestdata | Boolean | If the flag is set to true, test data imports are performed on this environment.
(default: `false`) | +| cxdevtoolkit.impeximport.configuration.legacymode | Boolean | Flag for running all impex imports in legacy mode
(default: `false`) | +| cxdevtoolkit.impeximport.configuration.enablecodeexecution | Boolean | Flag for running all impex imports with code execution
(default: `true`) | +| cxdevtoolkit.impeximport.configuration.validationmode | String | Validation mode for running impex imports
(default: `strict`) | +| cxdevtoolkit.impeximport.configuration.defaultlocale | String | Default locale for running impex imports
(default: `en`) | +| cxdevtoolkit.impeximport.environment.legacysystemsetup | Booelan | Define if the legacy system setup mode shall be used. With legacy mode, the system setup is executed from within this extension. Otherwise, the project needs to trigger the system setup.
(default: `true`) | +| cxdevtoolkit.impeximport.environment.configurationfile | String | Path to the configuration file that is generated and maintained by the extension. This path must be shared between all cluster nodes!
(default: `${HYBRIS_DATA_DIR}/cxdevtoolkit/configuration.properties`) | +| cxdevtoolkit.impeximport.environment.isdevelopment | Boolean | Flag for development environments. If an environment is flagged as development, all sample data and test data imports are performed.
(default: `false`) | +| cxdevtoolkit.impeximport.environment.supportlocalizedfiles | Boolean | Add support for localized files for all activated languages.
(default: `false`) | +| cxdevtoolkit.impeximport.environment.importsampledata | Boolean | If the flag is set to true, sample data imports are performed on this environment.
(default: `false`) | +| cxdevtoolkit.impeximport.environment.importtestdata | Boolean | If the flag is set to true, test data imports are performed on this environment.
(default: `false`) | ### How to activate and use The feature itself is activated immediately, but it does not perform any operation without your custom configuration. -Import files can be specified in any property file that is considered as a SAP CX configuration location, e.g.: +Import files can be specified in any property file that is considered as a CX DEV configuration location, e.g.: - properties area of manifest.json file - global local.properties file - extension specific project.properties file -The pattern needs to apply to the following rule: `sapcommercetoolkit.impeximport..[.].` +The pattern needs to apply to the following rule: `cxdevtoolkit.impeximport..[.].` - `` must be one of the stages mentioned above - `` only required for type releasepatch! It must identify the release version with alphanumeric ordering. In other words you must guarantee that the order or the release versions is correct, as the mechanism relies on alphanumerical order. @@ -77,32 +77,32 @@ The pattern needs to apply to the following rule: `sapcommercetoolkit.impeximpor #### Sample configuration ```properties -sapcommercetoolkit.impeximport.elementarydata.0100.coredata=/path/to/file.impex -sapcommercetoolkit.impeximport.elementarydata.0500.catalogs=/path/to/file.impex -sapcommercetoolkit.impeximport.releasepatch.release1x0x0.0001.datamigration=/path/to/file.impex -sapcommercetoolkit.impeximport.releasepatch.release1x1x0.0001.datamigration=/path/to/file.impex -sapcommercetoolkit.impeximport.releasepatch.release2x0x0.0001.insertdefaultvalue=/path/to/file.impex -sapcommercetoolkit.impeximport.essentialdata.0010.userrights=/path/to/file.impex -sapcommercetoolkit.impeximport.essentialdata.0300.solrconfiguration=/path/to/file.impex -sapcommercetoolkit.impeximport.essentialdata.5000.cmstemplates=/path/to/file.impex -sapcommercetoolkit.impeximport.overlay.1000.core=/path/to/file.impex -sapcommercetoolkit.impeximport.sampledata.0100.categories=/path/to/file.impex -sapcommercetoolkit.impeximport.sampledata.0200.classificationsystem=/path/to/file.impex -sapcommercetoolkit.impeximport.sampledata.0500.products=/path/to/file.impex -sapcommercetoolkit.impeximport.sampledata.1000.users=/path/to/file.impex -sapcommercetoolkit.impeximport.sampledata.5000.cms=/path/to/file.impex -sapcommercetoolkit.impeximport.testdata.0100.categories=/path/to/file.impex -sapcommercetoolkit.impeximport.testdata.0500.products=/path/to/file.impex -sapcommercetoolkit.impeximport.testdata.1000.users=/path/to/file.impex -sapcommercetoolkit.impeximport.testdata.5000.cms=/path/to/file.impex +cxdevtoolkit.impeximport.elementarydata.0100.coredata=/path/to/file.impex +cxdevtoolkit.impeximport.elementarydata.0500.catalogs=/path/to/file.impex +cxdevtoolkit.impeximport.releasepatch.release1x0x0.0001.datamigration=/path/to/file.impex +cxdevtoolkit.impeximport.releasepatch.release1x1x0.0001.datamigration=/path/to/file.impex +cxdevtoolkit.impeximport.releasepatch.release2x0x0.0001.insertdefaultvalue=/path/to/file.impex +cxdevtoolkit.impeximport.essentialdata.0010.userrights=/path/to/file.impex +cxdevtoolkit.impeximport.essentialdata.0300.solrconfiguration=/path/to/file.impex +cxdevtoolkit.impeximport.essentialdata.5000.cmstemplates=/path/to/file.impex +cxdevtoolkit.impeximport.overlay.1000.core=/path/to/file.impex +cxdevtoolkit.impeximport.sampledata.0100.categories=/path/to/file.impex +cxdevtoolkit.impeximport.sampledata.0200.classificationsystem=/path/to/file.impex +cxdevtoolkit.impeximport.sampledata.0500.products=/path/to/file.impex +cxdevtoolkit.impeximport.sampledata.1000.users=/path/to/file.impex +cxdevtoolkit.impeximport.sampledata.5000.cms=/path/to/file.impex +cxdevtoolkit.impeximport.testdata.0100.categories=/path/to/file.impex +cxdevtoolkit.impeximport.testdata.0500.products=/path/to/file.impex +cxdevtoolkit.impeximport.testdata.1000.users=/path/to/file.impex +cxdevtoolkit.impeximport.testdata.5000.cms=/path/to/file.impex ``` ### Hints -One should include the `sapcommercetoolkit` within the list of extension to execute projectdata updates on -system init and update via the property `update.executeProjectData.extensionName.list=sapcommercetoolkit`. +One should include the `cxdevtoolkit` within the list of extension to execute projectdata updates on +system init and update via the property `update.executeProjectData.extensionName.list=cxdevtoolkit`. -Typically, one activates the `sapcommercetoolkit.impeximport.environment.supportlocalizedfiles` by setting it to `true`. +Typically, one activates the `cxdevtoolkit.impeximport.environment.supportlocalizedfiles` by setting it to `true`. This will automatically resolve localized files that have the same name as the one specified in the configuration, but with a suffix of the locale before the file extension, e.g. for a configuration of `/path/to/file.impex` and a system supporting the locales (en, de, it) it also resolves the following pathes and tries to import them after the main file: @@ -149,28 +149,28 @@ template engine called `emailTemplateEngine`. For local development there is also a `StoreLocallyHtmlEmailService`. This service does not even send any emails, but instead stores them in a configurable local directory or the database. In order to activate this feature, you need to activate/add the -spring profile `sapcommercetools-fake-localmails` to your `local.properties`: +spring profile `cxdevtoolkit-fake-localmails` to your `local.properties`: ```properties -spring.profiles.active=sapcommercetools-fake-localmails +spring.profiles.active=cxdevtoolkit-fake-localmails ``` ### Configuration parameters | Parameter | Type | Description | |-------------------------------------------------------------------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| sapcommercetoolkit.fakes.htmlEmailService.localstorage.method | String | The method for storing mails locally, either `file` or `database`
(default: `file`) | -| sapcommercetoolkit.fakes.htmlEmailService.localstorage.directory | String | The directory to which the email files will be stored to
(default: `${HYBRIS_LOG_DIR}/mails`) | -| sapcommercetoolkit.fakes.htmlEmailService.localstorage.filenamepattern | String | The pattern for the generated files. It can be adjusted with the following parameters: timestamp, datetime, subject, from, to, extension
(default: `{timestamp}_{subject}.{extension}`) | -| sapcommercetoolkit.fakes.htmlEmailService.localstorage.extension | String | Specify the file extension for the generated local files, use whatever is supported by your email client
(default: `eml`) | -| sapcommercetoolkit.fakes.htmlEmailService.localstorage.mediafolder | String | The media folder to place fake email media items into
(default: `fake-emails`) | -| sapcommercetoolkit.fakes.htmlEmailService.localstorage.daysToKeepEmails | int | the number of days to keep local emails in the database
(default: `7`) | +| cxdevtoolkit.fakes.htmlEmailService.localstorage.method | String | The method for storing mails locally, either `file` or `database`
(default: `file`) | +| cxdevtoolkit.fakes.htmlEmailService.localstorage.directory | String | The directory to which the email files will be stored to
(default: `${HYBRIS_LOG_DIR}/mails`) | +| cxdevtoolkit.fakes.htmlEmailService.localstorage.filenamepattern | String | The pattern for the generated files. It can be adjusted with the following parameters: timestamp, datetime, subject, from, to, extension
(default: `{timestamp}_{subject}.{extension}`) | +| cxdevtoolkit.fakes.htmlEmailService.localstorage.extension | String | Specify the file extension for the generated local files, use whatever is supported by your email client
(default: `eml`) | +| cxdevtoolkit.fakes.htmlEmailService.localstorage.mediafolder | String | The media folder to place fake email media items into
(default: `fake-emails`) | +| cxdevtoolkit.fakes.htmlEmailService.localstorage.daysToKeepEmails | int | the number of days to keep local emails in the database
(default: `7`) | ### Cleanup of stored email within database If you store the emails within the database, make sure you are initializing the database from time to time (e.g. on local development machines), or to setup a maintenance cronjob that removes the fake emails periodically (e.g. on STAGE). The -sapcommercetoolkit already defines a `cleanupLocallyHtmlEmailsPerformable` bean instance that can be configured by creating +cxdevtoolkit already defines a `cleanupLocallyHtmlEmailsPerformable` bean instance that can be configured by creating a `CronJob` instance with the following configuration: ```impex @@ -241,14 +241,14 @@ public class MyB2BEmailService implements B2BEmailService { ```xml - + - + @@ -277,7 +277,7 @@ this has some limitations, but for the purpose of unit testing with `AbstractIte All the unit testing enhancements are placed within the `testsrc` folder. Therefore, they are activated by default, but only enhance your test execution, not your production system. If you want to make use of the testing capabilities, you need to declare a dependency to the -`sapcommercetoolkit` extension to your extension. This dependency can also be transient, e.g. normally the dependency is only added to the +`cxdevtoolkit` extension to your extension. This dependency can also be transient, e.g. normally the dependency is only added to the `core` extensions `extensioninfo.xml` file of the project and is then available to all extensions within the project: ```xml @@ -287,9 +287,9 @@ test execution, not your production system. If you want to make use of the testi - + - +
``` @@ -352,7 +352,7 @@ In the samples above you might have wondered where this `interceptorContext()` l make unit testing with SAP Commerce much easier. The library is still growing and sometimes the test doubles are not finally there, but we have the goal that one day it has grown to a size big enough to support you in the major use cases throughout the platform. -Test doubles and their builders are placed within the `testsrc` folder within the package `tools.sapcx.commerce.toolkit.testing` and +Test doubles and their builders are placed within the `testsrc` folder within the package `me.cxdev.commerce.toolkit.testing` and below. The naming convention is, that the test doubles should always start with the interface name they are supporting, e.g.: - `CatalogVersionService` => `CatalogVersionServiceFake` - `ConfigurationService` => `ConfigurationServiceFake` @@ -372,4 +372,4 @@ them. And if you are missing a builder, feel free to raise an issue or to create _Licensed under the Apache License, Version 2.0, January 2004_ -_Copyright 2026, SAP CX Tools_ \ No newline at end of file +_Copyright 2026, CX DEV Tools_ \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml similarity index 75% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml index 1cc948c4..dd7332ea 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml @@ -1,9 +1,9 @@ + name="cxdevtoolkit" version="5.0.0-snapshot" usemaven="true"> - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml index 4af3ab4f..d2aed483 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml @@ -1,8 +1,8 @@ 4.0.0 - tools.sapcx - sapcommercetoolkit + me.cxdev + cxdevtoolkit 5.0.0-snapshot jar diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/project.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/project.properties similarity index 58% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/project.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/project.properties index c77300a4..bd2e400b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/project.properties +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/project.properties @@ -1,17 +1,17 @@ # ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools +# Copyright (c) 2026 CX DEV Tools # ---------------------------------------------------------------------------- # Location of the file for the global platform spring application context -sapcommercetoolkit.application-context=sapcommercetoolkit-spring.xml +cxdevtoolkit.application-context=cxdevtoolkit-spring.xml ############################################################################## # ImpEx global import configuration ############################################################################## -sapcommercetoolkit.impeximport.configuration.legacymode=false -sapcommercetoolkit.impeximport.configuration.enablecodeexecution=true -sapcommercetoolkit.impeximport.configuration.validationmode=strict -sapcommercetoolkit.impeximport.configuration.defaultlocale=en +cxdevtoolkit.impeximport.configuration.legacymode=false +cxdevtoolkit.impeximport.configuration.enablecodeexecution=true +cxdevtoolkit.impeximport.configuration.validationmode=strict +cxdevtoolkit.impeximport.configuration.defaultlocale=en ############################################################################## # Environment specific flags @@ -19,7 +19,7 @@ sapcommercetoolkit.impeximport.configuration.defaultlocale=en # legacysystemsetup - Uses the legacy system setup, ie. running the impex from this extension # configurationfile - Absolute filename for the persistent configuration of # the system setup environment, defaults to -# ${HYBRIS_DATA_DIR}/sapcommercetoolkit/configuration.properties +# ${HYBRIS_DATA_DIR}/cxdevtoolkit/configuration.properties # isdevelopment - Should be set on local development environment. # If set to true, sample and test data is imported # automatically during system initialization @@ -31,24 +31,24 @@ sapcommercetoolkit.impeximport.configuration.defaultlocale=en # importtestdata - If set to true, test data is imported automatically # during system initialization or system update ############################################################################## -sapcommercetoolkit.impeximport.environment.legacysystemsetup=true -sapcommercetoolkit.impeximport.environment.configurationfile=${HYBRIS_DATA_DIR}/sapcommercetoolkit/configuration.properties -sapcommercetoolkit.impeximport.environment.isdevelopment=false -sapcommercetoolkit.impeximport.environment.supportlocalizedfiles=false -sapcommercetoolkit.impeximport.environment.importsampledata=false -sapcommercetoolkit.impeximport.environment.importtestdata=false +cxdevtoolkit.impeximport.environment.legacysystemsetup=true +cxdevtoolkit.impeximport.environment.configurationfile=${HYBRIS_DATA_DIR}/cxdevtoolkit/configuration.properties +cxdevtoolkit.impeximport.environment.isdevelopment=false +cxdevtoolkit.impeximport.environment.supportlocalizedfiles=false +cxdevtoolkit.impeximport.environment.importsampledata=false +cxdevtoolkit.impeximport.environment.importtestdata=false ############################################################################## # ImpEx import filesets # # Import files can be specified in any property file that is considered as a -# SAP CX configuration location, e.g.: +# CX DEV configuration location, e.g.: # - properties area of manifest.json file # - global local.properties file # - extension specific project.properties file # # The pattern needs to apply to the following rule: -# sapcommercetoolkit.impeximport..[.]. +# cxdevtoolkit.impeximport..[.]. # # - must be one of: # elementarydata - only imported during initialization @@ -63,28 +63,28 @@ sapcommercetoolkit.impeximport.environment.importtestdata=false # - identifier for the import (can be any unique number or text) # # Examples: -# sapcommercetoolkit.impeximport.elementarydata.0100.coredata=/path/to/file.impex -# sapcommercetoolkit.impeximport.elementarydata.0500.catalogs=/path/to/file.impex -# sapcommercetoolkit.impeximport.releasepatch.release1x0x0.0001.datamigration=/path/to/file.impex -# sapcommercetoolkit.impeximport.releasepatch.release1x1x0.0001.datamigration=/path/to/file.impex -# sapcommercetoolkit.impeximport.releasepatch.release2x0x0.0001.insertdefaultvalue=/path/to/file.impex -# sapcommercetoolkit.impeximport.essentialdata.0010.userrights=/path/to/file.impex -# sapcommercetoolkit.impeximport.essentialdata.0300.solrconfiguration=/path/to/file.impex -# sapcommercetoolkit.impeximport.essentialdata.5000.cmstemplates=/path/to/file.impex -# sapcommercetoolkit.impeximport.overlay.1000.core-essential=/path/to/file.impex -# sapcommercetoolkit.impeximport.sampledata.0100.categories=/path/to/file.impex -# sapcommercetoolkit.impeximport.sampledata.0200.classificationsystem=/path/to/file.impex -# sapcommercetoolkit.impeximport.sampledata.0500.products=/path/to/file.impex -# sapcommercetoolkit.impeximport.sampledata.1000.users=/path/to/file.impex -# sapcommercetoolkit.impeximport.sampledata.5000.cms=/path/to/file.impex -# sapcommercetoolkit.impeximport.testdata.0100.categories=/path/to/file.impex -# sapcommercetoolkit.impeximport.testdata.0500.products=/path/to/file.impex -# sapcommercetoolkit.impeximport.testdata.1000.users=/path/to/file.impex -# sapcommercetoolkit.impeximport.testdata.5000.cms=/path/to/file.impex +# cxdevtoolkit.impeximport.elementarydata.0100.coredata=/path/to/file.impex +# cxdevtoolkit.impeximport.elementarydata.0500.catalogs=/path/to/file.impex +# cxdevtoolkit.impeximport.releasepatch.release1x0x0.0001.datamigration=/path/to/file.impex +# cxdevtoolkit.impeximport.releasepatch.release1x1x0.0001.datamigration=/path/to/file.impex +# cxdevtoolkit.impeximport.releasepatch.release2x0x0.0001.insertdefaultvalue=/path/to/file.impex +# cxdevtoolkit.impeximport.essentialdata.0010.userrights=/path/to/file.impex +# cxdevtoolkit.impeximport.essentialdata.0300.solrconfiguration=/path/to/file.impex +# cxdevtoolkit.impeximport.essentialdata.5000.cmstemplates=/path/to/file.impex +# cxdevtoolkit.impeximport.overlay.1000.core-essential=/path/to/file.impex +# cxdevtoolkit.impeximport.sampledata.0100.categories=/path/to/file.impex +# cxdevtoolkit.impeximport.sampledata.0200.classificationsystem=/path/to/file.impex +# cxdevtoolkit.impeximport.sampledata.0500.products=/path/to/file.impex +# cxdevtoolkit.impeximport.sampledata.1000.users=/path/to/file.impex +# cxdevtoolkit.impeximport.sampledata.5000.cms=/path/to/file.impex +# cxdevtoolkit.impeximport.testdata.0100.categories=/path/to/file.impex +# cxdevtoolkit.impeximport.testdata.0500.products=/path/to/file.impex +# cxdevtoolkit.impeximport.testdata.1000.users=/path/to/file.impex +# cxdevtoolkit.impeximport.testdata.5000.cms=/path/to/file.impex # # # For full support, one should activate the project data of this extension, e.g. -# update.executeProjectData.extensionName.list=sapcommercetoolkit +# update.executeProjectData.extensionName.list=cxdevtoolkit ############################################################################## @@ -92,30 +92,30 @@ sapcommercetoolkit.impeximport.environment.importtestdata=false # Html Email Service configuration # # The HtmlEmailService requires all templates to be stored within the following class paths: -# /email-templates/html/** -# /email-templates/text/** +# cxdevtoolkit/email-templates/html/** +# cxdevtoolkit/email-templates/text/** # # For localization of the emails, message bundles are preconfigured. Unfortunately, a message source cannot # hold wildcards and, therefore, this extension has 5 prepared configuration paths that are resolved during # system startup. If you want to contribute to the message bundle for email templates, please take one of the # properties below, and change the path accordingly. The order is important, see note below! # -# Note: You cannot simply add your messages to a file called /email-templates/messages, because the message +# Note: You cannot simply add your messages to a file called cxdevtoolkit/email-templates/messages, because the message # source will stop file resolving, after the first match, ie. a file already existing in a previous message # source will stop the resolver from loading your keys from your local file with the same name. ############################################################################## -sapcommercetoolkit.htmlEmailService.configuration.messagebundle1=classpath:/email-templates/messages -sapcommercetoolkit.htmlEmailService.configuration.messagebundle2=classpath:/email-templates/messages -sapcommercetoolkit.htmlEmailService.configuration.messagebundle3=classpath:/email-templates/messages -sapcommercetoolkit.htmlEmailService.configuration.messagebundle4=classpath:/email-templates/messages -sapcommercetoolkit.htmlEmailService.configuration.messagebundle5=classpath:/email-templates/messages +cxdevtoolkit.htmlEmailService.configuration.messagebundle1=classpath*:cxdevtoolkit/email-templates/messages +cxdevtoolkit.htmlEmailService.configuration.messagebundle2=classpath*:cxdevtoolkit/email-templates/messages +cxdevtoolkit.htmlEmailService.configuration.messagebundle3=classpath*:cxdevtoolkit/email-templates/messages +cxdevtoolkit.htmlEmailService.configuration.messagebundle4=classpath*:cxdevtoolkit/email-templates/messages +cxdevtoolkit.htmlEmailService.configuration.messagebundle5=classpath*:cxdevtoolkit/email-templates/messages ############################################################################## # Html Email Service Fake configuration # # In order to activate the fake, you need to add a spring profile to your configuration: -# spring.profiles.active=sapcommercetools-fake-localmails +# spring.profiles.active=cxdevtoolkit-fake-localmails # # - the method to store mails locally, either file or database # - the directory to which the email files will be stored to @@ -134,9 +134,9 @@ sapcommercetoolkit.htmlEmailService.configuration.messagebundle5=classpath:/emai # - mail.smtp.server (DEFAULT: MISSING!!!) # - mail.from (DEFAULT: test@hybris.de) ############################################################################## -sapcommercetoolkit.fakes.htmlEmailService.localstorage.method=file -sapcommercetoolkit.fakes.htmlEmailService.localstorage.directory=${HYBRIS_LOG_DIR}/mails -sapcommercetoolkit.fakes.htmlEmailService.localstorage.filenamepattern={timestamp}_{subject}.{extension} -sapcommercetoolkit.fakes.htmlEmailService.localstorage.extension=eml -sapcommercetoolkit.fakes.htmlEmailService.localstorage.mediafolder=fake-emails -sapcommercetoolkit.fakes.htmlEmailService.localstorage.daysToKeep=7 +cxdevtoolkit.fakes.htmlEmailService.localstorage.method=file +cxdevtoolkit.fakes.htmlEmailService.localstorage.directory=${HYBRIS_LOG_DIR}/mails +cxdevtoolkit.fakes.htmlEmailService.localstorage.filenamepattern={timestamp}_{subject}.{extension} +cxdevtoolkit.fakes.htmlEmailService.localstorage.extension=eml +cxdevtoolkit.fakes.htmlEmailService.localstorage.mediafolder=fake-emails +cxdevtoolkit.fakes.htmlEmailService.localstorage.daysToKeep=7 diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-config.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-config.xml similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-config.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-config.xml index 3e2c9b62..b19c6f03 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-config.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-config.xml @@ -17,9 +17,9 @@ - - - + + + diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_de.properties new file mode 100644 index 00000000..84e0a389 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_de.properties @@ -0,0 +1,2 @@ +cxdevtools_treenode_main=CX DEV Tools +cxdevtools_treenode_fakemail=Fake Mails \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_en.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_en.properties new file mode 100644 index 00000000..84e0a389 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-labels/labels_en.properties @@ -0,0 +1,2 @@ +cxdevtools_treenode_main=CX DEV Tools +cxdevtools_treenode_fakemail=Fake Mails \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-spring.xml similarity index 55% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-spring.xml index 0d4e1a05..e44adf6a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-backoffice-spring.xml @@ -1,13 +1,11 @@ - + - + diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-items.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-items.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-items.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-items.xml diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-spring.xml new file mode 100644 index 00000000..c9db63e3 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit-spring.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/scss/sapcxreporting-variables.scss b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/email-templates/messages.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/scss/sapcxreporting-variables.scss rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/email-templates/messages.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/models-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/models-spring.xml similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/models-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/models-spring.xml index c0c5c652..74e71794 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/models-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/models-spring.xml @@ -4,10 +4,10 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - + + class="me.cxdev.commerce.toolkit.model.FailureLoggingModelService" /> \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/sessionhandling-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/sessionhandling-spring.xml similarity index 86% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/sessionhandling-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/sessionhandling-spring.xml index c0230c7c..9e8cc533 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/sessionhandling-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/sessionhandling-spring.xml @@ -5,7 +5,7 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/systemsetup-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/systemsetup-spring.xml similarity index 53% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/systemsetup-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/systemsetup-spring.xml index aa9e1600..3da18327 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/systemsetup-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/systemsetup-spring.xml @@ -5,18 +5,18 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - - - + + + - + - + - + @@ -24,62 +24,62 @@ - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-fake-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-fake-spring.xml new file mode 100644 index 00000000..8e4b35a1 --- /dev/null +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-fake-spring.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-spring.xml similarity index 81% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-spring.xml index 73d1d280..ea3def5a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-spring.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/cxdevtoolkit/thymeleafemails-spring.xml @@ -5,7 +5,7 @@ - + @@ -55,11 +55,11 @@ - ${sapcommercetoolkit.htmlEmailService.configuration.messagebundle1} - ${sapcommercetoolkit.htmlEmailService.configuration.messagebundle2} - ${sapcommercetoolkit.htmlEmailService.configuration.messagebundle3} - ${sapcommercetoolkit.htmlEmailService.configuration.messagebundle4} - ${sapcommercetoolkit.htmlEmailService.configuration.messagebundle5} + ${cxdevtoolkit.htmlEmailService.configuration.messagebundle1} + ${cxdevtoolkit.htmlEmailService.configuration.messagebundle2} + ${cxdevtoolkit.htmlEmailService.configuration.messagebundle3} + ${cxdevtoolkit.htmlEmailService.configuration.messagebundle4} + ${cxdevtoolkit.htmlEmailService.configuration.messagebundle5} @@ -70,5 +70,5 @@ - + \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/localization/cxdevtoolkit-locales_de.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_de.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/localization/cxdevtoolkit-locales_de.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/localization/cxdevtoolkit-locales_en.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/resources/localization/cxdevtoolkit-locales_en.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/constants/ToolkitConstants.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/constants/ToolkitConstants.java similarity index 69% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/constants/ToolkitConstants.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/constants/ToolkitConstants.java index 329432fb..868b6e1b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/constants/ToolkitConstants.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/constants/ToolkitConstants.java @@ -1,11 +1,11 @@ -package tools.sapcx.commerce.toolkit.constants; +package me.cxdev.commerce.toolkit.constants; /** * Global class for all constants. This class is required by the platform and * will not been used for any other purpose. */ public final class ToolkitConstants { - public static final String EXTENSIONNAME = "sapcommercetoolkit"; + public static final String EXTENSIONNAME = "cxdevtoolkit"; private ToolkitConstants() { // empty to avoid instantiating this constant class diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/DefaultHtmlEmailService.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/DefaultHtmlEmailService.java index c7df51e1..c4c526f5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/DefaultHtmlEmailService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import org.apache.commons.mail2.core.EmailException; import org.apache.commons.mail2.jakarta.HtmlEmail; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailAddress.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailAddress.java index 4febc342..6c914885 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailAddress.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailAddress.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailBuilder.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailBuilder.java index 2df8ab2f..e223b110 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; @@ -16,11 +16,10 @@ import org.apache.commons.mail2.core.EmailException; import org.apache.commons.mail2.jakarta.HtmlEmail; -import tools.sapcx.commerce.toolkit.email.attachments.EmailAfterBuildHook; -import tools.sapcx.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilder; -import tools.sapcx.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilders; - import jakarta.mail.internet.InternetAddress; +import me.cxdev.commerce.toolkit.email.attachments.EmailAfterBuildHook; +import me.cxdev.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilder; +import me.cxdev.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilders; public class HtmlEmailBuilder { static HtmlEmailBuilder withHtmlEmailGenerator(HtmlEmailGenerator generator) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailGenerator.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailGenerator.java index 2b5d820b..99216a54 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailGenerator.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailGenerator.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailService.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailService.java index 45e72754..a564694e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/HtmlEmailService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/HtmlEmailService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import java.io.UnsupportedEncodingException; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/ProxyHtmlEmail.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/ProxyHtmlEmail.java index 9707af54..bb2cd554 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ProxyHtmlEmail.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/ProxyHtmlEmail.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import java.io.File; import java.net.URL; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java index 48646145..33f4a124 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/ThymeleafHtmlEmailGenerator.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import java.util.Locale; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java index dea343ae..2c2de1e8 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/AbstractHtmlEmailAttachmentBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import org.apache.commons.mail2.core.EmailException; import org.apache.commons.mail2.jakarta.HtmlEmail; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/EmailAfterBuildHook.java similarity index 80% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/EmailAfterBuildHook.java index 202bad66..6611d3e0 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/EmailAfterBuildHook.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/EmailAfterBuildHook.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import org.apache.commons.mail2.core.EmailException; import org.apache.commons.mail2.jakarta.HtmlEmail; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java index 33eb9699..4eee6e64 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/FileBasedHtmlEmailAttachmentBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import java.io.File; import java.io.IOException; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java similarity index 84% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java index b6d7bb76..7d96d12c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import org.apache.commons.mail2.core.EmailException; import org.apache.commons.mail2.jakarta.HtmlEmail; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java index 16a306b7..c7d2e687 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/HtmlEmailAttachmentBuilders.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import java.io.File; import java.net.URL; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java index abe430c5..070efad9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/MediaBasedHtmlEmailAttachmentBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import de.hybris.platform.core.Registry; import de.hybris.platform.core.model.media.MediaModel; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java index 0826a613..aedf3265 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/attachments/URLBasedHtmlEmailAttachmentBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.attachments; +package me.cxdev.commerce.toolkit.email.attachments; import java.io.IOException; import java.io.InputStream; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java index 34953a06..ff5a455b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/fake/RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.fake; +package me.cxdev.commerce.toolkit.email.fake; import static org.apache.commons.collections4.ListUtils.emptyIfNull; @@ -13,7 +13,7 @@ import org.joda.time.DateTime; -import tools.sapcx.commerce.toolkit.model.LocallyStoredEmailModel; +import me.cxdev.commerce.toolkit.model.LocallyStoredEmailModel; public class RemoveLocallyHtmlEmailsMaintenanceCleanupStrategy implements MaintenanceCleanupStrategy { private static final String FETCH_QUERY = String.format("SELECT {%s} FROM {%s} WHERE {%s} < ?threshold", diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java index 92465bd1..9ede4cfa 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/email/fake/StoreLocallyHtmlEmailServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.fake; +package me.cxdev.commerce.toolkit.email.fake; import static java.util.stream.Collectors.joining; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; @@ -27,14 +27,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import tools.sapcx.commerce.toolkit.email.HtmlEmailService; -import tools.sapcx.commerce.toolkit.model.LocallyStoredEmailModel; - import jakarta.mail.Address; import jakarta.mail.Message; import jakarta.mail.MessagingException; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; +import me.cxdev.commerce.toolkit.email.HtmlEmailService; +import me.cxdev.commerce.toolkit.model.LocallyStoredEmailModel; public class StoreLocallyHtmlEmailServiceFake implements HtmlEmailService { private static final Logger LOG = LoggerFactory.getLogger(StoreLocallyHtmlEmailServiceFake.class); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/ImpExTasks.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/ImpExTasks.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/ImpExTasks.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/ImpExTasks.java index 7681832e..feffeb80 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/ImpExTasks.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/ImpExTasks.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.impex; +package me.cxdev.commerce.toolkit.impex; import de.hybris.platform.catalog.CatalogVersionService; import de.hybris.platform.catalog.model.CatalogVersionModel; @@ -26,7 +26,7 @@ private ImpExTasks() { * This method is intended to be called by an ImpEx script while code execution is enabled, e.g.: * * - * #%tools.sapcx.commerce.toolkit.impex.ImpExTasks.startFullCatalogSync("ProductCatalog:Staged", "ProductCatalog:Online", "sync (ProductCatalog:Online->Staged)") + * #%me.cxdev.commerce.toolkit.impex.ImpExTasks.startFullCatalogSync("ProductCatalog:Staged", "ProductCatalog:Online", "sync (ProductCatalog:Online->Staged)") * * * One may use it to sync the catalog versions after system update. The action is performed synchronously, so that @@ -65,7 +65,7 @@ public static void startFullCatalogSync(String source, String target, String syn /** * This method is intended to be called by an ImpEx script while code execution is enabled, e.g.: * - * #%tools.sapcx.commerce.toolkit.impex.ImpExTasks.startCronJob("your-cronjob-code"); + * #%me.cxdev.commerce.toolkit.impex.ImpExTasks.startCronJob("your-cronjob-code"); * * One may use it to e.g. trigger a solr indexing after system update. The action is performed synchronously, so that you can rely on * the action was completed before your system update process continues. @@ -79,7 +79,7 @@ public static void startCronJob(String cronJobCode) { /** * This method is intended to be called by an ImpEx script while code execution is enabled, e.g.: * - * #%tools.sapcx.commerce.toolkit.impex.ImpExTasks.startCronJobNonBlocking("your-cronjob-code"); + * #%me.cxdev.commerce.toolkit.impex.ImpExTasks.startCronJobNonBlocking("your-cronjob-code"); * * One may use it to e.g. trigger a solr indexing after system update. The action is performed asynchronously. You cannot rely on * the action being completed before your system update process continues. @@ -93,7 +93,7 @@ public static void startCronJobNonBlocking(String cronJobCode) { /** * This method is intended to be called by an ImpEx script while code execution is enabled, e.g.: * - * #%tools.sapcx.commerce.toolkit.impex.ImpExTasks.startCronJob("your-cronjob-code", true); + * #%me.cxdev.commerce.toolkit.impex.ImpExTasks.startCronJob("your-cronjob-code", true); * * One may use it to e.g. trigger a solr indexing after system update. The second parameter defines whether the job * is performed synchronously (true) or asynchronously (false). diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java index a6f1b18c..de9ee98e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImportExecutor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.impex.executor; +package me.cxdev.commerce.toolkit.impex.executor; import de.hybris.platform.core.initialization.SystemSetupContext; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java index d3987229..18513890 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImporterLogger.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.impex.executor; +package me.cxdev.commerce.toolkit.impex.executor; import de.hybris.platform.core.initialization.SystemSetupContext; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java index 6a6297c0..b57f8d4b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/impex/executor/SynchronousImpExDataImportExecutor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.impex.executor; +package me.cxdev.commerce.toolkit.impex.executor; import java.io.FileNotFoundException; import java.io.InputStream; @@ -17,7 +17,7 @@ import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.ResourceLoader; -import tools.sapcx.commerce.toolkit.setup.SystemSetupEnvironment; +import me.cxdev.commerce.toolkit.setup.SystemSetupEnvironment; /** * Implementation of the {@link ImpExDataImportExecutor} interface, importing the given file with the preconfigured diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/model/FailureLoggingModelService.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/model/FailureLoggingModelService.java index 708b1c93..68dd5ba6 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/model/FailureLoggingModelService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/model/FailureLoggingModelService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.model; +package me.cxdev.commerce.toolkit.model; import java.util.Collection; import java.util.Locale; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/CxLocalViewExecutor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/CxLocalViewExecutor.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/CxLocalViewExecutor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/CxLocalViewExecutor.java index d31d143d..d6fe5663 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/CxLocalViewExecutor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/CxLocalViewExecutor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.session; +package me.cxdev.commerce.toolkit.session; import static org.apache.commons.collections4.MapUtils.emptyIfNull; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/LocalViewExecutionBody.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/LocalViewExecutionBody.java similarity index 82% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/LocalViewExecutionBody.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/LocalViewExecutionBody.java index 82d70fe0..11ab21a5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/LocalViewExecutionBody.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/LocalViewExecutionBody.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.session; +package me.cxdev.commerce.toolkit.session; import de.hybris.platform.servicelayer.session.SessionService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/LocalViewExecutor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/LocalViewExecutor.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/LocalViewExecutor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/LocalViewExecutor.java index 9dfd51e6..cc57af72 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/session/LocalViewExecutor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/session/LocalViewExecutor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.session; +package me.cxdev.commerce.toolkit.session; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ImpExDataImporter.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ImpExDataImporter.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ImpExDataImporter.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ImpExDataImporter.java index f64fdf7c..5acbb87c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ImpExDataImporter.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ImpExDataImporter.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup; +package me.cxdev.commerce.toolkit.setup; import java.util.Collections; import java.util.List; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ReliableSystemSetupExecutor.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ReliableSystemSetupExecutor.java index 1370376a..63c799cc 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ReliableSystemSetupExecutor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ReliableSystemSetupExecutor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup; +package me.cxdev.commerce.toolkit.setup; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/SystemSetupEnvironment.java similarity index 85% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/SystemSetupEnvironment.java index 104706a8..9018174e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironment.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/SystemSetupEnvironment.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup; +package me.cxdev.commerce.toolkit.setup; import java.io.File; import java.io.IOException; @@ -24,23 +24,23 @@ public final class SystemSetupEnvironment { static final Logger LOG = LoggerFactory.getLogger(SystemSetupEnvironment.class); @VisibleForTesting - static final String LEGACYMODEKEY = "sapcommercetoolkit.impeximport.configuration.legacymode"; + static final String LEGACYMODEKEY = "cxdevtoolkit.impeximport.configuration.legacymode"; @VisibleForTesting - static final String ENABLECODEEXECUTIONKEY = "sapcommercetoolkit.impeximport.configuration.enablecodeexecution"; + static final String ENABLECODEEXECUTIONKEY = "cxdevtoolkit.impeximport.configuration.enablecodeexecution"; @VisibleForTesting - static final String VALIDATIONMODEKEY = "sapcommercetoolkit.impeximport.configuration.validationmode"; + static final String VALIDATIONMODEKEY = "cxdevtoolkit.impeximport.configuration.validationmode"; @VisibleForTesting - static final String DEFAULTLOCALEKEY = "sapcommercetoolkit.impeximport.configuration.defaultlocale"; + static final String DEFAULTLOCALEKEY = "cxdevtoolkit.impeximport.configuration.defaultlocale"; @VisibleForTesting - static final String ISDEVELOPMENTKEY = "sapcommercetoolkit.impeximport.environment.isdevelopment"; + static final String ISDEVELOPMENTKEY = "cxdevtoolkit.impeximport.environment.isdevelopment"; @VisibleForTesting - static final String SUPPORTLOCALIZATIONKEY = "sapcommercetoolkit.impeximport.environment.supportlocalizedfiles"; + static final String SUPPORTLOCALIZATIONKEY = "cxdevtoolkit.impeximport.environment.supportlocalizedfiles"; @VisibleForTesting - static final String LASTPROCESSEDRELEASEVERSIONKEY = "sapcommercetoolkit.impeximport.configuration.lastprocessedreleaseversion"; + static final String LASTPROCESSEDRELEASEVERSIONKEY = "cxdevtoolkit.impeximport.configuration.lastprocessedreleaseversion"; @VisibleForTesting - static final String LASTPROCESSEDRELEASEITEMSKEY = "sapcommercetoolkit.impeximport.configuration.lastprocessedreleaseitems"; + static final String LASTPROCESSEDRELEASEITEMSKEY = "cxdevtoolkit.impeximport.configuration.lastprocessedreleaseitems"; @VisibleForTesting - static final String FILE_HEADER = "This file is generated automatically by the sapcommercetoolkit extension. Do not change the file manually!"; + static final String FILE_HEADER = "This file is generated automatically by the cxdevtoolkit extension. Do not change the file manually!"; private final String fileName; private final ConfigurationService configurationService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ToolkitSystemSetup.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ToolkitSystemSetup.java similarity index 92% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ToolkitSystemSetup.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ToolkitSystemSetup.java index ebd823f3..9d3e0575 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/ToolkitSystemSetup.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/ToolkitSystemSetup.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup; +package me.cxdev.commerce.toolkit.setup; import java.util.List; @@ -7,7 +7,7 @@ import de.hybris.platform.core.initialization.SystemSetupParameter; import de.hybris.platform.core.initialization.SystemSetupParameterMethod; -import tools.sapcx.commerce.toolkit.constants.ToolkitConstants; +import me.cxdev.commerce.toolkit.constants.ToolkitConstants; /** * System setup class for the toolkit extension. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java similarity index 79% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java index 077b07f0..bc3746dd 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/PrefixBasedDataImporter.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup.importer; +package me.cxdev.commerce.toolkit.setup.importer; import java.util.function.Predicate; @@ -6,9 +6,9 @@ import org.apache.commons.lang3.StringUtils; -import tools.sapcx.commerce.toolkit.impex.executor.ImpExDataImportExecutor; -import tools.sapcx.commerce.toolkit.setup.ImpExDataImporter; -import tools.sapcx.commerce.toolkit.setup.SystemSetupEnvironment; +import me.cxdev.commerce.toolkit.impex.executor.ImpExDataImportExecutor; +import me.cxdev.commerce.toolkit.setup.ImpExDataImporter; +import me.cxdev.commerce.toolkit.setup.SystemSetupEnvironment; /** * Implementation of the {@link ImpExDataImporter} that retrieves all configuration values from the environment that @@ -18,12 +18,12 @@ * Example: * * - * sapcommercetoolkit.impeximport.sampledata.0100.categories=/path/to/file100.impex - * sapcommercetoolkit.impeximport.sampledata.0200.classificationsystem=/path/to/file200.impex - * sapcommercetoolkit.impeximport.sampledata.0150.products=/path/to/file150.impex + * cxdevtoolkit.impeximport.sampledata.0100.categories=/path/to/file100.impex + * cxdevtoolkit.impeximport.sampledata.0200.classificationsystem=/path/to/file200.impex + * cxdevtoolkit.impeximport.sampledata.0150.products=/path/to/file150.impex * * - * In this example, an {@link PrefixBasedDataImporter} with prefix set to `sapcommercetoolkit,impeximport.sampledata` + * In this example, an {@link PrefixBasedDataImporter} with prefix set to `cxdevtoolkit,impeximport.sampledata` * imports the files in the following order: file100.impex, file150.impex and file200.impex * * The order is determined by the configuration keys and not by the loading order of the underlying properties files. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/ProjectDataImporter.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/ProjectDataImporter.java index 3d7cde91..0bb3168f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ProjectDataImporter.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/ProjectDataImporter.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup.importer; +package me.cxdev.commerce.toolkit.setup.importer; import java.util.Arrays; import java.util.Collections; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/ReleasePatchesImporter.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/ReleasePatchesImporter.java index 5065cb0c..959c68a6 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/src/tools/sapcx/commerce/toolkit/setup/importer/ReleasePatchesImporter.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/src/me/cxdev/commerce/toolkit/setup/importer/ReleasePatchesImporter.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup.importer; +package me.cxdev.commerce.toolkit.setup.importer; import java.util.List; import java.util.function.Predicate; @@ -9,7 +9,7 @@ import org.apache.commons.lang3.StringUtils; -import tools.sapcx.commerce.toolkit.setup.SystemSetupEnvironment; +import me.cxdev.commerce.toolkit.setup.SystemSetupEnvironment; /** * The {@link ReleasePatchesImporter} was created to apply minor changes to essential and initial data, that have diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/config/ExtensionConfigurationTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/config/ExtensionConfigurationTests.java similarity index 59% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/config/ExtensionConfigurationTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/config/ExtensionConfigurationTests.java index ea876810..37f0ac2c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/config/ExtensionConfigurationTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/config/ExtensionConfigurationTests.java @@ -1,17 +1,17 @@ -package tools.sapcx.commerce.toolkit.config; +package me.cxdev.commerce.toolkit.config; import de.hybris.bootstrap.annotations.UnitTest; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; +import me.cxdev.commerce.toolkit.testing.verifier.InstalledExtensionVerifier; @UnitTest public class ExtensionConfigurationTests { @Test public void extensionConfiguration() { InstalledExtensionVerifier.verifier() - .requires("sapcommercetoolkit") + .requires("cxdevtoolkit") .verify(); } } diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java index be3c7983..0480da64 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/DefaultHtmlEmailServiceTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailAddressTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailAddressTests.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailAddressTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailAddressTests.java index f429bbaf..654012eb 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailAddressTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailAddressTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailBuilderTests.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailBuilderTests.java index fdb2a659..6b24ea1d 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailBuilderTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailBuilderTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; @@ -17,13 +17,12 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilders; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; -import tools.sapcx.commerce.toolkit.testing.testdoubles.email.HtmlEmailGeneratorFake; - import jakarta.mail.MessagingException; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMultipart; +import me.cxdev.commerce.toolkit.email.attachments.HtmlEmailAttachmentBuilders; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.testdoubles.email.HtmlEmailGeneratorFake; @UnitTest public class HtmlEmailBuilderTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java index 60fd36ad..2246da36 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/HtmlEmailGeneratorDefaultMethodsTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.assertj.core.api.Assertions.assertThat; @@ -13,11 +13,10 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.testdoubles.email.HtmlEmailGeneratorFake; - import jakarta.mail.MessagingException; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMultipart; +import me.cxdev.commerce.toolkit.testing.testdoubles.email.HtmlEmailGeneratorFake; public class HtmlEmailGeneratorDefaultMethodsTests { private HtmlEmailGenerator htmlEmailGenerator; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java index 466bb193..f3442f07 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/ThymeleafHtmlEmailGeneratorTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email; +package me.cxdev.commerce.toolkit.email; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java index 5a9a7005..df1ac7ec 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/fake/StoreInDatabaseHtmlEmailServiceFakeTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.fake; +package me.cxdev.commerce.toolkit.email.fake; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -19,12 +19,11 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; -import tools.sapcx.commerce.toolkit.model.LocallyStoredEmailModel; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; - import jakarta.mail.MessagingException; import jakarta.mail.Session; import jakarta.mail.internet.MimeMessage; +import me.cxdev.commerce.toolkit.model.LocallyStoredEmailModel; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; @UnitTest public class StoreInDatabaseHtmlEmailServiceFakeTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java index 7d8263ab..208c1f28 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/email/fake/StoreInLocalDirectoryHtmlEmailServiceFakeTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.email.fake; +package me.cxdev.commerce.toolkit.email.fake; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java index 250304f6..c4c89d11 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/impex/executor/ImpExDataImporterLoggerTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.impex.executor; +package me.cxdev.commerce.toolkit.impex.executor; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironmentTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/setup/SystemSetupEnvironmentTests.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironmentTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/setup/SystemSetupEnvironmentTests.java index eb56d6a7..556e3d0b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/setup/SystemSetupEnvironmentTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/setup/SystemSetupEnvironmentTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup; +package me.cxdev.commerce.toolkit.setup; import static org.assertj.core.api.Assertions.assertThat; @@ -13,7 +13,7 @@ import org.junit.Before; import org.junit.Test; -import tools.sapcx.commerce.toolkit.testing.testdoubles.config.ConfigurationServiceFake; +import me.cxdev.commerce.toolkit.testing.testdoubles.config.ConfigurationServiceFake; @UnitTest public class SystemSetupEnvironmentTests { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/setup/ToolkitSystemSetupTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/setup/ToolkitSystemSetupTests.java similarity index 86% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/setup/ToolkitSystemSetupTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/setup/ToolkitSystemSetupTests.java index 02e7acf6..e2b8d730 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/setup/ToolkitSystemSetupTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/setup/ToolkitSystemSetupTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.setup; +package me.cxdev.commerce.toolkit.setup; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -23,13 +23,13 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; -import tools.sapcx.commerce.toolkit.constants.ToolkitConstants; -import tools.sapcx.commerce.toolkit.impex.executor.ImpExDataImportExecutor; -import tools.sapcx.commerce.toolkit.setup.importer.PrefixBasedDataImporter; -import tools.sapcx.commerce.toolkit.setup.importer.ProjectDataImporter; -import tools.sapcx.commerce.toolkit.setup.importer.ReleasePatchesImporter; -import tools.sapcx.commerce.toolkit.testing.testdoubles.config.ConfigurationServiceFake; -import tools.sapcx.commerce.toolkit.testing.testdoubles.core.ValidationServiceSpy; +import me.cxdev.commerce.toolkit.constants.ToolkitConstants; +import me.cxdev.commerce.toolkit.impex.executor.ImpExDataImportExecutor; +import me.cxdev.commerce.toolkit.setup.importer.PrefixBasedDataImporter; +import me.cxdev.commerce.toolkit.setup.importer.ProjectDataImporter; +import me.cxdev.commerce.toolkit.setup.importer.ReleasePatchesImporter; +import me.cxdev.commerce.toolkit.testing.testdoubles.config.ConfigurationServiceFake; +import me.cxdev.commerce.toolkit.testing.testdoubles.core.ValidationServiceSpy; @UnitTest public class ToolkitSystemSetupTests { @@ -276,8 +276,8 @@ public void whenIncrementalUpdate_verifyOnlyNewerReleasePatchesArePerformed() { addConfigurationForImpExFiles(); performSilently(SystemSetup.Process.UPDATE); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release2x1.0003", "/releasepatches/release2x1-0003.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release2x1.0004", "/releasepatches/release2x1-0004.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release2x1.0003", "/releasepatches/release2x1-0003.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release2x1.0004", "/releasepatches/release2x1-0004.impex"); SystemSetupContext contextForSecondRun = contextFor(SystemSetup.Process.UPDATE, SystemSetup.Type.ALL); systemSetup.reliableSetupPhases(contextForSecondRun); @@ -319,9 +319,9 @@ public void whenSystemSetupParametersIsCalled_itContainsAllSystemSetupParameters List systemSetupParameters = systemSetup.getSystemSetupParameters(); assertThat(systemSetupParameters.stream().map(SystemSetupParameter::getKey)).containsExactlyInAnyOrder( - "sapcxtoolkit.impeximport.sampledata", - "sapcxtoolkit.impeximport.testdata", - "sapcxtoolkit.impeximport.releasepatch"); + "cxdevtoolkit.impeximport.sampledata", + "cxdevtoolkit.impeximport.testdata", + "cxdevtoolkit.impeximport.releasepatch"); assertThat(systemSetupParameters.stream().map(SystemSetupParameter::isMultiSelect).allMatch(Boolean.TRUE::equals)).isTrue(); } @@ -363,75 +363,75 @@ private void setupImpexDataImporterForTesting(SystemSetupEnvironment environment elementaryDataImporter.setEnvironment(environment); elementaryDataImporter.setImpExDataImportExecutor(executor); elementaryDataImporter.setTitle("Elementary Data"); - elementaryDataImporter.setPrefix("sapcxtoolkit.impeximport.elementarydata"); + elementaryDataImporter.setPrefix("cxdevtoolkit.impeximport.elementarydata"); essentialDataImporter = new PrefixBasedDataImporter(); essentialDataImporter.setEnvironment(environment); essentialDataImporter.setImpExDataImportExecutor(executor); essentialDataImporter.setTitle("Essential Data"); - essentialDataImporter.setPrefix("sapcxtoolkit.impeximport.essentialdata"); + essentialDataImporter.setPrefix("cxdevtoolkit.impeximport.essentialdata"); releasePatchesImporter = new ReleasePatchesImporter(); releasePatchesImporter.setEnvironment(environment); releasePatchesImporter.setImpExDataImportExecutor(executor); releasePatchesImporter.setTitle("Release Patches (automatically)"); - releasePatchesImporter.setPrefix("sapcxtoolkit.impeximport.releasepatch"); + releasePatchesImporter.setPrefix("cxdevtoolkit.impeximport.releasepatch"); overlayDataImporter = new ProjectDataImporter(); overlayDataImporter.setEnvironment(environment); overlayDataImporter.setImpExDataImportExecutor(executor); overlayDataImporter.setTitle("Overlays"); - overlayDataImporter.setPrefix("sapcxtoolkit.impeximport.overlay"); + overlayDataImporter.setPrefix("cxdevtoolkit.impeximport.overlay"); sampleDataImporter = new ProjectDataImporter(); sampleDataImporter.setEnvironment(environment); sampleDataImporter.setImpExDataImportExecutor(executor); sampleDataImporter.setTitle("Sample Data"); - sampleDataImporter.setPrefix("sapcxtoolkit.impeximport.sampledata"); + sampleDataImporter.setPrefix("cxdevtoolkit.impeximport.sampledata"); testDataImporter = new ProjectDataImporter(); testDataImporter.setEnvironment(environment); testDataImporter.setImpExDataImportExecutor(executor); testDataImporter.setTitle("Test Data"); - testDataImporter.setPrefix("sapcxtoolkit.impeximport.testdata"); + testDataImporter.setPrefix("cxdevtoolkit.impeximport.testdata"); releasePatchReRunImporter = new ProjectDataImporter(); releasePatchReRunImporter.setEnvironment(environment); releasePatchReRunImporter.setImpExDataImportExecutor(executor); releasePatchReRunImporter.setTitle("Release Patches (manual)"); - releasePatchReRunImporter.setPrefix("sapcxtoolkit.impeximport.releasepatch"); + releasePatchReRunImporter.setPrefix("cxdevtoolkit.impeximport.releasepatch"); } private void addEnvironmentConfiguration(boolean isDevelopment, boolean shouldImportSampleData, boolean shouldImportTestData) { configurationServiceFake.setProperty(SystemSetupEnvironment.ISDEVELOPMENTKEY, isDevelopment); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.environment.importsampledata", shouldImportSampleData); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.environment.importsampledata", shouldImportSampleData); sampleDataImporter.setImportOnInitialization(isDevelopment || shouldImportSampleData); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.environment.importtestdata", shouldImportTestData); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.environment.importtestdata", shouldImportTestData); testDataImporter.setImportOnInitialization(isDevelopment || shouldImportTestData); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.environment.importtestdata", shouldImportTestData); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.environment.importtestdata", shouldImportTestData); } private void addConfigurationForImpExFiles() { - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.elementarydata.0001.optionaltext", "/elementary/file0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.elementarydata.0002", "/elementary/file0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.elementarydata.0003.optionaltext", "/elementary/file0003.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.essentialdata.0002.something", "/essential/file0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.essentialdata.0001.something", "/essential/file0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.essentialdata.0003.something", "/essential/file0003.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.overlay.0001.overlay1", "/overlay/file0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.overlay.0002.overlay2", "/overlay/file0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.testdata.0001.optionaltext", "/testdata/file0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.testdata.0003", "/testdata/file0003.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.testdata.0002", "/testdata/file0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.sampledata.0003", "/sampledata/file0003.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.sampledata.0002.optionaltext", "/sampledata/file0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.sampledata.0001", "/sampledata/file0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release1x0.0001.optionaltext", "/releasepatches/release1x0-0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release1x0.0002", "/releasepatches/release1x0-0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release2x1.0002", "/releasepatches/release2x1-0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release2x1.0001", "/releasepatches/release2x1-0001.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release2x0.0002", "/releasepatches/release2x0-0002.impex"); - configurationServiceFake.setProperty("sapcxtoolkit.impeximport.releasepatch.release2x0.0001", "/releasepatches/release2x0-0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.elementarydata.0001.optionaltext", "/elementary/file0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.elementarydata.0002", "/elementary/file0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.elementarydata.0003.optionaltext", "/elementary/file0003.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.essentialdata.0002.something", "/essential/file0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.essentialdata.0001.something", "/essential/file0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.essentialdata.0003.something", "/essential/file0003.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.overlay.0001.overlay1", "/overlay/file0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.overlay.0002.overlay2", "/overlay/file0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.testdata.0001.optionaltext", "/testdata/file0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.testdata.0003", "/testdata/file0003.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.testdata.0002", "/testdata/file0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.sampledata.0003", "/sampledata/file0003.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.sampledata.0002.optionaltext", "/sampledata/file0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.sampledata.0001", "/sampledata/file0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release1x0.0001.optionaltext", "/releasepatches/release1x0-0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release1x0.0002", "/releasepatches/release1x0-0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release2x1.0002", "/releasepatches/release2x1-0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release2x1.0001", "/releasepatches/release2x1-0001.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release2x0.0002", "/releasepatches/release2x0-0002.impex"); + configurationServiceFake.setProperty("cxdevtoolkit.impeximport.releasepatch.release2x0.0001", "/releasepatches/release2x0-0001.impex"); } private void performSilently(SystemSetup.Process process) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java index dbeb3e7d..d158d62f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/ExceptionThrowingItemModelAttribute.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; import java.util.Locale; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java index 2b0a5efd..8aa08f42 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryDynamicAttributeHandler.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; import de.hybris.platform.servicelayer.model.AbstractItemModel; import de.hybris.platform.servicelayer.model.attribute.DynamicAttributeHandler; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java index d169034b..06870990 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryDynamicItemModelAttribute.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; import java.util.*; import java.util.function.Function; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java similarity index 75% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java index 0338a449..007e631e 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemAwareAttribute.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; import de.hybris.platform.servicelayer.model.AbstractItemModel; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java index ca8988e1..1940a7df 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelAttribute.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; import java.util.*; import java.util.function.Function; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java index d7abd301..e17d2f92 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelContext.java @@ -1,7 +1,7 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.attributeFor; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.localizedAttributeFor; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.attributeFor; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.localizedAttributeFor; import java.io.ObjectStreamException; import java.util.*; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java similarity index 69% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java index 30072ce9..7e776aa2 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryItemModelContextAccessor.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; public interface InMemoryItemModelContextAccessor { void save(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java index 0cb5189c..194ece75 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryLocalizedItemModelAttribute.java @@ -1,6 +1,6 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.getDefaultLocale; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.getDefaultLocale; import java.util.*; import java.util.function.Function; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java index 89d4bbd4..8f3949dd 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/InMemoryModelFactory.java @@ -1,6 +1,6 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryItemModelContext.contextWithAttributes; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryItemModelContext.contextWithAttributes; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java index 3dca93b5..4e98078f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/itemmodel/ItemModelAttribute.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.itemmodel; +package me.cxdev.commerce.toolkit.testing.itemmodel; import java.util.List; import java.util.Locale; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java index 754c0c85..0a5b1c3b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/catalog/CatalogVersionServiceFake.java @@ -1,6 +1,6 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.catalog; +package me.cxdev.commerce.toolkit.testing.testdoubles.catalog; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; import java.util.Collection; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java index ac8f2305..d065a3f5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/catalog/ClassificationServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.catalog; +package me.cxdev.commerce.toolkit.testing.testdoubles.catalog; import static org.apache.commons.collections4.ListUtils.emptyIfNull; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java index dd425995..6ae10542 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/config/ConfigurationServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.config; +package me.cxdev.commerce.toolkit.testing.testdoubles.config; import de.hybris.platform.servicelayer.config.ConfigurationService; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java index 5478aa2f..76130ddb 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/config/MessageSourceStub.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.config; +package me.cxdev.commerce.toolkit.testing.testdoubles.config; import java.util.Arrays; import java.util.HashMap; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java index d5704d89..1ef2369a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/DummyTypeService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import java.util.Collection; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java index 2300b3fe..ffbf8f45 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/I18NServiceStubForLocales.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import java.util.ArrayList; import java.util.Currency; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java index d2115a46..3021f535 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InMemoryModelService.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; @@ -13,7 +13,7 @@ import de.hybris.platform.servicelayer.model.AbstractItemModel; import de.hybris.platform.servicelayer.model.ModelService; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; public class InMemoryModelService implements ModelService { private List removedItemModels = new ArrayList<>(); diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java index d4f94d1e..ce3137d9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InMemoryModelServiceTests.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java index adbe3638..9b4b6940 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/InterceptorContextStub.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import java.util.ArrayList; import java.util.List; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java index b62c8222..c05be458 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ModelServiceFake.java @@ -1,6 +1,6 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; -import static tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; +import static me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory.createTestableItemModel; import java.util.Collection; import java.util.HashMap; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java index 2b61367a..3aa9d8d1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ModelServiceSpy.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import java.util.ArrayList; import java.util.Arrays; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java index 611ef298..9bd9da2b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/core/ValidationServiceSpy.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.core; +package me.cxdev.commerce.toolkit.testing.testdoubles.core; import java.util.Collection; import java.util.Set; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java index 54a72a72..afbecae1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/dao/GenericDaoFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.dao; +package me.cxdev.commerce.toolkit.testing.testdoubles.dao; import java.util.ArrayList; import java.util.List; @@ -9,7 +9,7 @@ import de.hybris.platform.servicelayer.internal.dao.GenericDao; import de.hybris.platform.servicelayer.internal.dao.SortParameters; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; public class GenericDaoFake implements GenericDao { public static GenericDao throwingException(Class exceptionToThrow) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java similarity index 86% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java index fb077782..18cdd659 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/dao/GenericDaoFakeThrowingException.java @@ -1,6 +1,6 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.dao; +package me.cxdev.commerce.toolkit.testing.testdoubles.dao; -import static tools.sapcx.commerce.toolkit.testing.utils.ReflectionUtils.throwException; +import static me.cxdev.commerce.toolkit.testing.utils.ReflectionUtils.throwException; import java.util.List; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java index 6db25702..d264fb1c 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/datamapping/ConverterSpy.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.datamapping; +package me.cxdev.commerce.toolkit.testing.testdoubles.datamapping; import java.util.ArrayList; import java.util.Arrays; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java similarity index 89% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java index 716f2239..e1876734 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/email/HtmlEmailGeneratorFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.email; +package me.cxdev.commerce.toolkit.testing.testdoubles.email; import java.util.Collection; import java.util.Locale; @@ -7,9 +7,8 @@ import org.apache.commons.mail2.core.EmailException; import org.apache.commons.mail2.jakarta.HtmlEmail; -import tools.sapcx.commerce.toolkit.email.HtmlEmailGenerator; - import jakarta.mail.internet.InternetAddress; +import me.cxdev.commerce.toolkit.email.HtmlEmailGenerator; public class HtmlEmailGeneratorFake implements HtmlEmailGenerator { @Override diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java similarity index 93% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java index d32c6a55..556cf0e5 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/event/EventServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.event; +package me.cxdev.commerce.toolkit.testing.testdoubles.event; import java.util.HashSet; import java.util.Set; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java index a1a88294..68c042ae 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/event/EventServiceSpy.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.event; +package me.cxdev.commerce.toolkit.testing.testdoubles.event; import java.util.ArrayList; import java.util.HashSet; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java index dce8c42f..cb783a39 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/AddressBuilder.java @@ -1,11 +1,11 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.models; +package me.cxdev.commerce.toolkit.testing.testdoubles.models; import de.hybris.platform.core.model.c2l.CountryModel; import de.hybris.platform.core.model.c2l.RegionModel; import de.hybris.platform.core.model.user.AddressModel; import de.hybris.platform.core.model.user.TitleModel; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; public class AddressBuilder { public static AddressBuilder emptyAddress() { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java similarity index 96% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java index b979239d..0b1d514a 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CategoryBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.models; +package me.cxdev.commerce.toolkit.testing.testdoubles.models; import static org.apache.commons.collections4.CollectionUtils.emptyIfNull; @@ -12,7 +12,7 @@ import de.hybris.platform.core.model.product.ProductModel; import de.hybris.platform.servicelayer.model.attribute.DynamicAttributeHandler; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; public class CategoryBuilder { public static CategoryBuilder category(String code) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java similarity index 91% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java index e94ea4aa..4820a750 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CategoryTreeBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.models; +package me.cxdev.commerce.toolkit.testing.testdoubles.models; import java.util.ArrayList; import java.util.List; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java similarity index 74% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java index 7298830d..f09adbf1 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/CustomPropertyBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.models; +package me.cxdev.commerce.toolkit.testing.testdoubles.models; import de.hybris.platform.core.model.ItemModel; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java similarity index 94% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java index 6b2d4774..c051a71f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/models/ProductBuilder.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.models; +package me.cxdev.commerce.toolkit.testing.testdoubles.models; import static org.apache.commons.collections4.MapUtils.emptyIfNull; @@ -10,7 +10,7 @@ import de.hybris.platform.core.model.product.ProductModel; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; public class ProductBuilder { public static ProductBuilder product(String code) { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java index 7d077ca2..b490c35f 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/search/FlexibleSearchServiceStub.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.search; +package me.cxdev.commerce.toolkit.testing.testdoubles.search; import java.util.ArrayList; import java.util.Arrays; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java index 8545251a..af86d378 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/SessionServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.user; +package me.cxdev.commerce.toolkit.testing.testdoubles.user; import java.util.Map; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/TenantDummy.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/TenantDummy.java similarity index 99% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/TenantDummy.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/TenantDummy.java index f20f4d5b..534f2b13 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/TenantDummy.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/TenantDummy.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.user; +package me.cxdev.commerce.toolkit.testing.testdoubles.user; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java similarity index 98% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java index 22372268..c7fb4b1b 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/testdoubles/user/UserServiceFake.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.testdoubles.user; +package me.cxdev.commerce.toolkit.testing.testdoubles.user; import static org.apache.commons.collections4.SetUtils.emptyIfNull; @@ -22,7 +22,7 @@ import de.hybris.platform.servicelayer.user.exceptions.CannotDecodePasswordException; import de.hybris.platform.servicelayer.user.exceptions.PasswordEncoderNotFoundException; -import tools.sapcx.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; +import me.cxdev.commerce.toolkit.testing.itemmodel.InMemoryModelFactory; public class UserServiceFake implements UserService { diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/utils/MockingUtils.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/utils/MockingUtils.java similarity index 95% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/utils/MockingUtils.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/utils/MockingUtils.java index e10a6f1c..591979d7 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/utils/MockingUtils.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/utils/MockingUtils.java @@ -1,9 +1,9 @@ -package tools.sapcx.commerce.toolkit.testing.utils; +package me.cxdev.commerce.toolkit.testing.utils; +import static me.cxdev.commerce.toolkit.testing.utils.ReflectionUtils.isVoid; +import static me.cxdev.commerce.toolkit.testing.utils.ReflectionUtils.isVoidMethod; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static tools.sapcx.commerce.toolkit.testing.utils.ReflectionUtils.isVoid; -import static tools.sapcx.commerce.toolkit.testing.utils.ReflectionUtils.isVoidMethod; import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/utils/ReflectionUtils.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/utils/ReflectionUtils.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/utils/ReflectionUtils.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/utils/ReflectionUtils.java index 0470fc6c..35aea682 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/utils/ReflectionUtils.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/utils/ReflectionUtils.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.utils; +package me.cxdev.commerce.toolkit.testing.utils; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java similarity index 90% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java index fe59c463..65b98eb9 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/verifier/DelegationPatternVerifier.java @@ -1,11 +1,11 @@ -package tools.sapcx.commerce.toolkit.testing.verifier; +package me.cxdev.commerce.toolkit.testing.verifier; +import static me.cxdev.commerce.toolkit.testing.utils.MockingUtils.injectDelegateMock; +import static me.cxdev.commerce.toolkit.testing.utils.MockingUtils.invokeWithParameterStubs; +import static me.cxdev.commerce.toolkit.testing.utils.MockingUtils.prepareMethodInvocationOnMock; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockingDetails; -import static tools.sapcx.commerce.toolkit.testing.utils.MockingUtils.injectDelegateMock; -import static tools.sapcx.commerce.toolkit.testing.utils.MockingUtils.invokeWithParameterStubs; -import static tools.sapcx.commerce.toolkit.testing.utils.MockingUtils.prepareMethodInvocationOnMock; import java.lang.reflect.Method; import java.util.Arrays; @@ -15,7 +15,7 @@ import org.mockito.exceptions.base.MockitoException; import org.mockito.invocation.Invocation; -import tools.sapcx.commerce.toolkit.testing.utils.MockingUtils; +import me.cxdev.commerce.toolkit.testing.utils.MockingUtils; public class DelegationPatternVerifier { private T instanceUnderTest; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java similarity index 97% rename from core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java index e7d4be38..d6f6c818 100644 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/testsrc/tools/sapcx/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/testsrc/me/cxdev/commerce/toolkit/testing/verifier/InstalledExtensionVerifier.java @@ -1,4 +1,4 @@ -package tools.sapcx.commerce.toolkit.testing.verifier; +package me.cxdev.commerce.toolkit.testing.verifier; import static org.apache.commons.collections4.SetUtils.emptyIfNull; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_en.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_en.properties deleted file mode 100644 index 4b5b9a74..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/localization/sapcommercetoolkit-locales_en.properties +++ /dev/null @@ -1,4 +0,0 @@ -type.LocallyStoredEmail.name=Local Email -type.LocallyStoredEmail.description=Email stored locally by a fake service instead of sending them via SMTP. -type.LocallyStoredEmail.sender.name=Sender -type.LocallyStoredEmail.recipients.name=Recipients \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels.properties deleted file mode 100644 index edd7abee..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels.properties +++ /dev/null @@ -1,2 +0,0 @@ -sapcxtools_treenode_main=SAP CX Tools -sapcxtools_treenode_fakemail=Fake Mails \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_de.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_de.properties deleted file mode 100644 index edd7abee..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_de.properties +++ /dev/null @@ -1,2 +0,0 @@ -sapcxtools_treenode_main=SAP CX Tools -sapcxtools_treenode_fakemail=Fake Mails \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_en.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_en.properties deleted file mode 100644 index edd7abee..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-backoffice-labels/labels_en.properties +++ /dev/null @@ -1,2 +0,0 @@ -sapcxtools_treenode_main=SAP CX Tools -sapcxtools_treenode_fakemail=Fake Mails \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-spring.xml deleted file mode 100644 index 6630d95c..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit-spring.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-fake-spring.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-fake-spring.xml deleted file mode 100644 index 8fd768b2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcommercetoolkit/resources/sapcommercetoolkit/thymeleafemails-fake-spring.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/buildcallbacks.xml b/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/buildcallbacks.xml deleted file mode 100644 index 63e297db..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxbackoffice/buildcallbacks.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxenvconfig/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/CONTRIBUTING.md b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/CONTRIBUTING.md deleted file mode 100644 index 572289da..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -This repository has a special setup for contributing. - -Please read the [CONTRIBUTING.md from the extensions repository](https://github.com/sapcxtools/workspace/blob/main/CONTRIBUTING.md) which -will guide you through the process. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels.properties deleted file mode 100644 index 06a5b78f..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/executereport/labels/labels.properties +++ /dev/null @@ -1,4 +0,0 @@ -executereport.confirmation=Do you want to execute the query and download the report? -executereport.errors.search=Execution of your query resulted in an error: {0} -executereport.errors.create=The report was not generated. -executereport.errors.fileread=The generated file was corrupted. diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels.properties deleted file mode 100644 index 1686cb36..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/backoffice/resources/widgets/actions/validatereport/labels/labels.properties +++ /dev/null @@ -1,2 +0,0 @@ -validatereport.successful=The query was executed successfully and returned {0} results. -validatereport.errors.query=The query encountered errors: {0} diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/project.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/project.properties deleted file mode 100644 index 724cd41c..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/project.properties +++ /dev/null @@ -1,26 +0,0 @@ -# ---------------------------------------------------------------------------- -# Copyright (c) 2025 SAP CX Tools -# ---------------------------------------------------------------------------- - -# Location of the file for the global platform spring application context -sapcxreporting.application-context=sapcxreporting-spring.xml - -# Report job config -sapcxreporting.report.job.code=reportGeneratorJobPerformable - -# CSV format settings -sapcxreporting.report.format.csv.encoding=UTF-8 -sapcxreporting.report.format.csv.commentchar=# -sapcxreporting.report.format.csv.fieldseparator=; -sapcxreporting.report.format.csv.textseparator=" -sapcxreporting.report.format.csv.linebreak=\n - -# Excel format settings -sapcxreporting.report.format.excel.highlightheader=false -sapcxreporting.report.format.excel.alternatinglines=false -sapcxreporting.report.format.excel.freezeheader=true -sapcxreporting.report.format.excel.activatefilter=true -sapcxreporting.report.format.excel.autosizecolumns=true - -# Sample data -sapcommercetoolkit.impeximport.sampledata.8100.reports=/sapcxreporting/sampledata/default-reports.impex \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales.properties deleted file mode 100644 index 0a9fec5b..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/localization/sapcxreporting-locales.properties +++ /dev/null @@ -1,44 +0,0 @@ -type.ReportGenerationSchedule.name=Report Schedule -type.ReportGenerationSchedule.reports.name=Reports - -type.QueryReportConfiguration.name=Query Report -type.QueryReportConfiguration.searchQuery.name=Query -type.QueryReportConfiguration.searchQuery.description=Enter the query in FlexibleSearch Syntax -type.QueryReportConfiguration.id.name=ID -type.QueryReportConfiguration.title.name=Title -type.QueryReportConfiguration.description.name=Description -type.QueryReportConfiguration.emailRecipients.name=E-Mail recipients -type.QueryReportConfiguration.emailRecipients.description=E-Mail addresses of the recipients -type.QueryReportConfiguration.exportFormat.name=Export format -type.QueryReportConfiguration.compress.name=Compress Report? -type.QueryReportConfiguration.compress.description=If set to true, reports are compressed for sending via e-mail. -type.QueryReportConfiguration.emailEmptyResult.name=Email empty result? -type.QueryReportConfiguration.emailEmptyResult.description=If set to true, reports are sent even if result is empty. -type.QueryReportConfiguration.parameters.name=Parameters -type.QueryReportConfiguration.csvEncoding.name=Encoding -type.QueryReportConfiguration.csvCommentChar.name=Comment -type.QueryReportConfiguration.csvFieldSeparator.name=Separator -type.QueryReportConfiguration.csvTextSeparator.name=Quote -type.QueryReportConfiguration.csvLineBreak.name=Line break -type.QueryReportConfiguration.excelHighlightHeader.name=Highlight header -type.QueryReportConfiguration.excelFreezeHeader.name=Freeze header -type.QueryReportConfiguration.excelActivateFilter.name=Activate filter -type.QueryReportConfiguration.excelAutosizeColumns.name=Autosize columns -type.QueryReportConfiguration.excelAlternatingLines.name=Alternating lines -type.QueryReportConfiguration.schedules.name=Schedules - -type.QueryReportConfigurationParameter.name=Configuration Parameter -type.QueryReportConfigurationParameter.name.name=Name -type.QueryReportConfigurationParameter.item.name=Item -type.QueryReportConfigurationParameter.itemList.name=Item List - -type.CatalogVersionConfigurationParameter.name=CatalogVersion Parameter -type.CategoryConfigurationParameter.name=Category Parameter -type.ProductConfigurationParameter.name=Product Parameter -type.PrincipalConfigurationParameter.name=Principal Parameter -type.PropertyConfigurationParameter.name=Property Parameter - -type.ConfigurationPropertyAccessor.name=Property Accessor -type.ConfigurationPropertyAccessor.description=Allow to inject configuration properties into flexible search queries. -type.ConfigurationPropertyAccessor.key.name=Key -type.ConfigurationPropertyAccessor.value.name=Value \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels.properties deleted file mode 100644 index b487b68a..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels.properties +++ /dev/null @@ -1,11 +0,0 @@ -sapcxreporting.treenode.reporting=Reporting -sapcxreporting.treenode.reporting.parameters=Parameter -sapcxreporting.backoffice.tab.report=Report -sapcxreporting.backoffice.section.report=Configuration -sapcxreporting.backoffice.panel.general=General -sapcxreporting.backoffice.panel.query=Query -sapcxreporting.backoffice.tab.reportformat=Format -sapcxreporting.backoffice.section.reportformat.csv=CSV settings -sapcxreporting.backoffice.section.reportformat.excel=Excel settings -sapcxreporting.backoffice.tab.reportschedules=Schedules -sapcxreporting.backoffice.section.reportschedules=Settings diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_de.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_de.properties deleted file mode 100644 index 6ac517f2..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_de.properties +++ /dev/null @@ -1,11 +0,0 @@ -sapcxreporting.treenode.reporting=Reporting -sapcxreporting.treenode.reporting.parameters=Parameter -sapcxreporting.backoffice.tab.report=Bericht -sapcxreporting.backoffice.section.report=Konfiguration -sapcxreporting.backoffice.panel.general=Allgemein -sapcxreporting.backoffice.panel.query=Anfrage -sapcxreporting.backoffice.tab.reportformat=Formatierung -sapcxreporting.backoffice.section.reportformat.csv=CSV Einstellungen -sapcxreporting.backoffice.section.reportformat.excel=Excel Einstellungen -sapcxreporting.backoffice.tab.reportschedules=Zeitplan -sapcxreporting.backoffice.section.reportschedules=Einstellungen \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_en.properties b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_en.properties deleted file mode 100644 index e13492d3..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/resources/sapcxreporting-backoffice-labels/labels_en.properties +++ /dev/null @@ -1,11 +0,0 @@ -sapcxreporting.treenode.reporting=Reporting -sapcxreporting.treenode.reporting.parameters=Parameter -sapcxreporting.backoffice.tab.report=Report -sapcxreporting.backoffice.section.report=Configuration -sapcxreporting.backoffice.panel.general=General -sapcxreporting.backoffice.panel.query=Query -sapcxreporting.backoffice.tab.reportformat=Format -sapcxreporting.backoffice.section.reportformat.csv=CSV settings -sapcxreporting.backoffice.section.reportformat.excel=Excel settings -sapcxreporting.backoffice.tab.reportschedules=Schedules -sapcxreporting.backoffice.section.reportschedules=Settings \ No newline at end of file diff --git a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGenerator.java b/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGenerator.java deleted file mode 100644 index 6dfa96b9..00000000 --- a/core-customize/hybris/bin/custom/sapcxtools/sapcxreporting/src/tools/sapcx/commerce/reporting/generator/ReportGenerator.java +++ /dev/null @@ -1,12 +0,0 @@ -package tools.sapcx.commerce.reporting.generator; - -import java.io.File; - -import tools.sapcx.commerce.reporting.report.data.QueryFileConfigurationData; -import tools.sapcx.commerce.reporting.search.GenericSearchResult; - -public interface ReportGenerator { - boolean createReport(QueryFileConfigurationData report, GenericSearchResult searchResult, File file); - - String getExtension(); -} diff --git a/core-customize/hybris/config/cloud/common.properties b/core-customize/hybris/config/cloud/common.properties index 70de6a84..8f361947 100644 --- a/core-customize/hybris/config/cloud/common.properties +++ b/core-customize/hybris/config/cloud/common.properties @@ -67,4 +67,4 @@ update.localizeTypes.enabled=true update.rebuildLucenesearchIndexes.enabled=false # Import localized impex files automatically -sapcommercetoolkit.impeximport.environment.supportlocalizedfiles=true +cxdevtoolkit.impeximport.environment.supportlocalizedfiles=true diff --git a/core-customize/hybris/config/cloud/persona/development.properties b/core-customize/hybris/config/cloud/persona/development.properties index e582080e..bde55aec 100644 --- a/core-customize/hybris/config/cloud/persona/development.properties +++ b/core-customize/hybris/config/cloud/persona/development.properties @@ -1,8 +1,8 @@ # cloud/persona/development.properties # Avoid sending outbound emails by storing them in the database -spring.profiles.active=sapcommercetools-fake-localmails,sapcommercetools-modelservice-failurelogging -sapcommercetoolkit.fakes.htmlEmailService.localstorage.method=database +spring.profiles.active=cxdevtoolkit-fake-localmails,cxdevtoolkit-modelservice-failurelogging +cxdevtoolkit.fakes.htmlEmailService.localstorage.method=database # Mock Payment provider sop.post.url=${ccv2.services.api.url.0}/acceleratorservices/sop-mock/process @@ -11,13 +11,13 @@ sop.post.url=${ccv2.services.api.url.0}/acceleratorservices/sop-mock/process disable.login.for.imported.user.interceptor.enabled=false # Sample & Test data -sapcommercetoolkit.impeximport.environment.importsampledata=true -sapcommercetoolkit.impeximport.environment.importtestdata=true +cxdevtoolkit.impeximport.environment.importsampledata=true +cxdevtoolkit.impeximport.environment.importtestdata=true #*****************************************************************************# # Testing -testclasses.extensions=sapcommercetoolkit,sapcxbackoffice,sapcxreporting,sapcxenvconfig -testclasses.packages=tools.sapcx.commerce.* +testclasses.extensions=cxdevtoolkit,cxdevbackoffice,cxdevreporting,cxdevenvconfig +testclasses.packages=me.cxdev.* testclasses.suppress.junit.tenant=true testclasses.reportdir=${HYBRIS_LOG_DIR}/junit/test-results diff --git a/core-customize/hybris/config/cloud/persona/production.properties b/core-customize/hybris/config/cloud/persona/production.properties index 8a8a2774..7de027e7 100644 --- a/core-customize/hybris/config/cloud/persona/production.properties +++ b/core-customize/hybris/config/cloud/persona/production.properties @@ -4,5 +4,5 @@ disable.login.for.imported.user.interceptor.enabled=true # Sample & Test data -sapcommercetoolkit.impeximport.environment.importsampledata=false -sapcommercetoolkit.impeximport.environment.importtestdata=false +cxdevtoolkit.impeximport.environment.importsampledata=false +cxdevtoolkit.impeximport.environment.importtestdata=false diff --git a/core-customize/hybris/config/cloud/persona/staging.properties b/core-customize/hybris/config/cloud/persona/staging.properties index 1302a616..05108bfe 100644 --- a/core-customize/hybris/config/cloud/persona/staging.properties +++ b/core-customize/hybris/config/cloud/persona/staging.properties @@ -1,12 +1,12 @@ # cloud/persona/staging.properties # Avoid sending outbound emails by storing them in the database -spring.profiles.active=sapcommercetools-fake-localmails,sapcommercetools-modelservice-failurelogging -sapcommercetoolkit.fakes.htmlEmailService.localstorage.method=database +spring.profiles.active=cxdevtoolkit-fake-localmails,cxdevtoolkit-modelservice-failurelogging +cxdevtoolkit.fakes.htmlEmailService.localstorage.method=database # Deactivate DisableLoginForImportedUserInterceptor for staging purposes disable.login.for.imported.user.interceptor.enabled=false # Sample & Test data -sapcommercetoolkit.impeximport.environment.importsampledata=true -sapcommercetoolkit.impeximport.environment.importtestdata=false +cxdevtoolkit.impeximport.environment.importsampledata=true +cxdevtoolkit.impeximport.environment.importtestdata=false diff --git a/core-customize/hybris/config/localextensions.xml b/core-customize/hybris/config/localextensions.xml index 00d384c4..14f2957f 100644 --- a/core-customize/hybris/config/localextensions.xml +++ b/core-customize/hybris/config/localextensions.xml @@ -3,10 +3,13 @@ - - - - - + + + + + + + + diff --git a/core-customize/hybris/config/solr/instances/cloud/configsets b/core-customize/hybris/config/solr/instances/cloud/configsets new file mode 120000 index 00000000..c477a0ed --- /dev/null +++ b/core-customize/hybris/config/solr/instances/cloud/configsets @@ -0,0 +1 @@ +../../../../../solr/server/solr/configsets \ No newline at end of file diff --git a/core-customize/hybris/config/solr/instances/cloud/log4j2.xml b/core-customize/hybris/config/solr/instances/cloud/log4j2.xml new file mode 100644 index 00000000..a53f2f32 --- /dev/null +++ b/core-customize/hybris/config/solr/instances/cloud/log4j2.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}%notEmpty{ t:%X{trace_id}}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n + + + + + + + + %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}%notEmpty{ t:%X{trace_id}}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n + + + + + + + + + + + + + %maxLen{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%notEmpty{c:%X{collection}}%notEmpty{ s:%X{shard}}%notEmpty{ r:%X{replica}}%notEmpty{ x:%X{core}}%notEmpty{ t:%X{trace_id}}] %c{1.} %m%notEmpty{ =>%ex{short}}}{10240}%n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core-customize/hybris/config/solr/instances/cloud/security.json b/core-customize/hybris/config/solr/instances/cloud/security.json new file mode 100644 index 00000000..110273ff --- /dev/null +++ b/core-customize/hybris/config/solr/instances/cloud/security.json @@ -0,0 +1,156 @@ +{ + "authentication": { + "class": "solr.BasicAuthPlugin", + "blockUnknown": true, + "credentials": { + "solrclient": "2NtmibBImstZ5S07bQ2TdRkNdNEsXkv/JCkp8YeiwIU= riWS4qMkR+caBGL1uuUToIIYEz/bxDN5LycQ44BprNs=", + "solrindexingclient": "Op+mSXqBgJlMEixH25vTnCgC8KayBgKNGRP3i3bLr/4= uFXwaAKtYXjwy32QfkKL/ASA3X3Vlq1XW4DykYexNTw=", + "solrserver": "E7h3Zq+hgRyA+1Nx28jL+AArUlf6JbJRR+6cOAqfQHA= 481lwUYp4qmY6Li+oakSVnXwYoXy0mWYN/1sWE5YNdc=", + "solradmin": "Hbs0wnLz1WErQHXQUzm5AHrvc2ZkWPl5iHXPeJOgp8I= Lz4KoANtWA/UqKy8yAVZmapQ3UJPlg0MjlBZEJT/kak=" + } + }, + "authorization": { + "class": "solr.RuleBasedAuthorizationPlugin", + "permissions": [ + { + "path": "read", + "role": "index-read" + }, + { + "name": "read", + "role": "index-read" + }, + { + "name": "update", + "role": "index-write" + }, + { + "name": "core-admin-read", + "role": "index-write" + }, + { + "name": "core-admin-edit", + "role": "index-write" + }, + { + "name": "collection-admin-read", + "role": "index-write" + }, + { + "name": "collection-admin-edit", + "role": "index-write" + }, + { + "name": "schema-read", + "role": "index-write" + }, + { + "name": "schema-edit", + "role": "index-write" + }, + { + "collection": "*", + "path": "/schema/managed/*", + "role": "index-write" + }, + { + "collection": "*", + "path": "/schema/analysis/*", + "role": "index-write" + }, + { + "collection": "*", + "path": "/admin/luke", + "role": "index-write" + }, + { + "collection": null, + "path": "/admin/cores", + "params": { + "action": [ + "STATUS" + ] + }, + "role": "index-write" + }, + { + "collection": null, + "path": "/admin/collections", + "params": { + "action": [ + "LIST" + ] + }, + "role": "index-write" + }, + { + "collection": null, + "path": "/admin/info/system", + "method": "GET", + "role": "system-info-read" + }, + { + "name": "config-read", + "role": "admin" + }, + { + "name": "config-edit", + "role": "admin" + }, + { + "name": "security-read", + "role": "admin" + }, + { + "name": "security-edit", + "role": "admin" + }, + { + "path": "/", + "role": null + }, + { + "path": "/libs/*", + "role": null + }, + { + "path": "/js/*", + "role": null + }, + { + "path": "/img/*", + "role": null + }, + { + "path": "/css/*", + "role": null + }, + { + "name": "all", + "role": "admin" + } + ], + "user-role": { + "solrclient": [ + "index-read" + ], + "solrindexingclient": [ + "index-read", + "index-write", + "system-info-read" + ], + "solrserver": [ + "index-read", + "index-write", + "system-info-read", + "admin" + ], + "solradmin": [ + "index-read", + "index-write", + "system-info-read", + "admin" + ] + } + } +} diff --git a/core-customize/hybris/config/solr/instances/cloud/solr.p12 b/core-customize/hybris/config/solr/instances/cloud/solr.p12 new file mode 100644 index 0000000000000000000000000000000000000000..122abe469b245cac478d28a0bfbfcb60e4af178d GIT binary patch literal 2733 zcmV;e3R3kjf(oeu0Ru3C3U3ApDuzgg_YDCD0ic2kU<85+Trh$PSTKSG4+aS;hDe6@ z4FLxRpn?SeFoFd90s#Opf&}#j2`Yw2hW8Bt2LUh~1_~;MNQU|cBQ zMr&^Sm$`I&W7?$zP}~hh4Kv2(K5(G}b5K)2m@0w}I`j(U$({G%B#dLM)H8Lgwke90 z63L|YqNcW4Gnn<8A%uRutR1DR%WfeS*)e@6D8*sxqPaqSr~X9IJeT(LT&J-V)zllB`Z;*SN+pL zfbbRUDTm2iDG`x8z0OuFS@@+al>$IeB3$q8@eT-8R}siLr8fh_N!D<{yCl$~N& z`+&6foHw+RvM0t*z0WxBr_iDb#V`+GD&&;#@w-8)5U_%|vj>}KqdNgWT+ExYEX`*X zOz=Bf0a^kJNoDbnGvV54I(i7As(Lu$bM2mKbs_hHSKe@SBo@BpqM(bKM$yypukka@ ziU&Mw)@shMvm@8;u)XO1^a6*LDk-o^qX9}7Y>ZujURVOa?Z2atyJ9kkCbYjTH$`{> zvQd_;4)kYv6~c;Zgie*S2|d6p>7RVh*P>Apn2yOD}l`P&>ot>YcIrxkN?`pEvQk$y?3(-qx#xktGiiF;; z8wo_xxtQymwTZ{+DiGflw<5?wtH?3i^-5*#{Q1|+PWZ*}SQEUHe?dLB4MXZKEG<$j zYvat%6>Hh2BktV7iU`(8Q8mN-ZW#|n1*0r0Yo8uz%zIOqRx0@Qc!mf|1o^uiVM!gL zJG`#194^^tr+A*tUuzeDOFx_z$dQC@KoXQkYmDHTget;3RB|n&*x3;d@~XM+4Mf7= zbtSgTlBX}z*{;mMHA7`i%fj+NN(r~Ln+fiWx3ME|7MsK~GJhpxYTutjaPd9MZUap~ zOnWyMfWgEdjk2~(Kwrf#^i8%wx@X+@C@_I}9VxgfcnAX7fm=M_QERe*{+r#rG`XDl zTZ;bi6r$No*HN*v%^c>pYm5nk0#itvAg&j6#BL!aEb*7?tr_pKEbv5oyCVoeUxG%s zO7ZUyhs1;Y4bS*vrFuFg{sYx@bbG-pzvKbyor`!aN9t#%_!r&_p`L?`(IjVHMUw_k z1334TLO{iyGz);di0=`wD``zAI#an=J%0TVEZThW5RGmo3V*OZFoFd^1_>&LNQUCUcwe`P9n@hOEI;2 zj!S9XEHS!cH`9+gh?9698ZIDD_y*y9;+t~QJLc|2HmA8j>E_{> zq0VGuNp^srF#Hhddg#Mtd(T4O>D_r6TS!P=vFeR6AVPXHKMp96dKEzLgfPLPpZsj&6OX~}bxHr^7xa|o1X>IZA z4oEevrnU4r*3gv7K?k~>{`Wt{bgp%aWS;L@qL4s7Fn>zGS!>Kb44fkF`NDW2IO z%;l;1z#%~UWYz-TWqb({l7Nm)VkS{QG}COK$?3KSkP+KEvD~BcMT0T(OgcJNoB3{* z{-%Gv7sF<6QDBzK@OAL{!GI7Z)wURh$10?RYVH;y{h|JimxETRBsldqYd^*@G0O&f zAsV~YrcJNeL3$RIx#x!DEO8N#);vX&!2WSO%Rh~OQZ59t6}hjXSsrr}&>l{-YTLpb zpPk|T-`?PYqmP(R98~ngXyj1sscL0GjojG5OlGO3+l=4HPc8^7AGve)9i6lRY>wfz zvZ54s!yngv8l`Hh2l6FVeCi3o!;Lm7(|J!-Lf z_?8XZ`_tT1Feki@7cGGylEKz(E54W%0Cc1;nPNFqEzh`#G60YZEiyzBf+v37%uX>S zFe3&DDuzgg_YDCF6)_eB6mJl|m=L=bF)lg+xgkX==j{CG=`b-cAutIB1uG5%0vZJX n1Qe+JO_L9Ly(|Urt1!;E<+!PZhP(s_sq;tf`3F6f0s;sC7Vikg literal 0 HcmV?d00001 diff --git a/core-customize/hybris/config/solr/instances/cloud/solr.xml b/core-customize/hybris/config/solr/instances/cloud/solr.xml new file mode 100644 index 00000000..ff7215a7 --- /dev/null +++ b/core-customize/hybris/config/solr/instances/cloud/solr.xml @@ -0,0 +1,40 @@ + + + + ${solr.data.home:./} + ${solr.modules:analysis-extras,hybris} + + + ${host:} + ${jetty.port:8983} + ${hostContext:solr} + + ${genericCoreNodeNames:true} + + ${zkClientTimeout:30000} + ${distribUpdateSoTimeout:600000} + ${distribUpdateConnTimeout:60000} + + + ${zkACLProvider:org.apache.solr.common.cloud.DefaultZkACLProvider} + ${zkCredentialsProvider:org.apache.solr.common.cloud.DefaultZkCredentialsProvider} + ${zkCredentialsInjector:org.apache.solr.common.cloud.DefaultZkCredentialsInjector} + + + + + + ${distributedClusterStateUpdates:true} + ${distributedCollectionConfigSetExecution:true} + ${minStateByteLenForCompression:-1} + ${stateCompressor:org.apache.solr.common.util.ZLibCompressor} + + + + ${socketTimeout:600000} + ${connTimeout:60000} + + + + + diff --git a/core-customize/hybris/config/solr/instances/cloud/solr_client.p12 b/core-customize/hybris/config/solr/instances/cloud/solr_client.p12 new file mode 100644 index 0000000000000000000000000000000000000000..ba8edf8b2f5ccaf9cf94ec5dd475c0ffa6dc2adf GIT binary patch literal 2693 zcmV;03VQW0f(n5G0Ru3C3P%PBDuzgg_YDCD0ic2kI0S+UG%$h+Fff7y=LQKXhDe6@ z4FLxRpn?S0FoFcs0s#Opf&|S52`Yw2hW8Bt2LUh~1_~;MNQU85$P=6;Dp}ckbSpeZ0_guJAmY@Hhy?|%2|zg%%&TP>4P#cUX2~_1!q^fwl@}Jj z6vyxrlvI;9R4WRg=0sYA2mS(rLIyRxPqZQ^1D7Xb$Ex@^7SkXWXlJ+DqJ2@( z+D+qf6l-*Yr{B8vu_*=y_Q9?>?h(Aun*e1K@WM#u$%@;OWw_TNJ(W({a$8jy)gyHk zYIqh7DzLzmUbQA*xT>pjyGNe4U~(VpbvDSbr}6(WTQ&)7 z)h2Zz&rDG`f?t1Rz$*oP<%4gVSQqetK6(nG=Phym+5n)^#+r!QO@>7&dTBV$|Ci_E z=EI`_v#uq_BS5@WLz`m-8DPJ4%Pn$Yw z7~vLFlGV&!fbZ>9B?AW+Ssob!yiSqinT@HqJUusAiD7d}cwetemclvBn$a^5i~`edKqL6b6BftM_)s*{a)-F! zglyQDhEA$`_O;|qs~yRF?pG2ZWiF->Af;RY9YyF*FyOI1{JYttwQ)as(M|oAMNVuh zyDdj~#?s0V0_75T8wBCavmR!oar@e*X**v49fSTKZ{B$>6uLIT%a*iv4HumTGGw?Q z(wAVX>;x?hIs0Eh>imH2*V4;8u$DWKf}@eCl|HU6c7SI>&A9cZ)M*dCg-JY2W5*1) z^%(z5Yp8R z{~hVG<_oB2Z4q-6vm6pHfkIO&LNQUqc)YCe;prk4gP zR7v`DgQh#_LLX^du(t(qwcbDA3wEA2JSJLkAjf*dxozLb{S6gkoKlg?e$&FpGY9?J z(}DaKh9u1>!0t8xKCc_|EKdU)DRrE-+Pf$|FA!Y8*!G#{0=*_kv?X!?8WvB1Ep7^? znf@~#`Ir&9lSyA-`R6masBJgs5W=SxzCP=UbjH`Y<}N2@oZdEh_fx=Aao92BQc<%l zwsV2_|IcH$+~$>OPCnPbPheVYN|K-z21~PEU$+^jM{&%B&b_T)7qLZXvEbCkK8MXZ z>B6j}%Sk&5O_AMC`rpsTRwaGb6?0pwbBL6OF?b~u%5B(2HO1ZC-jUos+j(}Se84`9 zraaeX((v;JwJPa0@l_yu5J+51GrGubP@rykH=gbP{8vFxy zKjvs)S3vko+_hxRZ>f%jh+V10`l__6^~ znLg`U)y@|_l7;U26G;YpGD)(JaT|1DARJeK*&Y?!mB5ooe7i}v_h4Z!UJ_I*lSH+{Mg7% zX=chdyIR`+zLCe7qcf7WGjXS-4BVr zFQY_~(y=EuE`#f4XY1JWPlTHKZ-w}#WyIp1Zv3@5

-LBwy1>ZsoW!~Zl`itKax?8V2>RcNhB@(7Gp$6w16UW)b z(q}Z~aI0z2#9>T?4C+&D+BrBsDP4K(bX6;n%K0T+7WnDixGL=2@5QUeF z!r{^B7!ov)Oa<6rN91DMuw$}@Lx~Tbcf3`bOS@7ej1nK!IQ&d9I{Wc$7LR4++hXh+ z0ncPBt>d3~ff5d_Ou>CQeuUd@&Mk!_EnWpg>7#crEipq@!AD4flibiRILb3IWnc|@ ze;L%|&GC7Tw$u+kS;1zTvyP{!UJ5ajHo;Prh$6*F)-F}>_5maxSMrFVf(?_x|Yggik1 zGHZ~&4Tm(S56rrUG1OzlTdF=l*S&vg4M=|Qio%=Z(vo2a3v1p1%6nLU_Tpqfzl4vn z#2lNn>vTI=)tc%Jh!7e{?oy$gKSOIYCoL>$H{k;JV%eN9{&ByWsS^+; zNy-8m6+P73bak^H%8F)OUu3RY}p{toiH&l zAutIB1uG5%0vZJX1Qdu@jRoXR10{bt+O4%nJ%56F)iMMKk_ues/zoo_data + +# the port at which the clients will connect +# clientPort=2181 +# NOTE: Solr sets this based on zkRun / zkHost params + +# the maximum number of client connections. +# increase this if you need to handle more clients +#maxClientCnxns=60 +# +# Be sure to read the maintenance section of the +# administrator guide before turning on autopurge. +# +# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance +# +# The number of snapshots to retain in dataDir +#autopurge.snapRetainCount=3 +# Purge task interval in hours +# Set to "0" to disable auto purge feature +#autopurge.purgeInterval=1 + +# Disable ZK AdminServer since we do not use it +admin.enableServer=false diff --git a/core-customize/hybris/config/tomcat/README.txt b/core-customize/hybris/config/tomcat/README.txt new file mode 100644 index 00000000..29f11e5d --- /dev/null +++ b/core-customize/hybris/config/tomcat/README.txt @@ -0,0 +1,10 @@ + +files from this directory will be copied to the embedded tomcat directory. +this allows you to overwrite the tomcat configuration or add keystores and other additional files. + +variables (e.g. ${HYBRIS_BIN_DIR} or ${db.url}) in all configuration files (.properties/.xml/.sh/.bat) +will get replaced during the copy process. + + +->implementation note: see the appserver_customdeployment macro in platform/resources/ant/util.xml for +details. \ No newline at end of file diff --git a/core-customize/manifest.json b/core-customize/manifest.json index 88749097..e6abd284 100644 --- a/core-customize/manifest.json +++ b/core-customize/manifest.json @@ -1,5 +1,5 @@ { - "commerceSuiteVersion": "2211-jdk21.6", + "commerceSuiteVersion": "2211-jdk21.7", "extensionPacks": [], "solr": { "location": "solr", @@ -43,9 +43,9 @@ } ], "tests": { - "extensions": ["sapcommercetoolkit", "sapcxbackoffice", "sapcxreporting", "sapcxenvconfig"], + "extensions": ["cxdevtoolkit", "cxdevbackoffice", "cxdevreporting", "cxdevenvconfig"], "annotations": ["UnitTests", "IntegrationTests"], - "packages": ["tools.sapcx.commerce.*"] + "packages": ["me.cxdev.*"] } }, "aspects": [ diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ca.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ca.txt new file mode 100644 index 00000000..307a85f9 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ca.txt @@ -0,0 +1,8 @@ +# Set of Catalan contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +d +l +m +n +s +t diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_fr.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_fr.txt new file mode 100644 index 00000000..f1bba51b --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_fr.txt @@ -0,0 +1,15 @@ +# Set of French contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +l +m +t +qu +n +s +j +d +c +jusqu +quoiqu +lorsqu +puisqu diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ga.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ga.txt new file mode 100644 index 00000000..9ebe7fa3 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_ga.txt @@ -0,0 +1,5 @@ +# Set of Irish contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +d +m +b diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_it.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_it.txt new file mode 100644 index 00000000..cac04095 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/contractions_it.txt @@ -0,0 +1,23 @@ +# Set of Italian contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +c +l +all +dall +dell +nell +sull +coll +pell +gl +agl +dagl +degl +negl +sugl +un +m +t +s +v +d diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/hyphenations_ga.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/hyphenations_ga.txt new file mode 100644 index 00000000..4d2642cc --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/hyphenations_ga.txt @@ -0,0 +1,5 @@ +# Set of Irish hyphenations for StopFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +h +n +t diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stemdict_nl.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stemdict_nl.txt new file mode 100644 index 00000000..44107297 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stemdict_nl.txt @@ -0,0 +1,6 @@ +# Set of overrides for the dutch stemmer +# TODO: load this as a resource from the analyzer and sync it in build.xml +fiets fiets +bromfiets bromfiets +ei eier +kind kinder diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stoptags_ja.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stoptags_ja.txt new file mode 100644 index 00000000..71b75084 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stoptags_ja.txt @@ -0,0 +1,420 @@ +# +# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter. +# +# Any token with a part-of-speech tag that exactly matches those defined in this +# file are removed from the token stream. +# +# Set your own stoptags by uncommenting the lines below. Note that comments are +# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists, +# etc. that can be useful for building you own stoptag set. +# +# The entire possible tagset is provided below for convenience. +# +##### +# noun: unclassified nouns +#å詞 +# +# noun-common: Common nouns or nouns where the sub-classification is undefined +#å詞-一般 +# +# noun-proper: Proper nouns where the sub-classification is undefined +#å詞-固有å詞 +# +# noun-proper-misc: miscellaneous proper nouns +#å詞-固有å詞-一般 +# +# noun-proper-person: Personal names where the sub-classification is undefined +#å詞-固有å詞-人å +# +# noun-proper-person-misc: names that cannot be divided into surname and +# given name; foreign names; names where the surname or given name is unknown. +# e.g. ãŠå¸‚ã®æ–¹ +#å詞-固有å詞-人å-一般 +# +# noun-proper-person-surname: Mainly Japanese surnames. +# e.g. 山田 +#å詞-固有å詞-人å-å§“ +# +# noun-proper-person-given_name: Mainly Japanese given names. +# e.g. 太郎 +#å詞-固有å詞-人å-å +# +# noun-proper-organization: Names representing organizations. +# e.g. 通産çœ, NHK +#å詞-固有å詞-組織 +# +# noun-proper-place: Place names where the sub-classification is undefined +#å詞-固有å詞-地域 +# +# noun-proper-place-misc: Place names excluding countries. +# e.g. アジア, ãƒãƒ«ã‚»ãƒ­ãƒŠ, 京都 +#å詞-固有å詞-地域-一般 +# +# noun-proper-place-country: Country names. +# e.g. 日本, オーストラリア +#å詞-固有å詞-地域-国 +# +# noun-pronoun: Pronouns where the sub-classification is undefined +#å詞-代å詞 +# +# noun-pronoun-misc: miscellaneous pronouns: +# e.g. ãれ, ã“ã“, ã‚ã„ã¤, ã‚ãªãŸ, ã‚ã¡ã“ã¡, ã„ãã¤, ã©ã“ã‹, ãªã«, ã¿ãªã•ã‚“, ã¿ã‚“ãª, ã‚ãŸãã—, ã‚れã‚れ +#å詞-代å詞-一般 +# +# noun-pronoun-contraction: Spoken language contraction made by combining a +# pronoun and the particle 'wa'. +# e.g. ã‚りゃ, ã“りゃ, ã“りゃã‚, ãりゃ, ãりゃ゠+#å詞-代å詞-縮約 +# +# noun-adverbial: Temporal nouns such as names of days or months that behave +# like adverbs. Nouns that represent amount or ratios and can be used adverbially, +# e.g. 金曜, 一月, åˆå¾Œ, å°‘é‡ +#å詞-副詞å¯èƒ½ +# +# noun-verbal: Nouns that take arguments with case and can appear followed by +# 'suru' and related verbs (ã™ã‚‹, ã§ãã‚‹, ãªã•ã‚‹, ãã ã•ã‚‹) +# e.g. インプット, æ„›ç€, 悪化, 悪戦苦闘, 一安心, 下å–り +#å詞-サ変接続 +# +# noun-adjective-base: The base form of adjectives, words that appear before 㪠("na") +# e.g. å¥åº·, 安易, é§„ç›®, ã ã‚ +#å詞-形容動詞語幹 +# +# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), æ•°. +# e.g. 0, 1, 2, 何, æ•°, å¹¾ +#å詞-æ•° +# +# noun-affix: noun affixes where the sub-classification is undefined +#å詞-éžè‡ªç«‹ +# +# noun-affix-misc: Of adnominalizers, the case-marker ã® ("no"), and words that +# attach to the base form of inflectional words, words that cannot be classified +# into any of the other categories below. This category includes indefinite nouns. +# e.g. ã‚ã‹ã¤ã, æš, ã‹ã„, 甲æ–, æ°—, ãらã„, 嫌ã„, ãã›, ç™–, ã“ã¨, 事, ã”ã¨, 毎, ã—ã ã„, 次第, +# é †, ã›ã„, 所為, ã¤ã„ã§, åºã§, ã¤ã‚‚り, ç©ã‚‚り, 点, ã©ã“ã‚, ã®, ã¯ãš, ç­ˆ, ã¯ãšã¿, å¼¾ã¿, +# æ‹å­, ãµã†, ãµã‚Š, 振り, ã»ã†, æ–¹, æ—¨, ã‚‚ã®, 物, 者, ゆãˆ, æ•…, ゆãˆã‚“, 所以, ã‚ã‘, 訳, +# ã‚り, 割り, 割, ã‚“-å£èªž/, ã‚‚ã‚“-å£èªž/ +#å詞-éžè‡ªç«‹-一般 +# +# noun-affix-adverbial: noun affixes that that can behave as adverbs. +# e.g. ã‚ã„ã , é–“, ã‚ã’ã, 挙ã’å¥, ã‚ã¨, 後, 余り, 以外, 以é™, 以後, 以上, 以å‰, 一方, ã†ãˆ, +# 上, ã†ã¡, 内, ãŠã‚Š, 折り, ã‹ãŽã‚Š, é™ã‚Š, ãり, ã£ãり, çµæžœ, ã“ã‚, é ƒ, ã•ã„, éš›, 最中, ã•ãªã‹, +# 最中, ã˜ãŸã„, 自体, ãŸã³, 度, ãŸã‚, 為, ã¤ã©, 都度, ã¨ãŠã‚Š, 通り, ã¨ã, 時, ã¨ã“ã‚, 所, +# ã¨ãŸã‚“, 途端, ãªã‹, 中, ã®ã¡, 後, ã°ã‚ã„, å ´åˆ, æ—¥, ã¶ã‚“, 分, ã»ã‹, ä»–, ã¾ãˆ, å‰, ã¾ã¾, +# 儘, ä¾­, ã¿ãŽã‚Š, 矢先 +#å詞-éžè‡ªç«‹-副詞å¯èƒ½ +# +# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars +# with the stem よã†(ã ) ("you(da)"). +# e.g. よã†, ã‚„ã†, 様 (よã†) +#å詞-éžè‡ªç«‹-助動詞語幹 +# +# noun-affix-adjective-base: noun affixes that can connect to the indeclinable +# connection form 㪠(aux "da"). +# e.g. ã¿ãŸã„, ãµã† +#å詞-éžè‡ªç«‹-形容動詞語幹 +# +# noun-special: special nouns where the sub-classification is undefined. +#å詞-特殊 +# +# noun-special-aux: The ãã†ã  ("souda") stem form that is used for reporting news, is +# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base +# form of inflectional words. +# e.g. ãㆠ+#å詞-特殊-助動詞語幹 +# +# noun-suffix: noun suffixes where the sub-classification is undefined. +#å詞-接尾 +# +# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect +# to ガル or タイ and can combine into compound nouns, words that cannot be classified into +# any of the other categories below. In general, this category is more inclusive than +# 接尾語 ("suffix") and is usually the last element in a compound noun. +# e.g. ãŠã, ã‹ãŸ, æ–¹, ç”²æ– (ãŒã„), ãŒã‹ã‚Š, ãŽã¿, 気味, ãã‚‹ã¿, (~ã—ãŸ) ã•, 次第, 済 (ãš) ã¿, +# よã†, (ã§ã)ã£ã“, 感, 観, 性, å­¦, 類, é¢, 用 +#å詞-接尾-一般 +# +# noun-suffix-person: Suffixes that form nouns and attach to person names more often +# than other nouns. +# e.g. å›, 様, è‘— +#å詞-接尾-人å +# +# noun-suffix-place: Suffixes that form nouns and attach to place names more often +# than other nouns. +# e.g. 町, 市, 県 +#å詞-接尾-地域 +# +# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that +# can appear before スル ("suru"). +# e.g. 化, 視, 分ã‘, 入り, è½ã¡, è²·ã„ +#å詞-接尾-サ変接続 +# +# noun-suffix-aux: The stem form of ãã†ã  (様態) that is used to indicate conditions, +# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the +# conjunctive form of inflectional words. +# e.g. ãㆠ+#å詞-接尾-助動詞語幹 +# +# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive +# form of inflectional words and appear before the copula ã  ("da"). +# e.g. çš„, ã’, ãŒã¡ +#å詞-接尾-形容動詞語幹 +# +# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs. +# e.g. 後 (ã”), 以後, 以é™, 以å‰, å‰å¾Œ, 中, 末, 上, 時 (ã˜) +#å詞-接尾-副詞å¯èƒ½ +# +# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category +# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach +# to numbers. +# e.g. 個, ã¤, 本, 冊, パーセント, cm, kg, カ月, ã‹å›½, 区画, 時間, æ™‚åŠ +#å詞-接尾-助数詞 +# +# noun-suffix-special: Special suffixes that mainly attach to inflecting words. +# e.g. (楽ã—) ã•, (考ãˆ) æ–¹ +#å詞-接尾-特殊 +# +# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words +# together. +# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) å…¼ (主婦) +#å詞-接続詞的 +# +# noun-verbal_aux: Nouns that attach to the conjunctive particle 㦠("te") and are +# semantically verb-like. +# e.g. ã”らん, ã”覧, 御覧, 頂戴 +#å詞-動詞éžè‡ªç«‹çš„ +# +# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry, +# dialects, English, etc. Currently, the only entry for å詞 引用文字列 ("noun quotation") +# is ã„ã‚ã ("iwaku"). +#å詞-引用文字列 +# +# noun-nai_adjective: Words that appear before the auxiliary verb ãªã„ ("nai") and +# behave like an adjective. +# e.g. 申ã—訳, 仕方, ã¨ã‚“ã§ã‚‚, é•ã„ +#å詞-ナイ形容詞語幹 +# +##### +# prefix: unclassified prefixes +#接頭詞 +# +# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms) +# excluding numerical expressions. +# e.g. ㊠(æ°´), æŸ (æ°), åŒ (社), æ•… (~æ°), 高 (å“質), ㊠(見事), ã” (ç«‹æ´¾) +#接頭詞-å詞接続 +# +# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb +# in conjunctive form followed by ãªã‚‹/ãªã•ã‚‹/ãã ã•ã‚‹. +# e.g. ㊠(読ã¿ãªã•ã„), ㊠(座り) +#接頭詞-動詞接続 +# +# prefix-adjectival: Prefixes that attach to adjectives. +# e.g. ㊠(寒ã„ã§ã™ã­ãˆ), ãƒã‚« (ã§ã‹ã„) +#接頭詞-形容詞接続 +# +# prefix-numerical: Prefixes that attach to numerical expressions. +# e.g. ç´„, ãŠã‚ˆã, 毎時 +#接頭詞-数接続 +# +##### +# verb: unclassified verbs +#動詞 +# +# verb-main: +#動詞-自立 +# +# verb-auxiliary: +#動詞-éžè‡ªç«‹ +# +# verb-suffix: +#動詞-接尾 +# +##### +# adjective: unclassified adjectives +#形容詞 +# +# adjective-main: +#形容詞-自立 +# +# adjective-auxiliary: +#形容詞-éžè‡ªç«‹ +# +# adjective-suffix: +#形容詞-接尾 +# +##### +# adverb: unclassified adverbs +#副詞 +# +# adverb-misc: Words that can be segmented into one unit and where adnominal +# modification is not possible. +# e.g. ã‚ã„ã‹ã‚らãš, 多分 +#副詞-一般 +# +# adverb-particle_conjunction: Adverbs that can be followed by ã®, ã¯, ã«, +# ãª, ã™ã‚‹, ã , etc. +# e.g. ã“ã‚“ãªã«, ãã‚“ãªã«, ã‚ã‚“ãªã«, ãªã«ã‹, ãªã‚“ã§ã‚‚ +#副詞-助詞類接続 +# +##### +# adnominal: Words that only have noun-modifying forms. +# e.g. ã“ã®, ãã®, ã‚ã®, ã©ã®, ã„ã‚ゆる, ãªã‚“らã‹ã®, 何らã‹ã®, ã„ã‚ã‚“ãª, ã“ã†ã„ã†, ãã†ã„ã†, ã‚ã‚ã„ã†, +# ã©ã†ã„ã†, ã“ã‚“ãª, ãã‚“ãª, ã‚ã‚“ãª, ã©ã‚“ãª, 大ããª, å°ã•ãª, ãŠã‹ã—ãª, ã»ã‚“ã®, ãŸã„ã—ãŸ, +# 「(, ã‚‚) ã•ã‚‹ (ã“ã¨ãªãŒã‚‰)ã€, 微々ãŸã‚‹, 堂々ãŸã‚‹, å˜ãªã‚‹, ã„ã‹ãªã‚‹, 我ãŒã€ã€ŒåŒã˜, 亡ã +#連体詞 +# +##### +# conjunction: Conjunctions that can occur independently. +# e.g. ãŒ, ã‘れã©ã‚‚, ãã—ã¦, ã˜ã‚ƒã‚, ãれã©ã“ã‚ã‹ +接続詞 +# +##### +# particle: unclassified particles. +助詞 +# +# particle-case: case particles where the subclassification is undefined. +助詞-格助詞 +# +# particle-case-misc: Case particles. +# e.g. ã‹ã‚‰, ãŒ, ã§, ã¨, ã«, ã¸, より, ã‚’, ã®, ã«ã¦ +助詞-格助詞-一般 +# +# particle-case-quote: the "to" that appears after nouns, a person’s speech, +# quotation marks, expressions of decisions from a meeting, reasons, judgements, +# conjectures, etc. +# e.g. ( ã ) 㨠(è¿°ã¹ãŸ.), ( ã§ã‚ã‚‹) 㨠(ã—ã¦åŸ·è¡ŒçŒ¶äºˆ...) +助詞-格助詞-引用 +# +# particle-case-compound: Compounds of particles and verbs that mainly behave +# like case particles. +# e.g. ã¨ã„ã†, ã¨ã„ã£ãŸ, ã¨ã‹ã„ã†, ã¨ã—ã¦, ã¨ã¨ã‚‚ã«, ã¨å…±ã«, ã§ã‚‚ã£ã¦, ã«ã‚ãŸã£ã¦, ã«å½“ãŸã£ã¦, ã«å½“ã£ã¦, +# ã«ã‚ãŸã‚Š, ã«å½“ãŸã‚Š, ã«å½“り, ã«å½“ãŸã‚‹, ã«ã‚ãŸã‚‹, ã«ãŠã„ã¦, ã«æ–¼ã„ã¦,ã«æ–¼ã¦, ã«ãŠã‘ã‚‹, ã«æ–¼ã‘ã‚‹, +# ã«ã‹ã‘, ã«ã‹ã‘ã¦, ã«ã‹ã‚“ã—, ã«é–¢ã—, ã«ã‹ã‚“ã—ã¦, ã«é–¢ã—ã¦, ã«ã‹ã‚“ã™ã‚‹, ã«é–¢ã™ã‚‹, ã«éš›ã—, +# ã«éš›ã—ã¦, ã«ã—ãŸãŒã„, ã«å¾“ã„, ã«å¾“ã†, ã«ã—ãŸãŒã£ã¦, ã«å¾“ã£ã¦, ã«ãŸã„ã—, ã«å¯¾ã—, ã«ãŸã„ã—ã¦, +# ã«å¯¾ã—ã¦, ã«ãŸã„ã™ã‚‹, ã«å¯¾ã™ã‚‹, ã«ã¤ã„ã¦, ã«ã¤ã, ã«ã¤ã‘, ã«ã¤ã‘ã¦, ã«ã¤ã‚Œ, ã«ã¤ã‚Œã¦, ã«ã¨ã£ã¦, +# ã«ã¨ã‚Š, ã«ã¾ã¤ã‚ã‚‹, ã«ã‚ˆã£ã¦, ã«ä¾ã£ã¦, ã«å› ã£ã¦, ã«ã‚ˆã‚Š, ã«ä¾ã‚Š, ã«å› ã‚Š, ã«ã‚ˆã‚‹, ã«ä¾ã‚‹, ã«å› ã‚‹, +# ã«ã‚ãŸã£ã¦, ã«ã‚ãŸã‚‹, ã‚’ã‚‚ã£ã¦, を以ã£ã¦, を通ã˜, を通ã˜ã¦, を通ã—ã¦, ã‚’ã‚ãã£ã¦, ã‚’ã‚ãり, ã‚’ã‚ãã‚‹, +# ã£ã¦-å£èªž/, ã¡ã‚…ã†-関西å¼ã€Œã¨ã„ã†ã€/, (何) ã¦ã„ㆠ(人)-å£èªž/, ã£ã¦ã„ã†-å£èªž/, ã¨ã„ãµ, ã¨ã‹ã„ãµ +助詞-格助詞-連語 +# +# particle-conjunctive: +# e.g. ã‹ã‚‰, ã‹ã‚‰ã«ã¯, ãŒ, ã‘れã©, ã‘れã©ã‚‚, ã‘ã©, ã—, ã¤ã¤, ã¦, ã§, ã¨, ã¨ã“ã‚ãŒ, ã©ã“ã‚ã‹, ã¨ã‚‚, ã©ã‚‚, +# ãªãŒã‚‰, ãªã‚Š, ã®ã§, ã®ã«, ã°, ã‚‚ã®ã®, ã‚„ ( ã—ãŸ), ã‚„ã„ãªã‚„, (ã“ã‚ã‚“) ã˜ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, +# (行ã£) ã¡ã‚ƒ(ã„ã‘ãªã„)-å£èªž/, (言ã£) ãŸã£ã¦ (ã—ã‹ãŸãŒãªã„)-å£èªž/, (ãれãŒãªã)ã£ãŸã£ã¦ (平気)-å£èªž/ +助詞-接続助詞 +# +# particle-dependency: +# e.g. ã“ã, ã•ãˆ, ã—ã‹, ã™ã‚‰, ã¯, ã‚‚, ãž +助詞-係助詞 +# +# particle-adverbial: +# e.g. ãŒã¦ã‚‰, ã‹ã‚‚, ãらã„, ä½, ãらã„, ã—ã‚‚, (学校) ã˜ã‚ƒ(ã“ã‚ŒãŒæµè¡Œã£ã¦ã„ã‚‹)-å£èªž/, +# (ãれ)ã˜ã‚ƒã‚ (よããªã„)-å£èªž/, ãšã¤, (ç§) ãªãž, ãªã©, (ç§) ãªã‚Š (ã«), (先生) ãªã‚“ã‹ (大嫌ã„)-å£èªž/, +# (ç§) ãªã‚“ãž, (先生) ãªã‚“㦠(大嫌ã„)-å£èªž/, ã®ã¿, ã ã‘, (ç§) ã ã£ã¦-å£èªž/, ã ã«, +# (å½¼)ã£ãŸã‚‰-å£èªž/, (ãŠèŒ¶) ã§ã‚‚ (ã„ã‹ãŒ), ç­‰ (ã¨ã†), (今後) ã¨ã‚‚, ã°ã‹ã‚Š, ã°ã£ã‹-å£èªž/, ã°ã£ã‹ã‚Š-å£èªž/, +# ã»ã©, 程, ã¾ã§, è¿„, (誰) ã‚‚ (ãŒ)([助詞-格助詞] ãŠã‚ˆã³ [助詞-係助詞] ã®å‰ã«ä½ç½®ã™ã‚‹ã€Œã‚‚ã€) +助詞-副助詞 +# +# particle-interjective: particles with interjective grammatical roles. +# e.g. (æ¾å³¶) ã‚„ +助詞-間投助詞 +# +# particle-coordinate: +# e.g. ã¨, ãŸã‚Š, ã ã®, ã ã‚Š, ã¨ã‹, ãªã‚Š, ã‚„, やら +助詞-並立助詞 +# +# particle-final: +# e.g. ã‹ã„, ã‹ã—ら, ã•, ãœ, (ã )ã£ã‘-å£èªž/, (ã¨ã¾ã£ã¦ã‚‹) ã§-方言/, ãª, ナ, ãªã‚-å£èªž/, ãž, ã­, ãƒ, +# ã­ã‡-å£èªž/, ã­ãˆ-å£èªž/, ã­ã‚“-方言/, ã®, ã®ã†-å£èªž/, ã‚„, よ, ヨ, よã‰-å£èªž/, ã‚, ã‚ã„-å£èªž/ +助詞-終助詞 +# +# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is +# adverbial, conjunctive, or sentence final. For example: +# (a) 「A ã‹ B ã‹ã€. Ex:「(国内ã§é‹ç”¨ã™ã‚‹) ã‹,(海外ã§é‹ç”¨ã™ã‚‹) ã‹ (.)〠+# (b) Inside an adverb phrase. Ex:「(幸ã„ã¨ã„ã†) ã‹ (, 死者ã¯ã„ãªã‹ã£ãŸ.)〠+# 「(祈りãŒå±Šã„ãŸã›ã„) ã‹ (, 試験ã«åˆæ ¼ã—ãŸ.)〠+# (c) 「ã‹ã®ã‚ˆã†ã«ã€. Ex:「(何もãªã‹ã£ãŸ) ã‹ (ã®ã‚ˆã†ã«æŒ¯ã‚‹èˆžã£ãŸ.)〠+# e.g. ã‹ +助詞-副助詞ï¼ä¸¦ç«‹åŠ©è©žï¼çµ‚助詞 +# +# particle-adnominalizer: The "no" that attaches to nouns and modifies +# non-inflectional words. +助詞-連体化 +# +# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs +# that are giongo, giseigo, or gitaigo. +# e.g. ã«, 㨠+助詞-副詞化 +# +# particle-special: A particle that does not fit into one of the above classifications. +# This includes particles that are used in Tanka, Haiku, and other poetry. +# e.g. ã‹ãª, ã‘ã‚€, ( ã—ãŸã ã‚ã†) ã«, (ã‚ã‚“ãŸ) ã«ã‚ƒ(ã‚ã‹ã‚‰ã‚“), (俺) ã‚“ (å®¶) +助詞-特殊 +# +##### +# auxiliary-verb: +助動詞 +# +##### +# interjection: Greetings and other exclamations. +# e.g. ãŠã¯ã‚ˆã†, ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™, ã“ã‚“ã«ã¡ã¯, ã“ã‚“ã°ã‚“ã¯, ã‚りãŒã¨ã†, ã©ã†ã‚‚ã‚りãŒã¨ã†, ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™, +# ã„ãŸã ãã¾ã™, ã”ã¡ãã†ã•ã¾, ã•よãªã‚‰, ã•よã†ãªã‚‰, ã¯ã„, ã„ã„ãˆ, ã”ã‚ã‚“, ã”ã‚ã‚“ãªã•ã„ +#感動詞 +# +##### +# symbol: unclassified Symbols. +è¨˜å· +# +# symbol-misc: A general symbol not in one of the categories below. +# e.g. [â—‹â—Ž@$〒→+] +記å·-一般 +# +# symbol-comma: Commas +# e.g. [,ã€] +記å·-読点 +# +# symbol-period: Periods and full stops. +# e.g. [..。] +記å·-å¥ç‚¹ +# +# symbol-space: Full-width whitespace. +記å·-空白 +# +# symbol-open_bracket: +# e.g. [({‘“『ã€] +記å·-括弧開 +# +# symbol-close_bracket: +# e.g. [)}’â€ã€ã€ã€‘] +記å·-括弧閉 +# +# symbol-alphabetic: +#記å·-アルファベット +# +##### +# other: unclassified other +#ãã®ä»– +# +# other-interjection: Words that are hard to classify as noun-suffixes or +# sentence-final particles. +# e.g. (ã )ã‚¡ +ãã®ä»–-間投 +# +##### +# filler: Aizuchi that occurs during a conversation or sounds inserted as filler. +# e.g. ã‚ã®, ã†ã‚“ã¨, ãˆã¨ +フィラー +# +##### +# non-verbal: non-verbal sound. +éžè¨€èªžéŸ³ +# +##### +# fragment: +#語断片 +# +##### +# unknown: unknown part of speech. +#未知語 +# +##### End of file diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ar.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ar.txt new file mode 100644 index 00000000..046829db --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ar.txt @@ -0,0 +1,125 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +# Cleaned on October 11, 2009 (not normalized, so use before normalization) +# This means that when modifying this list, you might need to add some +# redundant entries, for example containing forms with both Ø£ and ا +من +ومن +منها +منه +ÙÙŠ +ÙˆÙÙŠ +Ùيها +Ùيه +Ùˆ +Ù +ثم +او +أو +ب +بها +به +ا +Ø£ +اى +اي +أي +أى +لا +ولا +الا +ألا +إلا +لكن +ما +وما +كما +Ùما +عن +مع +اذا +إذا +ان +أن +إن +انها +أنها +إنها +انه +أنه +إنه +بان +بأن +ÙØ§Ù† +ÙØ£Ù† +وان +وأن +وإن +التى +التي +الذى +الذي +الذين +الى +الي +إلى +إلي +على +عليها +عليه +اما +أما +إما +ايضا +أيضا +كل +وكل +لم +ولم +لن +ولن +هى +هي +هو +وهى +وهي +وهو +Ùهى +Ùهي +Ùهو +انت +أنت +لك +لها +له +هذه +هذا +تلك +ذلك +هناك +كانت +كان +يكون +تكون +وكانت +وكان +غير +بعض +قد +نحو +بين +بينما +منذ +ضمن +حيث +الان +الآن +خلال +بعد +قبل +حتى +عند +عندما +لدى +جميع diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_bg.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_bg.txt new file mode 100644 index 00000000..1ae4ba2a --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_bg.txt @@ -0,0 +1,193 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +а +аз +ако +ала +бе +без +беше +би +бил +била +били +било +близо +бъдат +бъде +бÑха +в +Ð²Ð°Ñ +ваш +ваша +вероÑтно +вече +взема +ви +вие +винаги +вÑе +вÑеки +вÑички +вÑичко +вÑÑка +във +въпреки +върху +г +ги +главно +го +д +да +дали +до +докато +докога +дори +доÑега +доÑта +е +едва +един +ето +за +зад +заедно +заради +заÑега +затова +защо +защото +и +из +или +им +има +имат +иÑка +й +каза +как +каква +какво +както +какъв +като +кога +когато +което +които +кой +който +колко +коÑто +къде +където +към +ли +м +ме +между +мен +ми +мнозина +мога +могат +може +Ð¼Ð¾Ð»Ñ +момента +му +н +на +над +назад +най +направи +напред +например +Ð½Ð°Ñ +не +него +Ð½ÐµÑ +ни +ние +никой +нито +но +нÑкои +нÑкой +нÑма +обаче +около +оÑвен +оÑобено +от +отгоре +отново +още +пак +по +повече +повечето +под +поне +поради +поÑле +почти +прави +пред +преди +през +при +пък +първо +Ñ +Ñа +Ñамо +Ñе +Ñега +Ñи +Ñкоро +Ñлед +Ñме +Ñпоред +Ñред +Ñрещу +Ñте +Ñъм +ÑÑŠÑ +Ñъщо +Ñ‚ +тази +така +такива +такъв +там +твой +те +тези +ти +тн +то +това +тогава +този +той +толкова +точно +трÑбва +тук +тъй +Ñ‚Ñ +Ñ‚ÑÑ… +у +хареÑва +ч +че +чеÑто +чрез +ще +щом +Ñ diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ca.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ca.txt new file mode 100644 index 00000000..3da65dea --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ca.txt @@ -0,0 +1,220 @@ +# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed) +a +abans +ací +ah +així +això +al +als +aleshores +algun +alguna +algunes +alguns +alhora +allà +allí +allò +altra +altre +altres +amb +ambdós +ambdues +apa +aquell +aquella +aquelles +aquells +aquest +aquesta +aquestes +aquests +aquí +baix +cada +cadascú +cadascuna +cadascunes +cadascuns +com +contra +d'un +d'una +d'unes +d'uns +dalt +de +del +dels +des +després +dins +dintre +donat +doncs +durant +e +eh +el +els +em +en +encara +ens +entre +érem +eren +éreu +es +és +esta +està +estàvem +estaven +estàveu +esteu +et +etc +ets +fins +fora +gairebé +ha +han +has +havia +he +hem +heu +hi +ho +i +igual +iguals +ja +l'hi +la +les +li +li'n +llavors +m'he +ma +mal +malgrat +mateix +mateixa +mateixes +mateixos +me +mentre +més +meu +meus +meva +meves +molt +molta +moltes +molts +mon +mons +n'he +n'hi +ne +ni +no +nogensmenys +només +nosaltres +nostra +nostre +nostres +o +oh +oi +on +pas +pel +pels +per +però +perquè +poc +poca +pocs +poques +potser +propi +qual +quals +quan +quant +que +què +quelcom +qui +quin +quina +quines +quins +s'ha +s'han +sa +semblant +semblants +ses +seu +seus +seva +seva +seves +si +sobre +sobretot +sóc +solament +sols +son +són +sons +sota +sou +t'ha +t'han +t'he +ta +tal +també +tampoc +tan +tant +tanta +tantes +teu +teus +teva +teves +ton +tons +tot +tota +totes +tots +un +una +unes +uns +us +va +vaig +vam +van +vas +veu +vosaltres +vostra +vostre +vostres diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_cz.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_cz.txt new file mode 100644 index 00000000..53c6097d --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_cz.txt @@ -0,0 +1,172 @@ +a +s +k +o +i +u +v +z +dnes +cz +tímto +budeÅ¡ +budem +byli +jseÅ¡ +můj +svým +ta +tomto +tohle +tuto +tyto +jej +zda +proÄ +máte +tato +kam +tohoto +kdo +kteří +mi +nám +tom +tomuto +mít +nic +proto +kterou +byla +toho +protože +asi +ho +naÅ¡i +napiÅ¡te +re +což +tím +takže +svých +její +svými +jste +aj +tu +tedy +teto +bylo +kde +ke +pravé +ji +nad +nejsou +Äi +pod +téma +mezi +pÅ™es +ty +pak +vám +ani +když +vÅ¡ak +neg +jsem +tento +Älánku +Älánky +aby +jsme +pÅ™ed +pta +jejich +byl +jeÅ¡tÄ› +až +bez +také +pouze +první +vaÅ¡e +která +nás +nový +tipy +pokud +může +strana +jeho +své +jiné +zprávy +nové +není +vás +jen +podle +zde +už +být +více +bude +již +než +který +by +které +co +nebo +ten +tak +má +pÅ™i +od +po +jsou +jak +další +ale +si +se +ve +to +jako +za +zpÄ›t +ze +do +pro +je +na +atd +atp +jakmile +pÅ™iÄemž +já +on +ona +ono +oni +ony +my +vy +jí +ji +mÄ› +mne +jemu +tomu +tÄ›m +tÄ›mu +nÄ›mu +nÄ›muž +jehož +jíž +jelikož +jež +jakož +naÄež diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_da.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_da.txt new file mode 100644 index 00000000..42e6145b --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_da.txt @@ -0,0 +1,110 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Danish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + +og | and +i | in +jeg | I +det | that (dem. pronoun)/it (pers. pronoun) +at | that (in front of a sentence)/to (with infinitive) +en | a/an +den | it (pers. pronoun)/that (dem. pronoun) +til | to/at/for/until/against/by/of/into, more +er | present tense of "to be" +som | who, as +pÃ¥ | on/upon/in/on/at/to/after/of/with/for, on +de | they +med | with/by/in, along +han | he +af | of/by/from/off/for/in/with/on, off +for | at/for/to/from/by/of/ago, in front/before, because +ikke | not +der | who/which, there/those +var | past tense of "to be" +mig | me/myself +sig | oneself/himself/herself/itself/themselves +men | but +et | a/an/one, one (number), someone/somebody/one +har | present tense of "to have" +om | round/about/for/in/a, about/around/down, if +vi | we +min | my +havde | past tense of "to have" +ham | him +hun | she +nu | now +over | over/above/across/by/beyond/past/on/about, over/past +da | then, when/as/since +fra | from/off/since, off, since +du | you +ud | out +sin | his/her/its/one's +dem | them +os | us/ourselves +op | up +man | you/one +hans | his +hvor | where +eller | or +hvad | what +skal | must/shall etc. +selv | myself/youself/herself/ourselves etc., even +her | here +alle | all/everyone/everybody etc. +vil | will (verb) +blev | past tense of "to stay/to remain/to get/to become" +kunne | could +ind | in +nÃ¥r | when +være | present tense of "to be" +dog | however/yet/after all +noget | something +ville | would +jo | you know/you see (adv), yes +deres | their/theirs +efter | after/behind/according to/for/by/from, later/afterwards +ned | down +skulle | should +denne | this +end | than +dette | this +mit | my/mine +ogsÃ¥ | also +under | under/beneath/below/during, below/underneath +have | have +dig | you +anden | other +hende | her +mine | my +alt | everything +meget | much/very, plenty of +sit | his, her, its, one's +sine | his, her, its, one's +vor | our +mod | against +disse | these +hvis | if +din | your/yours +nogle | some +hos | by/at +blive | be/become +mange | many +ad | by/through +bliver | present tense of "to be/to become" +hendes | her/hers +været | be +thi | for (conj) +jer | you +sÃ¥dan | such, like this/like that diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_de.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_de.txt new file mode 100644 index 00000000..86525e7a --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_de.txt @@ -0,0 +1,294 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A German stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | The number of forms in this list is reduced significantly by passing it + | through the German stemmer. + + +aber | but + +alle | all +allem +allen +aller +alles + +als | than, as +also | so +am | an + dem +an | at + +ander | other +andere +anderem +anderen +anderer +anderes +anderm +andern +anderr +anders + +auch | also +auf | on +aus | out of +bei | by +bin | am +bis | until +bist | art +da | there +damit | with it +dann | then + +der | the +den +des +dem +die +das + +daß | that + +derselbe | the same +derselben +denselben +desselben +demselben +dieselbe +dieselben +dasselbe + +dazu | to that + +dein | thy +deine +deinem +deinen +deiner +deines + +denn | because + +derer | of those +dessen | of him + +dich | thee +dir | to thee +du | thou + +dies | this +diese +diesem +diesen +dieser +dieses + + +doch | (several meanings) +dort | (over) there + + +durch | through + +ein | a +eine +einem +einen +einer +eines + +einig | some +einige +einigem +einigen +einiger +einiges + +einmal | once + +er | he +ihn | him +ihm | to him + +es | it +etwas | something + +euer | your +eure +eurem +euren +eurer +eures + +für | for +gegen | towards +gewesen | p.p. of sein +hab | have +habe | have +haben | have +hat | has +hatte | had +hatten | had +hier | here +hin | there +hinter | behind + +ich | I +mich | me +mir | to me + + +ihr | you, to her +ihre +ihrem +ihren +ihrer +ihres +euch | to you + +im | in + dem +in | in +indem | while +ins | in + das +ist | is + +jede | each, every +jedem +jeden +jeder +jedes + +jene | that +jenem +jenen +jener +jenes + +jetzt | now +kann | can + +kein | no +keine +keinem +keinen +keiner +keines + +können | can +könnte | could +machen | do +man | one + +manche | some, many a +manchem +manchen +mancher +manches + +mein | my +meine +meinem +meinen +meiner +meines + +mit | with +muss | must +musste | had to +nach | to(wards) +nicht | not +nichts | nothing +noch | still, yet +nun | now +nur | only +ob | whether +oder | or +ohne | without +sehr | very + +sein | his +seine +seinem +seinen +seiner +seines + +selbst | self +sich | herself + +sie | they, she +ihnen | to them + +sind | are +so | so + +solche | such +solchem +solchen +solcher +solches + +soll | shall +sollte | should +sondern | but +sonst | else +über | over +um | about, around +und | and + +uns | us +unse +unsem +unsen +unser +unses + +unter | under +viel | much +vom | von + dem +von | from +vor | before +während | while +war | was +waren | were +warst | wast +was | what +weg | away, off +weil | because +weiter | further + +welche | which +welchem +welchen +welcher +welches + +wenn | when +werde | will +werden | will +wie | how +wieder | again +will | want +wir | we +wird | will +wirst | willst +wo | where +wollen | want +wollte | wanted +würde | would +würden | would +zu | to +zum | zu + dem +zur | zu + der +zwar | indeed +zwischen | between + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_el.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_el.txt new file mode 100644 index 00000000..232681f5 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_el.txt @@ -0,0 +1,78 @@ +# Lucene Greek Stopwords list +# Note: by default this file is used after GreekLowerCaseFilter, +# so when modifying this file use 'σ' instead of 'Ï‚' +ο +η +το +οι +τα +του +τησ +των +τον +την +και +κι +κ +ειμαι +εισαι +ειναι +ειμαστε +ειστε +στο +στον +στη +στην +μα +αλλα +απο +για +Ï€Ïοσ +με +σε +ωσ +παÏα +αντι +κατα +μετα +θα +να +δε +δεν +μη +μην +επι +ενω +εαν +αν +τοτε +που +πωσ +ποιοσ +ποια +ποιο +ποιοι +ποιεσ +ποιων +ποιουσ +αυτοσ +αυτη +αυτο +αυτοι +αυτων +αυτουσ +αυτεσ +αυτα +εκεινοσ +εκεινη +εκεινο +εκεινοι +εκεινεσ +εκεινα +εκεινων +εκεινουσ +οπωσ +ομωσ +ισωσ +οσο +οτι diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_en.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_en.txt new file mode 100644 index 00000000..2c164c0b --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_en.txt @@ -0,0 +1,54 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# a couple of test stopwords to test that the words are really being +# configured from this file: +stopworda +stopwordb + +# Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +such +that +the +their +then +there +these +they +this +to +was +will +with diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_es.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_es.txt new file mode 100644 index 00000000..487d78c8 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_es.txt @@ -0,0 +1,356 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Spanish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + + | The following is a ranked list (commonest to rarest) of stopwords + | deriving from a large sample of text. + + | Extra words have been added at the end. + +de | from, of +la | the, her +que | who, that +el | the +en | in +y | and +a | to +los | the, them +del | de + el +se | himself, from him etc +las | the, them +por | for, by, etc +un | a +para | for +con | with +no | no +una | a +su | his, her +al | a + el + | es from SER +lo | him +como | how +más | more +pero | pero +sus | su plural +le | to him, her +ya | already +o | or + | fue from SER +este | this + | ha from HABER +sí | himself etc +porque | because +esta | this + | son from SER +entre | between + | está from ESTAR +cuando | when +muy | very +sin | without +sobre | on + | ser from SER + | tiene from TENER +también | also +me | me +hasta | until +hay | there is/are +donde | where + | han from HABER +quien | whom, that + | están from ESTAR + | estado from ESTAR +desde | from +todo | all +nos | us +durante | during + | estados from ESTAR +todos | all +uno | a +les | to them +ni | nor +contra | against +otros | other + | fueron from SER +ese | that +eso | that + | había from HABER +ante | before +ellos | they +e | and (variant of y) +esto | this +mí | me +antes | before +algunos | some +qué | what? +unos | a +yo | I +otro | other +otras | other +otra | other +él | he +tanto | so much, many +esa | that +estos | these +mucho | much, many +quienes | who +nada | nothing +muchos | many +cual | who + | sea from SER +poco | few +ella | she +estar | to be + | haber from HABER +estas | these + | estaba from ESTAR + | estamos from ESTAR +algunas | some +algo | something +nosotros | we + + | other forms + +mi | me +mis | mi plural +tú | thou +te | thee +ti | thee +tu | thy +tus | tu plural +ellas | they +nosotras | we +vosotros | you +vosotras | you +os | you +mío | mine +mía | +míos | +mías | +tuyo | thine +tuya | +tuyos | +tuyas | +suyo | his, hers, theirs +suya | +suyos | +suyas | +nuestro | ours +nuestra | +nuestros | +nuestras | +vuestro | yours +vuestra | +vuestros | +vuestras | +esos | those +esas | those + + | forms of estar, to be (not including the infinitive): +estoy +estás +está +estamos +estáis +están +esté +estés +estemos +estéis +estén +estaré +estarás +estará +estaremos +estaréis +estarán +estaría +estarías +estaríamos +estaríais +estarían +estaba +estabas +estábamos +estabais +estaban +estuve +estuviste +estuvo +estuvimos +estuvisteis +estuvieron +estuviera +estuvieras +estuviéramos +estuvierais +estuvieran +estuviese +estuvieses +estuviésemos +estuvieseis +estuviesen +estando +estado +estada +estados +estadas +estad + + | forms of haber, to have (not including the infinitive): +he +has +ha +hemos +habéis +han +haya +hayas +hayamos +hayáis +hayan +habré +habrás +habrá +habremos +habréis +habrán +habría +habrías +habríamos +habríais +habrían +había +habías +habíamos +habíais +habían +hube +hubiste +hubo +hubimos +hubisteis +hubieron +hubiera +hubieras +hubiéramos +hubierais +hubieran +hubiese +hubieses +hubiésemos +hubieseis +hubiesen +habiendo +habido +habida +habidos +habidas + + | forms of ser, to be (not including the infinitive): +soy +eres +es +somos +sois +son +sea +seas +seamos +seáis +sean +seré +serás +será +seremos +seréis +serán +sería +serías +seríamos +seríais +serían +era +eras +éramos +erais +eran +fui +fuiste +fue +fuimos +fuisteis +fueron +fuera +fueras +fuéramos +fuerais +fueran +fuese +fueses +fuésemos +fueseis +fuesen +siendo +sido + | sed also means 'thirst' + + | forms of tener, to have (not including the infinitive): +tengo +tienes +tiene +tenemos +tenéis +tienen +tenga +tengas +tengamos +tengáis +tengan +tendré +tendrás +tendrá +tendremos +tendréis +tendrán +tendría +tendrías +tendríamos +tendríais +tendrían +tenía +tenías +teníamos +teníais +tenían +tuve +tuviste +tuvo +tuvimos +tuvisteis +tuvieron +tuviera +tuvieras +tuviéramos +tuvierais +tuvieran +tuviese +tuvieses +tuviésemos +tuvieseis +tuviesen +teniendo +tenido +tenida +tenidos +tenidas +tened + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_eu.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_eu.txt new file mode 100644 index 00000000..25f1db93 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_eu.txt @@ -0,0 +1,99 @@ +# example set of basque stopwords +al +anitz +arabera +asko +baina +bat +batean +batek +bati +batzuei +batzuek +batzuetan +batzuk +bera +beraiek +berau +berauek +bere +berori +beroriek +beste +bezala +da +dago +dira +ditu +du +dute +edo +egin +ere +eta +eurak +ez +gainera +gu +gutxi +guzti +haiei +haiek +haietan +hainbeste +hala +han +handik +hango +hara +hari +hark +hartan +hau +hauei +hauek +hauetan +hemen +hemendik +hemengo +hi +hona +honek +honela +honetan +honi +hor +hori +horiei +horiek +horietan +horko +horra +horrek +horrela +horretan +horri +hortik +hura +izan +ni +noiz +nola +non +nondik +nongo +nor +nora +ze +zein +zen +zenbait +zenbat +zer +zergatik +ziren +zituen +zu +zuek +zuen +zuten diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fa.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fa.txt new file mode 100644 index 00000000..723641c6 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fa.txt @@ -0,0 +1,313 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +# Note: by default this file is used after normalization, so when adding entries +# to this file, use the arabic 'ÙŠ' instead of 'ÛŒ' +انان +نداشته +سراسر +خياه +ايشان +وي +تاكنون +بيشتري +دوم +پس +ناشي +ÙˆÚ¯Ùˆ +يا +داشتند +سپس +هنگام +هرگز +پنج +نشان +امسال +ديگر +گروهي +شدند +چطور +ده +Ùˆ +دو +نخستين +ولي +چرا +Ú†Ù‡ +وسط +Ù‡ +كدام +قابل +يك +Ø±ÙØª +Ù‡ÙØª +همچنين +در +هزار +بله +بلي +شايد +اما +شناسي +Ú¯Ø±ÙØªÙ‡ +دهد +داشته +دانست +داشتن +خواهيم +ميليارد +وقتيكه +امد +خواهد +جز +اورده +شده +بلكه +خدمات +شدن +برخي +نبود +بسياري +جلوگيري +حق +كردند +نوعي +بعري +نكرده +نظير +نبايد +بوده +بودن +داد +اورد +هست +جايي +شود +دنبال +داده +بايد +سابق +هيچ +همان +انجا +كمتر +كجاست +گردد +كسي +تر +مردم +تان +دادن +بودند +سري +جدا +ندارند +مگر +يكديگر +دارد +دهند +بنابراين +هنگامي +سمت +جا +انچه +خود +دادند +زياد +دارند +اثر +بدون +بهترين +بيشتر +البته +به +براساس +بيرون +كرد +بعضي +Ú¯Ø±ÙØª +توي +اي +ميليون +او +جريان +تول +بر +مانند +برابر +باشيم +مدتي +گويند +اكنون +تا +تنها +جديد +چند +بي +نشده +كردن +كردم +گويد +كرده +كنيم +نمي +نزد +روي +قصد +Ùقط +بالاي +ديگران +اين +ديروز +توسط +سوم +ايم +دانند +سوي +Ø§Ø³ØªÙØ§Ø¯Ù‡ +شما +كنار +داريم +ساخته +طور +امده +Ø±ÙØªÙ‡ +نخست +بيست +نزديك +طي +كنيد +از +انها +تمامي +داشت +يكي +طريق +اش +چيست +روب +نمايد +Ú¯ÙØª +چندين +چيزي +تواند +ام +ايا +با +ان +ايد +ترين +اينكه +ديگري +راه +هايي +بروز +همچنان +پاعين +كس +حدود +مختل٠+مقابل +چيز +گيرد +ندارد +ضد +همچون +سازي +شان +مورد +باره +مرسي +خويش +برخوردار +چون +خارج +شش +هنوز +تحت +ضمن +هستيم +Ú¯ÙØªÙ‡ +Ùكر +بسيار +پيش +براي +روزهاي +انكه +نخواهد +بالا +كل +وقتي +كي +چنين +كه +گيري +نيست +است +كجا +كند +نيز +يابد +بندي +حتي +توانند +عقب +خواست +كنند +بين +تمام +همه +ما +باشند +مثل +شد +اري +باشد +اره +طبق +بعد +اگر +صورت +غير +جاي +بيش +ريزي +اند +زيرا +چگونه +بار +Ù„Ø·ÙØ§ +مي +درباره +من +ديده +همين +گذاري +برداري +علت +گذاشته +هم +Ùوق +نه +ها +شوند +اباد +همواره +هر +اول +خواهند +چهار +نام +امروز +مان +هاي +قبل +كنم +سعي +تازه +را +هستند +زير +جلوي +عنوان +بود diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fi.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fi.txt new file mode 100644 index 00000000..4372c9a0 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fi.txt @@ -0,0 +1,97 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + +| forms of BE + +olla +olen +olet +on +olemme +olette +ovat +ole | negative form + +oli +olisi +olisit +olisin +olisimme +olisitte +olisivat +olit +olin +olimme +olitte +olivat +ollut +olleet + +en | negation +et +ei +emme +ette +eivät + +|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans +minä minun minut minua minussa minusta minuun minulla minulta minulle | I +sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you +hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she +me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we +te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you +he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they + +tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this +tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that +se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it +nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these +nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those +ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they + +kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who +ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl) +mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what +mitkä | (pl) + +joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which +jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl) + +| conjunctions + +että | that +ja | and +jos | if +koska | because +kuin | than +mutta | but +niin | so +sekä | and +sillä | for +tai | or +vaan | but +vai | or +vaikka | although + + +| prepositions + +kanssa | with +mukaan | according to +noin | about +poikki | across +yli | over, across + +| other + +kun | when +niin | so +nyt | now +itse | self + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fr.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fr.txt new file mode 100644 index 00000000..749abae6 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_fr.txt @@ -0,0 +1,186 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A French stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + +au | a + le +aux | a + les +avec | with +ce | this +ces | these +dans | with +de | of +des | de + les +du | de + le +elle | she +en | `of them' etc +et | and +eux | them +il | he +je | I +la | the +le | the +leur | their +lui | him +ma | my (fem) +mais | but +me | me +même | same; as in moi-même (myself) etc +mes | me (pl) +moi | me +mon | my (masc) +ne | not +nos | our (pl) +notre | our +nous | we +on | one +ou | where +par | by +pas | not +pour | for +qu | que before vowel +que | that +qui | who +sa | his, her (fem) +se | oneself +ses | his (pl) +son | his, her (masc) +sur | on +ta | thy (fem) +te | thee +tes | thy (pl) +toi | thee +ton | thy (masc) +tu | thou +un | a +une | a +vos | your (pl) +votre | your +vous | you + + | single letter forms + +c | c' +d | d' +j | j' +l | l' +à | to, at +m | m' +n | n' +s | s' +t | t' +y | there + + | forms of être (not including the infinitive): +été +étée +étées +étés +étant +suis +es +est +sommes +êtes +sont +serai +seras +sera +serons +serez +seront +serais +serait +serions +seriez +seraient +étais +était +étions +étiez +étaient +fus +fut +fûmes +fûtes +furent +sois +soit +soyons +soyez +soient +fusse +fusses +fût +fussions +fussiez +fussent + + | forms of avoir (not including the infinitive): +ayant +eu +eue +eues +eus +ai +as +avons +avez +ont +aurai +auras +aura +aurons +aurez +auront +aurais +aurait +aurions +auriez +auraient +avais +avait +avions +aviez +avaient +eut +eûmes +eûtes +eurent +aie +aies +ait +ayons +ayez +aient +eusse +eusses +eût +eussions +eussiez +eussent + + | Later additions (from Jean-Christophe Deschamps) +ceci | this +cela | that +celà | that +cet | this +cette | this +ici | here +ils | they +les | the (pl) +leurs | their (pl) +quel | which +quels | which +quelle | which +quelles | which +sans | without +soi | oneself + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ga.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ga.txt new file mode 100644 index 00000000..9ff88d74 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ga.txt @@ -0,0 +1,110 @@ + +a +ach +ag +agus +an +aon +ar +arna +as +b' +ba +beirt +bhúr +caoga +ceathair +ceathrar +chomh +chtó +chuig +chun +cois +céad +cúig +cúigear +d' +daichead +dar +de +deich +deichniúr +den +dhá +do +don +dtí +dá +dár +dó +faoi +faoin +faoina +faoinár +fara +fiche +gach +gan +go +gur +haon +hocht +i +iad +idir +in +ina +ins +inár +is +le +leis +lena +lenár +m' +mar +mo +mé +na +nach +naoi +naonúr +ná +ní +níor +nó +nócha +ocht +ochtar +os +roimh +sa +seacht +seachtar +seachtó +seasca +seisear +siad +sibh +sinn +sna +sé +sí +tar +thar +thú +triúr +trí +trína +trínár +tríocha +tú +um +ár +é +éis +í +ó +ón +óna +ónár diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_gl.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_gl.txt new file mode 100644 index 00000000..d8760b12 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_gl.txt @@ -0,0 +1,161 @@ +# galican stopwords +a +aínda +alí +aquel +aquela +aquelas +aqueles +aquilo +aquí +ao +aos +as +así +á +ben +cando +che +co +coa +comigo +con +connosco +contigo +convosco +coas +cos +cun +cuns +cunha +cunhas +da +dalgunha +dalgunhas +dalgún +dalgúns +das +de +del +dela +delas +deles +desde +deste +do +dos +dun +duns +dunha +dunhas +e +el +ela +elas +eles +en +era +eran +esa +esas +ese +eses +esta +estar +estaba +está +están +este +estes +estiven +estou +eu +é +facer +foi +foron +fun +había +hai +iso +isto +la +las +lle +lles +lo +los +mais +me +meu +meus +min +miña +miñas +moi +na +nas +neste +nin +no +non +nos +nosa +nosas +noso +nosos +nós +nun +nunha +nuns +nunhas +o +os +ou +ó +ós +para +pero +pode +pois +pola +polas +polo +polos +por +que +se +senón +ser +seu +seus +sexa +sido +sobre +súa +súas +tamén +tan +te +ten +teñen +teño +ter +teu +teus +ti +tido +tiña +tiven +túa +túas +un +unha +unhas +uns +vos +vosa +vosas +voso +vosos +vós diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hi.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hi.txt new file mode 100644 index 00000000..86286bb0 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hi.txt @@ -0,0 +1,235 @@ +# Also see http://www.opensource.org/licenses/bsd-license.html +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# This file was created by Jacques Savoy and is distributed under the BSD license. +# Note: by default this file also contains forms normalized by HindiNormalizer +# for spelling variation (see section below), such that it can be used whether or +# not you enable that feature. When adding additional entries to this list, +# please add the normalized form as well. +अंदर +अत +अपना +अपनी +अपने +अभी +आदि +आप +इतà¥à¤¯à¤¾à¤¦à¤¿ +इन +इनका +इनà¥à¤¹à¥€à¤‚ +इनà¥à¤¹à¥‡à¤‚ +इनà¥à¤¹à¥‹à¤‚ +इस +इसका +इसकी +इसके +इसमें +इसी +इसे +उन +उनका +उनकी +उनके +उनको +उनà¥à¤¹à¥€à¤‚ +उनà¥à¤¹à¥‡à¤‚ +उनà¥à¤¹à¥‹à¤‚ +उस +उसके +उसी +उसे +à¤à¤• +à¤à¤µà¤‚ +à¤à¤¸ +à¤à¤¸à¥‡ +और +कई +कर +करता +करते +करना +करने +करें +कहते +कहा +का +काफ़ी +कि +कितना +किनà¥à¤¹à¥‡à¤‚ +किनà¥à¤¹à¥‹à¤‚ +किया +किर +किस +किसी +किसे +की +कà¥à¤› +कà¥à¤² +के +को +कोई +कौन +कौनसा +गया +घर +जब +जहाठ+जा +जितना +जिन +जिनà¥à¤¹à¥‡à¤‚ +जिनà¥à¤¹à¥‹à¤‚ +जिस +जिसे +जीधर +जैसा +जैसे +जो +तक +तब +तरह +तिन +तिनà¥à¤¹à¥‡à¤‚ +तिनà¥à¤¹à¥‹à¤‚ +तिस +तिसे +तो +था +थी +थे +दबारा +दिया +दà¥à¤¸à¤°à¤¾ +दूसरे +दो +दà¥à¤µà¤¾à¤°à¤¾ +न +नहीं +ना +निहायत +नीचे +ने +पर +पर +पहले +पूरा +पे +फिर +बनी +बही +बहà¥à¤¤ +बाद +बाला +बिलकà¥à¤² +भी +भीतर +मगर +मानो +मे +में +यदि +यह +यहाठ+यही +या +यिह +ये +रखें +रहा +रहे +ऱà¥à¤µà¤¾à¤¸à¤¾ +लिठ+लिये +लेकिन +व +वरà¥à¤— +वह +वह +वहाठ+वहीं +वाले +वà¥à¤¹ +वे +वग़ैरह +संग +सकता +सकते +सबसे +सभी +साथ +साबà¥à¤¤ +साभ +सारा +से +सो +ही +हà¥à¤† +हà¥à¤ˆ +हà¥à¤ +है +हैं +हो +होता +होती +होते +होना +होने +# additional normalized forms of the above +अपनि +जेसे +होति +सभि +तिंहों +इंहों +दवारा +इसि +किंहें +थि +उंहों +ओर +जिंहें +वहिं +अभि +बनि +हि +उंहिं +उंहें +हें +वगेरह +à¤à¤¸à¥‡ +रवासा +कोन +निचे +काफि +उसि +पà¥à¤°à¤¾ +भितर +हे +बहि +वहां +कोइ +यहां +जिंहों +तिंहें +किसि +कइ +यहि +इंहिं +जिधर +इंहें +अदि +इतयादि +हà¥à¤‡ +कोनसा +इसकि +दà¥à¤¸à¤°à¥‡ +जहां +अप +किंहों +उनकि +भि +वरग +हà¥à¤… +जेसा +नहिं diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hu.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hu.txt new file mode 100644 index 00000000..37526da8 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hu.txt @@ -0,0 +1,211 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + +| Hungarian stop word list +| prepared by Anna Tordai + +a +ahogy +ahol +aki +akik +akkor +alatt +által +általában +amely +amelyek +amelyekben +amelyeket +amelyet +amelynek +ami +amit +amolyan +amíg +amikor +át +abban +ahhoz +annak +arra +arról +az +azok +azon +azt +azzal +azért +aztán +azután +azonban +bár +be +belül +benne +cikk +cikkek +cikkeket +csak +de +e +eddig +egész +egy +egyes +egyetlen +egyéb +egyik +egyre +ekkor +el +elég +ellen +elÅ‘ +elÅ‘ször +elÅ‘tt +elsÅ‘ +én +éppen +ebben +ehhez +emilyen +ennek +erre +ez +ezt +ezek +ezen +ezzel +ezért +és +fel +felé +hanem +hiszen +hogy +hogyan +igen +így +illetve +ill. +ill +ilyen +ilyenkor +ison +ismét +itt +jó +jól +jobban +kell +kellett +keresztül +keressünk +ki +kívül +között +közül +legalább +lehet +lehetett +legyen +lenne +lenni +lesz +lett +maga +magát +majd +majd +már +más +másik +meg +még +mellett +mert +mely +melyek +mi +mit +míg +miért +milyen +mikor +minden +mindent +mindenki +mindig +mint +mintha +mivel +most +nagy +nagyobb +nagyon +ne +néha +nekem +neki +nem +néhány +nélkül +nincs +olyan +ott +össze +Å‘ +Å‘k +Å‘ket +pedig +persze +rá +s +saját +sem +semmi +sok +sokat +sokkal +számára +szemben +szerint +szinte +talán +tehát +teljes +tovább +továbbá +több +úgy +ugyanis +új +újabb +újra +után +utána +utolsó +vagy +vagyis +valaki +valami +valamint +való +vagyok +van +vannak +volt +voltam +voltak +voltunk +vissza +vele +viszont +volna diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hy.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hy.txt new file mode 100644 index 00000000..60c1c50f --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_hy.txt @@ -0,0 +1,46 @@ +# example set of Armenian stopwords. +Õ¡ÕµÕ¤ +Õ¡ÕµÕ¬ +Õ¡ÕµÕ¶ +Õ¡ÕµÕ½ +Õ¤Õ¸Ö‚ +Õ¤Õ¸Ö‚Ö„ +Õ¥Õ´ +Õ¥Õ¶ +Õ¥Õ¶Ö„ +Õ¥Õ½ +Õ¥Ö„ +Õ§ +Õ§Õ« +Õ§Õ«Õ¶ +Õ§Õ«Õ¶Ö„ +Õ§Õ«Ö€ +Õ§Õ«Ö„ +Õ§Ö€ +Õ¨Õ½Õ¿ +Õ© +Õ« +Õ«Õ¶ +Õ«Õ½Õ¯ +Õ«Ö€ +Õ¯Õ¡Õ´ +Õ°Õ¡Õ´Õ¡Ö€ +Õ°Õ¥Õ¿ +Õ°Õ¥Õ¿Õ¸ +Õ´Õ¥Õ¶Ö„ +Õ´Õ¥Õ» +Õ´Õ« +Õ¶ +Õ¶Õ¡ +Õ¶Õ¡Ö‡ +Õ¶Ö€Õ¡ +Õ¶Ö€Õ¡Õ¶Ö„ +Õ¸Ö€ +Õ¸Ö€Õ¨ +Õ¸Ö€Õ¸Õ¶Ö„ +Õ¸Ö€ÕºÕ¥Õ½ +Õ¸Ö‚ +Õ¸Ö‚Õ´ +ÕºÕ«Õ¿Õ« +Õ¾Ö€Õ¡ +Ö‡ diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_id.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_id.txt new file mode 100644 index 00000000..4617f83a --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_id.txt @@ -0,0 +1,359 @@ +# from appendix D of: A Study of Stemming Effects on Information +# Retrieval in Bahasa Indonesia +ada +adanya +adalah +adapun +agak +agaknya +agar +akan +akankah +akhirnya +aku +akulah +amat +amatlah +anda +andalah +antar +diantaranya +antara +antaranya +diantara +apa +apaan +mengapa +apabila +apakah +apalagi +apatah +atau +ataukah +ataupun +bagai +bagaikan +sebagai +sebagainya +bagaimana +bagaimanapun +sebagaimana +bagaimanakah +bagi +bahkan +bahwa +bahwasanya +sebaliknya +banyak +sebanyak +beberapa +seberapa +begini +beginian +beginikah +beginilah +sebegini +begitu +begitukah +begitulah +begitupun +sebegitu +belum +belumlah +sebelum +sebelumnya +sebenarnya +berapa +berapakah +berapalah +berapapun +betulkah +sebetulnya +biasa +biasanya +bila +bilakah +bisa +bisakah +sebisanya +boleh +bolehkah +bolehlah +buat +bukan +bukankah +bukanlah +bukannya +cuma +percuma +dahulu +dalam +dan +dapat +dari +daripada +dekat +demi +demikian +demikianlah +sedemikian +dengan +depan +di +dia +dialah +dini +diri +dirinya +terdiri +dong +dulu +enggak +enggaknya +entah +entahlah +terhadap +terhadapnya +hal +hampir +hanya +hanyalah +harus +haruslah +harusnya +seharusnya +hendak +hendaklah +hendaknya +hingga +sehingga +ia +ialah +ibarat +ingin +inginkah +inginkan +ini +inikah +inilah +itu +itukah +itulah +jangan +jangankan +janganlah +jika +jikalau +juga +justru +kala +kalau +kalaulah +kalaupun +kalian +kami +kamilah +kamu +kamulah +kan +kapan +kapankah +kapanpun +dikarenakan +karena +karenanya +ke +kecil +kemudian +kenapa +kepada +kepadanya +ketika +seketika +khususnya +kini +kinilah +kiranya +sekiranya +kita +kitalah +kok +lagi +lagian +selagi +lah +lain +lainnya +melainkan +selaku +lalu +melalui +terlalu +lama +lamanya +selama +selama +selamanya +lebih +terlebih +bermacam +macam +semacam +maka +makanya +makin +malah +malahan +mampu +mampukah +mana +manakala +manalagi +masih +masihkah +semasih +masing +mau +maupun +semaunya +memang +mereka +merekalah +meski +meskipun +semula +mungkin +mungkinkah +nah +namun +nanti +nantinya +nyaris +oleh +olehnya +seorang +seseorang +pada +padanya +padahal +paling +sepanjang +pantas +sepantasnya +sepantasnyalah +para +pasti +pastilah +per +pernah +pula +pun +merupakan +rupanya +serupa +saat +saatnya +sesaat +saja +sajalah +saling +bersama +sama +sesama +sambil +sampai +sana +sangat +sangatlah +saya +sayalah +se +sebab +sebabnya +sebuah +tersebut +tersebutlah +sedang +sedangkan +sedikit +sedikitnya +segala +segalanya +segera +sesegera +sejak +sejenak +sekali +sekalian +sekalipun +sesekali +sekaligus +sekarang +sekarang +sekitar +sekitarnya +sela +selain +selalu +seluruh +seluruhnya +semakin +sementara +sempat +semua +semuanya +sendiri +sendirinya +seolah +seperti +sepertinya +sering +seringnya +serta +siapa +siapakah +siapapun +disini +disinilah +sini +sinilah +sesuatu +sesuatunya +suatu +sesudah +sesudahnya +sudah +sudahkah +sudahlah +supaya +tadi +tadinya +tak +tanpa +setelah +telah +tentang +tentu +tentulah +tentunya +tertentu +seterusnya +tapi +tetapi +setiap +tiap +setidaknya +tidak +tidakkah +tidaklah +toh +waduh +wah +wahai +sewaktu +walau +walaupun +wong +yaitu +yakni +yang diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_it.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_it.txt new file mode 100644 index 00000000..1219cc77 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_it.txt @@ -0,0 +1,303 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | An Italian stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + +ad | a (to) before vowel +al | a + il +allo | a + lo +ai | a + i +agli | a + gli +all | a + l' +agl | a + gl' +alla | a + la +alle | a + le +con | with +col | con + il +coi | con + i (forms collo, cogli etc are now very rare) +da | from +dal | da + il +dallo | da + lo +dai | da + i +dagli | da + gli +dall | da + l' +dagl | da + gll' +dalla | da + la +dalle | da + le +di | of +del | di + il +dello | di + lo +dei | di + i +degli | di + gli +dell | di + l' +degl | di + gl' +della | di + la +delle | di + le +in | in +nel | in + el +nello | in + lo +nei | in + i +negli | in + gli +nell | in + l' +negl | in + gl' +nella | in + la +nelle | in + le +su | on +sul | su + il +sullo | su + lo +sui | su + i +sugli | su + gli +sull | su + l' +sugl | su + gl' +sulla | su + la +sulle | su + le +per | through, by +tra | among +contro | against +io | I +tu | thou +lui | he +lei | she +noi | we +voi | you +loro | they +mio | my +mia | +miei | +mie | +tuo | +tua | +tuoi | thy +tue | +suo | +sua | +suoi | his, her +sue | +nostro | our +nostra | +nostri | +nostre | +vostro | your +vostra | +vostri | +vostre | +mi | me +ti | thee +ci | us, there +vi | you, there +lo | him, the +la | her, the +li | them +le | them, the +gli | to him, the +ne | from there etc +il | the +un | a +uno | a +una | a +ma | but +ed | and +se | if +perché | why, because +anche | also +come | how +dov | where (as dov') +dove | where +che | who, that +chi | who +cui | whom +non | not +più | more +quale | who, that +quanto | how much +quanti | +quanta | +quante | +quello | that +quelli | +quella | +quelle | +questo | this +questi | +questa | +queste | +si | yes +tutto | all +tutti | all + + | single letter forms: + +a | at +c | as c' for ce or ci +e | and +i | the +l | as l' +o | or + + | forms of avere, to have (not including the infinitive): + +ho +hai +ha +abbiamo +avete +hanno +abbia +abbiate +abbiano +avrò +avrai +avrà +avremo +avrete +avranno +avrei +avresti +avrebbe +avremmo +avreste +avrebbero +avevo +avevi +aveva +avevamo +avevate +avevano +ebbi +avesti +ebbe +avemmo +aveste +ebbero +avessi +avesse +avessimo +avessero +avendo +avuto +avuta +avuti +avute + + | forms of essere, to be (not including the infinitive): +sono +sei +è +siamo +siete +sia +siate +siano +sarò +sarai +sarà +saremo +sarete +saranno +sarei +saresti +sarebbe +saremmo +sareste +sarebbero +ero +eri +era +eravamo +eravate +erano +fui +fosti +fu +fummo +foste +furono +fossi +fosse +fossimo +fossero +essendo + + | forms of fare, to do (not including the infinitive, fa, fat-): +faccio +fai +facciamo +fanno +faccia +facciate +facciano +farò +farai +farà +faremo +farete +faranno +farei +faresti +farebbe +faremmo +fareste +farebbero +facevo +facevi +faceva +facevamo +facevate +facevano +feci +facesti +fece +facemmo +faceste +fecero +facessi +facesse +facessimo +facessero +facendo + + | forms of stare, to be (not including the infinitive): +sto +stai +sta +stiamo +stanno +stia +stiate +stiano +starò +starai +starà +staremo +starete +staranno +starei +staresti +starebbe +staremmo +stareste +starebbero +stavo +stavi +stava +stavamo +stavate +stavano +stetti +stesti +stette +stemmo +steste +stettero +stessi +stesse +stessimo +stessero +stando diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ja.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ja.txt new file mode 100644 index 00000000..d4321be6 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ja.txt @@ -0,0 +1,127 @@ +# +# This file defines a stopword set for Japanese. +# +# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia. +# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745 +# for frequency lists, etc. that can be useful for making your own set (if desired) +# +# Note that there is an overlap between these stopwords and the terms stopped when used +# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note +# that comments are not allowed on the same line as stopwords. +# +# Also note that stopping is done in a case-insensitive manner. Change your StopFilter +# configuration if you need case-sensitive stopping. Lastly, note that stopping is done +# using the same character width as the entries in this file. Since this StopFilter is +# normally done after a CJKWidthFilter in your chain, you would usually want your romaji +# entries to be in half-width and your kana entries to be in full-width. +# +ã® +ã« +㯠+ã‚’ +㟠+㌠+ã§ +㦠+㨠+ã— +れ +ã• +ã‚ã‚‹ +ã„ã‚‹ +ã‚‚ +ã™ã‚‹ +ã‹ã‚‰ +㪠+ã“㨠+ã¨ã—㦠+ã„ +ã‚„ +れる +ãªã© +ãªã£ +ãªã„ +ã“ã® +ãŸã‚ +ãã® +ã‚㣠+よㆠ+ã¾ãŸ +ã‚‚ã® +ã¨ã„ㆠ+ã‚り +ã¾ã§ +られ +ãªã‚‹ +㸠+ã‹ +ã  +ã“れ +ã«ã‚ˆã£ã¦ +ã«ã‚ˆã‚Š +ãŠã‚Š +より +ã«ã‚ˆã‚‹ +ãš +ãªã‚Š +られる +ã«ãŠã„㦠+ã° +ãªã‹ã£ +ãªã +ã—ã‹ã— +ã«ã¤ã„㦠+ã› +ã ã£ +ãã®å¾Œ +ã§ãã‚‹ +ãれ +ㆠ+ã®ã§ +ãªãŠ +ã®ã¿ +ã§ã +ã +㤠+ã«ãŠã‘ã‚‹ +ãŠã‚ˆã³ +ã„ㆠ+ã•ら㫠+ã§ã‚‚ +ら +ãŸã‚Š +ãã®ä»– +ã«é–¢ã™ã‚‹ +ãŸã¡ +ã¾ã™ +ã‚“ +ãªã‚‰ +ã«å¯¾ã—㦠+特㫠+ã›ã‚‹ +åŠã³ +ã“れら +ã¨ã +ã§ã¯ +ã«ã¦ +ã»ã‹ +ãªãŒã‚‰ +ã†ã¡ +ãã—㦠+ã¨ã¨ã‚‚ã« +ãŸã ã— +ã‹ã¤ã¦ +ãれãžã‚Œ +ã¾ãŸã¯ +㊠+ã»ã© +ã‚‚ã®ã® +ã«å¯¾ã™ã‚‹ +ã»ã¨ã‚“ã© +ã¨å…±ã« +ã¨ã„ã£ãŸ +ã§ã™ +ã¨ã‚‚ +ã¨ã“ã‚ +ã“ã“ +##### End of file diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_lv.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_lv.txt new file mode 100644 index 00000000..e21a23c0 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_lv.txt @@ -0,0 +1,172 @@ +# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins +# the original list of over 800 forms was refined: +# pronouns, adverbs, interjections were removed +# +# prepositions +aiz +ap +ar +apakÅ¡ +Ärpus +augÅ¡pus +bez +caur +dēļ +gar +iekÅ¡ +iz +kopÅ¡ +labad +lejpus +lÄ«dz +no +otrpus +pa +par +pÄr +pÄ“c +pie +pirms +pret +priekÅ¡ +starp +Å¡aipus +uz +viņpus +virs +virspus +zem +apakÅ¡pus +# Conjunctions +un +bet +jo +ja +ka +lai +tomÄ“r +tikko +turpretÄ« +arÄ« +kaut +gan +tÄdēļ +tÄ +ne +tikvien +vien +kÄ +ir +te +vai +kamÄ“r +# Particles +ar +diezin +droÅ¡i +diemžēl +nebÅ«t +ik +it +taÄu +nu +pat +tiklab +iekÅ¡pus +nedz +tik +nevis +turpretim +jeb +iekam +iekÄm +iekÄms +kolÄ«dz +lÄ«dzko +tiklÄ«dz +jebÅ¡u +tÄlab +tÄpÄ“c +nekÄ +itin +jÄ +jau +jel +nÄ“ +nezin +tad +tikai +vis +tak +iekams +vien +# modal verbs +bÅ«t +biju +biji +bija +bijÄm +bijÄt +esmu +esi +esam +esat +būšu +bÅ«si +bÅ«s +bÅ«sim +bÅ«siet +tikt +tiku +tiki +tika +tikÄm +tikÄt +tieku +tiec +tiek +tiekam +tiekat +tikÅ¡u +tiks +tiksim +tiksiet +tapt +tapi +tapÄt +topat +tapÅ¡u +tapsi +taps +tapsim +tapsiet +kļūt +kļuvu +kļuvi +kļuva +kļuvÄm +kļuvÄt +kļūstu +kļūsti +kļūst +kļūstam +kļūstat +kļūšu +kļūsi +kļūs +kļūsim +kļūsiet +# verbs +varÄ“t +varÄ“ju +varÄ“jÄm +varēšu +varÄ“sim +var +varÄ“ji +varÄ“jÄt +varÄ“si +varÄ“siet +varat +varÄ“ja +varÄ“s diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_nl.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_nl.txt new file mode 100644 index 00000000..47a2aeac --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_nl.txt @@ -0,0 +1,119 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Dutch stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large sample of Dutch text. + + | Dutch stop words frequently exhibit homonym clashes. These are indicated + | clearly below. + +de | the +en | and +van | of, from +ik | I, the ego +te | (1) chez, at etc, (2) to, (3) too +dat | that, which +die | that, those, who, which +in | in, inside +een | a, an, one +hij | he +het | the, it +niet | not, nothing, naught +zijn | (1) to be, being, (2) his, one's, its +is | is +was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river +op | on, upon, at, in, up, used up +aan | on, upon, to (as dative) +met | with, by +als | like, such as, when +voor | (1) before, in front of, (2) furrow +had | had, past tense all persons sing. of 'hebben' (have) +er | there +maar | but, only +om | round, about, for etc +hem | him +dan | then +zou | should/would, past tense all persons sing. of 'zullen' +of | or, whether, if +wat | what, something, anything +mijn | possessive and noun 'mine' +men | people, 'one' +dit | this +zo | so, thus, in this way +door | through by +over | over, across +ze | she, her, they, them +zich | oneself +bij | (1) a bee, (2) by, near, at +ook | also, too +tot | till, until +je | you +mij | me +uit | out of, from +der | Old Dutch form of 'van der' still found in surnames +daar | (1) there, (2) because +haar | (1) her, their, them, (2) hair +naar | (1) unpleasant, unwell etc, (2) towards, (3) as +heb | present first person sing. of 'to have' +hoe | how, why +heeft | present third person sing. of 'to have' +hebben | 'to have' and various parts thereof +deze | this +u | you +want | (1) for, (2) mitten, (3) rigging +nog | yet, still +zal | 'shall', first and third person sing. of verb 'zullen' (will) +me | me +zij | she, they +nu | now +ge | 'thou', still used in Belgium and south Netherlands +geen | none +omdat | because +iets | something, somewhat +worden | to become, grow, get +toch | yet, still +al | all, every, each +waren | (1) 'were' (2) to wander, (3) wares, (3) +veel | much, many +meer | (1) more, (2) lake +doen | to do, to make +toen | then, when +moet | noun 'spot/mote' and present form of 'to must' +ben | (1) am, (2) 'are' in interrogative second person singular of 'to be' +zonder | without +kan | noun 'can' and present form of 'to be able' +hun | their, them +dus | so, consequently +alles | all, everything, anything +onder | under, beneath +ja | yes, of course +eens | once, one day +hier | here +wie | who +werd | imperfect third person sing. of 'become' +altijd | always +doch | yet, but etc +wordt | present third person sing. of 'become' +wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans +kunnen | to be able +ons | us/our +zelf | self +tegen | against, towards, at +na | after, near +reeds | already +wil | (1) present tense of 'want', (2) 'will', noun, (3) fender +kon | could; past tense of 'to be able' +niets | nothing +uw | your +iemand | somebody +geweest | been; past participle of 'be' +andere | other diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_no.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_no.txt new file mode 100644 index 00000000..a7a2c28b --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_no.txt @@ -0,0 +1,194 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Norwegian stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This stop word list is for the dominant bokmÃ¥l dialect. Words unique + | to nynorsk are marked *. + + | Revised by Jan Bruusgaard , Jan 2005 + +og | and +i | in +jeg | I +det | it/this/that +at | to (w. inf.) +en | a/an +et | a/an +den | it/this/that +til | to +er | is/am/are +som | who/that +pÃ¥ | on +de | they / you(formal) +med | with +han | he +av | of +ikke | not +ikkje | not * +der | there +sÃ¥ | so +var | was/were +meg | me +seg | you +men | but +ett | one +har | have +om | about +vi | we +min | my +mitt | my +ha | have +hadde | had +hun | she +nÃ¥ | now +over | over +da | when/as +ved | by/know +fra | from +du | you +ut | out +sin | your +dem | them +oss | us +opp | up +man | you/one +kan | can +hans | his +hvor | where +eller | or +hva | what +skal | shall/must +selv | self (reflective) +sjøl | self (reflective) +her | here +alle | all +vil | will +bli | become +ble | became +blei | became * +blitt | have become +kunne | could +inn | in +nÃ¥r | when +være | be +kom | come +noen | some +noe | some +ville | would +dere | you +som | who/which/that +deres | their/theirs +kun | only/just +ja | yes +etter | after +ned | down +skulle | should +denne | this +for | for/because +deg | you +si | hers/his +sine | hers/his +sitt | hers/his +mot | against +Ã¥ | to +meget | much +hvorfor | why +dette | this +disse | these/those +uten | without +hvordan | how +ingen | none +din | your +ditt | your +blir | become +samme | same +hvilken | which +hvilke | which (plural) +sÃ¥nn | such a +inni | inside/within +mellom | between +vÃ¥r | our +hver | each +hvem | who +vors | us/ours +hvis | whose +bÃ¥de | both +bare | only/just +enn | than +fordi | as/because +før | before +mange | many +ogsÃ¥ | also +slik | just +vært | been +være | to be +bÃ¥e | both * +begge | both +siden | since +dykk | your * +dykkar | yours * +dei | they * +deira | them * +deires | theirs * +deim | them * +di | your (fem.) * +dÃ¥ | as/when * +eg | I * +ein | a/an * +eit | a/an * +eitt | a/an * +elles | or * +honom | he * +hjÃ¥ | at * +ho | she * +hoe | she * +henne | her +hennar | her/hers +hennes | hers +hoss | how * +hossen | how * +ikkje | not * +ingi | noone * +inkje | noone * +korleis | how * +korso | how * +kva | what/which * +kvar | where * +kvarhelst | where * +kven | who/whom * +kvi | why * +kvifor | why * +me | we * +medan | while * +mi | my * +mine | my * +mykje | much * +no | now * +nokon | some (masc./neut.) * +noka | some (fem.) * +nokor | some * +noko | some * +nokre | some * +si | his/hers * +sia | since * +sidan | since * +so | so * +somt | some * +somme | some * +um | about* +upp | up * +vere | be * +vore | was * +verte | become * +vort | become * +varte | became * +vart | became * + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_pt.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_pt.txt new file mode 100644 index 00000000..acfeb01a --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_pt.txt @@ -0,0 +1,253 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Portuguese stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + + | The following is a ranked list (commonest to rarest) of stopwords + | deriving from a large sample of text. + + | Extra words have been added at the end. + +de | of, from +a | the; to, at; her +o | the; him +que | who, that +e | and +do | de + o +da | de + a +em | in +um | a +para | for + | é from SER +com | with +não | not, no +uma | a +os | the; them +no | em + o +se | himself etc +na | em + a +por | for +mais | more +as | the; them +dos | de + os +como | as, like +mas | but + | foi from SER +ao | a + o +ele | he +das | de + as + | tem from TER +à | a + a +seu | his +sua | her +ou | or + | ser from SER +quando | when +muito | much + | há from HAV +nos | em + os; us +já | already, now + | está from EST +eu | I +também | also +só | only, just +pelo | per + o +pela | per + a +até | up to +isso | that +ela | he +entre | between + | era from SER +depois | after +sem | without +mesmo | same +aos | a + os + | ter from TER +seus | his +quem | whom +nas | em + as +me | me +esse | that +eles | they + | estão from EST +você | you + | tinha from TER + | foram from SER +essa | that +num | em + um +nem | nor +suas | her +meu | my +às | a + as +minha | my + | têm from TER +numa | em + uma +pelos | per + os +elas | they + | havia from HAV + | seja from SER +qual | which + | será from SER +nós | we + | tenho from TER +lhe | to him, her +deles | of them +essas | those +esses | those +pelas | per + as +este | this + | fosse from SER +dele | of him + + | other words. There are many contractions such as naquele = em+aquele, + | mo = me+o, but they are rare. + | Indefinite article plural forms are also rare. + +tu | thou +te | thee +vocês | you (plural) +vos | you +lhes | to them +meus | my +minhas +teu | thy +tua +teus +tuas +nosso | our +nossa +nossos +nossas + +dela | of her +delas | of them + +esta | this +estes | these +estas | these +aquele | that +aquela | that +aqueles | those +aquelas | those +isto | this +aquilo | that + + | forms of estar, to be (not including the infinitive): +estou +está +estamos +estão +estive +esteve +estivemos +estiveram +estava +estávamos +estavam +estivera +estivéramos +esteja +estejamos +estejam +estivesse +estivéssemos +estivessem +estiver +estivermos +estiverem + + | forms of haver, to have (not including the infinitive): +hei +há +havemos +hão +houve +houvemos +houveram +houvera +houvéramos +haja +hajamos +hajam +houvesse +houvéssemos +houvessem +houver +houvermos +houverem +houverei +houverá +houveremos +houverão +houveria +houveríamos +houveriam + + | forms of ser, to be (not including the infinitive): +sou +somos +são +era +éramos +eram +fui +foi +fomos +foram +fora +fôramos +seja +sejamos +sejam +fosse +fôssemos +fossem +for +formos +forem +serei +será +seremos +serão +seria +seríamos +seriam + + | forms of ter, to have (not including the infinitive): +tenho +tem +temos +tém +tinha +tínhamos +tinham +tive +teve +tivemos +tiveram +tivera +tivéramos +tenha +tenhamos +tenham +tivesse +tivéssemos +tivessem +tiver +tivermos +tiverem +terei +terá +teremos +terão +teria +teríamos +teriam diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ro.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ro.txt new file mode 100644 index 00000000..4fdee90a --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ro.txt @@ -0,0 +1,233 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +acea +aceasta +această +aceea +acei +aceia +acel +acela +acele +acelea +acest +acesta +aceste +acestea +aceÅŸti +aceÅŸtia +acolo +acum +ai +aia +aibă +aici +al +ăla +ale +alea +ălea +altceva +altcineva +am +ar +are +aÅŸ +aÅŸadar +asemenea +asta +ăsta +astăzi +astea +ăstea +ăştia +asupra +aÅ£i +au +avea +avem +aveÅ£i +azi +bine +bucur +bună +ca +că +căci +când +care +cărei +căror +cărui +cât +câte +câţi +către +câtva +ce +cel +ceva +chiar +cînd +cine +cineva +cît +cîte +cîţi +cîtva +contra +cu +cum +cumva +curând +curînd +da +dă +dacă +dar +datorită +de +deci +deja +deoarece +departe +deÅŸi +din +dinaintea +dintr +dintre +drept +după +ea +ei +el +ele +eram +este +eÅŸti +eu +face +fără +fi +fie +fiecare +fii +fim +fiÅ£i +iar +ieri +îi +îl +îmi +împotriva +în +înainte +înaintea +încât +încît +încotro +între +întrucât +întrucît +îţi +la +lângă +le +li +lîngă +lor +lui +mă +mâine +mea +mei +mele +mereu +meu +mi +mine +mult +multă +mulÅ£i +ne +nicăieri +nici +nimeni +niÅŸte +noastră +noastre +noi +noÅŸtri +nostru +nu +ori +oricând +oricare +oricât +orice +oricînd +oricine +oricît +oricum +oriunde +până +pe +pentru +peste +pînă +poate +pot +prea +prima +primul +prin +printr +sa +să +săi +sale +sau +său +se +ÅŸi +sînt +sîntem +sînteÅ£i +spre +sub +sunt +suntem +sunteÅ£i +ta +tăi +tale +tău +te +Å£i +Å£ie +tine +toată +toate +tot +toÅ£i +totuÅŸi +tu +un +una +unde +undeva +unei +unele +uneori +unor +vă +vi +voastră +voastre +voi +voÅŸtri +vostru +vouă +vreo +vreun diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ru.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ru.txt new file mode 100644 index 00000000..55271400 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_ru.txt @@ -0,0 +1,243 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | a russian stop word list. comments begin with vertical bar. each stop + | word is at the start of a line. + + | this is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + | letter `Ñ‘' is translated to `е'. + +и | and +в | in/into +во | alternative form +не | not +что | what/that +он | he +на | on/onto +Ñ | i +Ñ | from +Ñо | alternative form +как | how +а | milder form of `no' (but) +то | conjunction and form of `that' +вÑе | all +она | she +так | so, thus +его | him +но | but +да | yes/and +ты | thou +к | towards, by +у | around, chez +же | intensifier particle +вы | you +за | beyond, behind +бы | conditional/subj. particle +по | up to, along +только | only +ее | her +мне | to me +было | it was +вот | here is/are, particle +от | away from +Ð¼ÐµÐ½Ñ | me +еще | still, yet, more +нет | no, there isnt/arent +о | about +из | out of +ему | to him +теперь | now +когда | when +даже | even +ну | so, well +вдруг | suddenly +ли | interrogative particle +еÑли | if +уже | already, but homonym of `narrower' +или | or +ни | neither +быть | to be +был | he was +него | prepositional form of его +до | up to +Ð²Ð°Ñ | you accusative +нибудь | indef. suffix preceded by hyphen +опÑть | again +уж | already, but homonym of `adder' +вам | to you +Ñказал | he said +ведь | particle `after all' +там | there +потом | then +ÑÐµÐ±Ñ | oneself +ничего | nothing +ей | to her +может | usually with `быть' as `maybe' +они | they +тут | here +где | where +еÑть | there is/are +надо | got to, must +ней | prepositional form of ей +Ð´Ð»Ñ | for +мы | we +Ñ‚ÐµÐ±Ñ | thee +их | them, their +чем | than +была | she was +Ñам | self +чтоб | in order to +без | without +будто | as if +человек | man, person, one +чего | genitive form of `what' +раз | once +тоже | also +Ñебе | to oneself +под | beneath +жизнь | life +будет | will be +ж | short form of intensifer particle `же' +тогда | then +кто | who +Ñтот | this +говорил | was saying +того | genitive form of `that' +потому | for that reason +Ñтого | genitive form of `this' +какой | which +ÑовÑем | altogether +ним | prepositional form of `его', `они' +здеÑÑŒ | here +Ñтом | prepositional form of `Ñтот' +один | one +почти | almost +мой | my +тем | instrumental/dative plural of `тот', `то' +чтобы | full form of `in order that' +нее | her (acc.) +кажетÑÑ | it seems +ÑÐµÐ¹Ñ‡Ð°Ñ | now +были | they were +куда | where to +зачем | why +Ñказать | to say +вÑех | all (acc., gen. preposn. plural) +никогда | never +ÑÐµÐ³Ð¾Ð´Ð½Ñ | today +можно | possible, one can +при | by +наконец | finally +два | two +об | alternative form of `о', about +другой | another +хоть | even +поÑле | after +над | above +больше | more +тот | that one (masc.) +через | across, in +Ñти | these +Ð½Ð°Ñ | us +про | about +вÑего | in all, only, of all +них | prepositional form of `они' (they) +ÐºÐ°ÐºÐ°Ñ | which, feminine +много | lots +разве | interrogative particle +Ñказала | she said +три | three +Ñту | this, acc. fem. sing. +Ð¼Ð¾Ñ | my, feminine +впрочем | moreover, besides +хорошо | good +Ñвою | ones own, acc. fem. sing. +Ñтой | oblique form of `Ñта', fem. `this' +перед | in front of +иногда | sometimes +лучше | better +чуть | a little +том | preposn. form of `that one' +Ð½ÐµÐ»ÑŒÐ·Ñ | one must not +такой | such a one +им | to them +более | more +вÑегда | always +конечно | of course +вÑÑŽ | acc. fem. sing of `all' +между | between + + + | b: some paradigms + | + | personal pronouns + | + | Ñ Ð¼ÐµÐ½Ñ Ð¼Ð½Ðµ мной [мною] + | ты Ñ‚ÐµÐ±Ñ Ñ‚ÐµÐ±Ðµ тобой [тобою] + | он его ему им [него, нему, ним] + | она ее Ñи ею [нее, нÑи, нею] + | оно его ему им [него, нему, ним] + | + | мы Ð½Ð°Ñ Ð½Ð°Ð¼ нами + | вы Ð²Ð°Ñ Ð²Ð°Ð¼ вами + | они их им ими [них, ним, ними] + | + | ÑÐµÐ±Ñ Ñебе Ñобой [Ñобою] + | + | demonstrative pronouns: Ñтот (this), тот (that) + | + | Ñтот Ñта Ñто Ñти + | Ñтого Ñты Ñто Ñти + | Ñтого Ñтой Ñтого Ñтих + | Ñтому Ñтой Ñтому Ñтим + | Ñтим Ñтой Ñтим [Ñтою] Ñтими + | Ñтом Ñтой Ñтом Ñтих + | + | тот та то те + | того ту то те + | того той того тех + | тому той тому тем + | тем той тем [тою] теми + | том той том тех + | + | determinative pronouns + | + | (a) веÑÑŒ (all) + | + | веÑÑŒ вÑÑ Ð²Ñе вÑе + | вÑего вÑÑŽ вÑе вÑе + | вÑего вÑей вÑего вÑех + | вÑему вÑей вÑему вÑем + | вÑем вÑей вÑем [вÑею] вÑеми + | вÑем вÑей вÑем вÑех + | + | (b) Ñам (himself etc) + | + | Ñам Ñама Ñамо Ñами + | Ñамого Ñаму Ñамо Ñамих + | Ñамого Ñамой Ñамого Ñамих + | Ñамому Ñамой Ñамому Ñамим + | Ñамим Ñамой Ñамим [Ñамою] Ñамими + | Ñамом Ñамой Ñамом Ñамих + | + | stems of verbs `to be', `to have', `to do' and modal + | + | быть бы буд быв еÑть Ñуть + | име + | дел + | мог мож мочь + | уме + | хоч хот + | долж + | можн + | нужн + | Ð½ÐµÐ»ÑŒÐ·Ñ + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_sv.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_sv.txt new file mode 100644 index 00000000..096f87f6 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_sv.txt @@ -0,0 +1,133 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Swedish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + | Swedish stop words occasionally exhibit homonym clashes. For example + | sÃ¥ = so, but also seed. These are indicated clearly below. + +och | and +det | it, this/that +att | to (with infinitive) +i | in, at +en | a +jag | I +hon | she +som | who, that +han | he +pÃ¥ | on +den | it, this/that +med | with +var | where, each +sig | him(self) etc +för | for +sÃ¥ | so (also: seed) +till | to +är | is +men | but +ett | a +om | if; around, about +hade | had +de | they, these/those +av | of +icke | not, no +mig | me +du | you +henne | her +dÃ¥ | then, when +sin | his +nu | now +har | have +inte | inte nÃ¥gon = no one +hans | his +honom | him +skulle | 'sake' +hennes | her +där | there +min | my +man | one (pronoun) +ej | nor +vid | at, by, on (also: vast) +kunde | could +nÃ¥got | some etc +frÃ¥n | from, off +ut | out +när | when +efter | after, behind +upp | up +vi | we +dem | them +vara | be +vad | what +över | over +än | than +dig | you +kan | can +sina | his +här | here +ha | have +mot | towards +alla | all +under | under (also: wonder) +nÃ¥gon | some etc +eller | or (else) +allt | all +mycket | much +sedan | since +ju | why +denna | this/that +själv | myself, yourself etc +detta | this/that +Ã¥t | to +utan | without +varit | was +hur | how +ingen | no +mitt | my +ni | you +bli | to be, become +blev | from bli +oss | us +din | thy +dessa | these/those +nÃ¥gra | some etc +deras | their +blir | from bli +mina | my +samma | (the) same +vilken | who, that +er | you, your +sÃ¥dan | such a +vÃ¥r | our +blivit | from bli +dess | its +inom | within +mellan | between +sÃ¥dant | such a +varför | why +varje | each +vilka | who, that +ditt | thy +vem | who +vilket | who, that +sitta | his +sÃ¥dana | such a +vart | each +dina | thy +vars | whose +vÃ¥rt | our +vÃ¥ra | our +ert | your +era | your +vilkas | whose + diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_th.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_th.txt new file mode 100644 index 00000000..07f0fabe --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_th.txt @@ -0,0 +1,119 @@ +# Thai stopwords from: +# "Opinion Detection in Thai Political News Columns +# Based on Subjectivity Analysis" +# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak +ไว้ +ไม่ +ไป +ได้ +ให้ +ใน +โดย +à¹à¸«à¹ˆà¸‡ +à¹à¸¥à¹‰à¸§ +à¹à¸¥à¸° +à¹à¸£à¸ +à¹à¸šà¸š +à¹à¸•่ +เอง +เห็น +เลย +เริ่ม +เรา +เมื่อ +เพื่อ +เพราะ +เป็นà¸à¸²à¸£ +เป็น +เปิดเผย +เปิด +เนื่องจาภ+เดียวà¸à¸±à¸™ +เดียว +เช่น +เฉพาะ +เคย +เข้า +เขา +อีภ+อาจ +อะไร +ออภ+อย่าง +อยู่ +อยาภ+หาภ+หลาย +หลังจาภ+หลัง +หรือ +หนึ่ง +ส่วน +ส่ง +สุด +สà¹à¸²à¸«à¸£à¸±à¸š +ว่า +วัน +ลง +ร่วม +ราย +รับ +ระหว่าง +รวม +ยัง +มี +มาภ+มา +พร้อม +พบ +ผ่าน +ผล +บาง +น่า +นี้ +นà¹à¸² +นั้น +นัภ+นอà¸à¸ˆà¸²à¸ +ทุภ+ที่สุด +ที่ +ทà¹à¸²à¹ƒà¸«à¹‰ +ทà¹à¸² +ทาง +ทั้งนี้ +ทั้ง +ถ้า +ถูภ+ถึง +ต้อง +ต่างๆ +ต่าง +ต่อ +ตาม +ตั้งà¹à¸•่ +ตั้ง +ด้าน +ด้วย +ดัง +ซึ่ง +ช่วง +จึง +จาภ+จัด +จะ +คือ +ความ +ครั้ง +คง +ขึ้น +ของ +ขอ +ขณะ +à¸à¹ˆà¸­à¸™ +à¸à¹‡ +à¸à¸²à¸£ +à¸à¸±à¸š +à¸à¸±à¸™ +à¸à¸§à¹ˆà¸² +à¸à¸¥à¹ˆà¸²à¸§ diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_tr.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_tr.txt new file mode 100644 index 00000000..84d9408d --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/stopwords_tr.txt @@ -0,0 +1,212 @@ +# Turkish stopwords from LUCENE-559 +# merged with the list from "Information Retrieval on Turkish Texts" +# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf) +acaba +altmış +altı +ama +ancak +arada +aslında +ayrıca +bana +bazı +belki +ben +benden +beni +benim +beri +beÅŸ +bile +bin +bir +birçok +biri +birkaç +birkez +birÅŸey +birÅŸeyi +biz +bize +bizden +bizi +bizim +böyle +böylece +bu +buna +bunda +bundan +bunlar +bunları +bunların +bunu +bunun +burada +çok +çünkü +da +daha +dahi +de +defa +deÄŸil +diÄŸer +diye +doksan +dokuz +dolayı +dolayısıyla +dört +edecek +eden +ederek +edilecek +ediliyor +edilmesi +ediyor +eÄŸer +elli +en +etmesi +etti +ettiÄŸi +ettiÄŸini +gibi +göre +halen +hangi +hatta +hem +henüz +hep +hepsi +her +herhangi +herkesin +hiç +hiçbir +için +iki +ile +ilgili +ise +iÅŸte +itibaren +itibariyle +kadar +karşın +katrilyon +kendi +kendilerine +kendini +kendisi +kendisine +kendisini +kez +ki +kim +kimden +kime +kimi +kimse +kırk +milyar +milyon +mu +mü +mı +nasıl +ne +neden +nedenle +nerde +nerede +nereye +niye +niçin +o +olan +olarak +oldu +olduÄŸu +olduÄŸunu +olduklarını +olmadı +olmadığı +olmak +olması +olmayan +olmaz +olsa +olsun +olup +olur +olursa +oluyor +on +ona +ondan +onlar +onlardan +onları +onların +onu +onun +otuz +oysa +öyle +pek +raÄŸmen +sadece +sanki +sekiz +seksen +sen +senden +seni +senin +siz +sizden +sizi +sizin +ÅŸey +ÅŸeyden +ÅŸeyi +ÅŸeyler +şöyle +ÅŸu +ÅŸuna +ÅŸunda +ÅŸundan +ÅŸunları +ÅŸunu +tarafından +trilyon +tüm +üç +üzere +var +vardı +ve +veya +ya +yani +yapacak +yapılan +yapılması +yapıyor +yapmak +yaptı +yaptığı +yaptığını +yaptıkları +yedi +yerine +yetmiÅŸ +yine +yirmi +yoksa +yüz +zaten diff --git a/core-customize/solr/server/solr/configsets/default/conf/lang/userdict_ja.txt b/core-customize/solr/server/solr/configsets/default/conf/lang/userdict_ja.txt new file mode 100644 index 00000000..6f0368e4 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/lang/userdict_ja.txt @@ -0,0 +1,29 @@ +# +# This is a sample user dictionary for Kuromoji (JapaneseTokenizer) +# +# Add entries to this file in order to override the statistical model in terms +# of segmentation, readings and part-of-speech tags. Notice that entries do +# not have weights since they are always used when found. This is by-design +# in order to maximize ease-of-use. +# +# Entries are defined using the following CSV format: +# , ... , ... , +# +# Notice that a single half-width space separates tokens and readings, and +# that the number tokens and readings must match exactly. +# +# Also notice that multiple entries with the same is undefined. +# +# Whitespace only lines are ignored. Comments are not allowed on entry lines. +# + +# Custom segmentation for kanji compounds +日本経済新èž,日本 経済 æ–°èž,ニホン ケイザイ シンブン,カスタムå詞 +関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタムå詞 + +# Custom segmentation for compound katakana +トートãƒãƒƒã‚°,トート ãƒãƒƒã‚°,トート ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞 +ショルダーãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ショルダー ãƒãƒƒã‚°,ã‹ãšã‚«ãƒŠå詞 + +# Custom reading for former sumo wrestler +æœé’é¾,æœé’é¾,アサショウリュウ,カスタム人å diff --git a/core-customize/solr/server/solr/configsets/default/conf/protwords.txt b/core-customize/solr/server/solr/configsets/default/conf/protwords.txt new file mode 100644 index 00000000..e69de29b diff --git a/core-customize/solr/server/solr/configsets/default/conf/schema.xml b/core-customize/solr/server/solr/configsets/default/conf/schema.xml new file mode 100644 index 00000000..66bb7d99 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/schema.xml @@ -0,0 +1,1066 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id + diff --git a/core-customize/solr/server/solr/configsets/default/conf/solrconfig.xml b/core-customize/solr/server/solr/configsets/default/conf/solrconfig.xml new file mode 100644 index 00000000..cede9e64 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/solrconfig.xml @@ -0,0 +1,620 @@ + + + + + 9.12 + + + + de.hybris.platform.solr.rest.IndexAwareStorageIO + ${solr.core.collection:} + ${solr.core.instanceDir} + + + + + + + + ${solr.lock.type:native} + + + + + ${solr.ulog.dir:} + + + + ${solr.autoCommit.maxDocs:25000} + ${solr.autoCommit.maxTime:-1} + false + + + + ${solr.autoSoftCommit.maxDocs:-1} + ${solr.autoSoftCommit.maxTime:-1} + + + + + 1024 + + + + + + + true + + 20 + 200 + + false + + + + + + + + + explicit + 10 + true + + + spellcheck + + + + + + + + true + default + true + 5 + true + 5 + + + suggest + + + + + text_spell + + default + solr.DirectSolrSpellChecker + spellcheck + + + en + solr.DirectSolrSpellChecker + spellcheck_en + + + cs + solr.DirectSolrSpellChecker + spellcheck_cs + + + de + solr.DirectSolrSpellChecker + spellcheck_de + + + es + solr.DirectSolrSpellChecker + spellcheck_es + + + es_CO + solr.DirectSolrSpellChecker + spellcheck_es_co + + + fr + solr.DirectSolrSpellChecker + spellcheck_fr + + + hi + solr.DirectSolrSpellChecker + spellcheck_hi + + + hu + solr.DirectSolrSpellChecker + spellcheck_hu + + + id + solr.DirectSolrSpellChecker + spellcheck_id + + + it + solr.DirectSolrSpellChecker + spellcheck_it + + + ja + solr.DirectSolrSpellChecker + spellcheck_ja + + + ko + solr.DirectSolrSpellChecker + spellcheck_ko + + + pl + solr.DirectSolrSpellChecker + spellcheck_pl + + + pt + solr.DirectSolrSpellChecker + spellcheck_pt + + + ru + solr.DirectSolrSpellChecker + spellcheck_ru + + + zh + solr.DirectSolrSpellChecker + spellcheck_zh + + + zh_TW + solr.DirectSolrSpellChecker + spellcheck_zh_tw + + + + + + + text_spell + + default + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest + true + true + 0.35 + + + en + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_en + true + true + 0.35 + + + cs + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_cs + true + true + 0.35 + + + de + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_de + true + true + 0.35 + + + es + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_es + true + true + 0.35 + + + es_CO + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_es_co + true + true + 0.35 + + + fr + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_fr + true + true + 0.35 + + + hi + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_hi + true + true + 0.35 + + + hu + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_hu + true + true + 0.35 + + + id + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_id + true + true + 0.35 + + + it + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_it + true + true + 0.35 + + + ja + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_ja + true + true + 0.35 + + + ko + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_ko + true + true + 0.35 + + + pl + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_pl + true + true + 0.35 + + + pt + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_pt + true + true + 0.35 + + + ru + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_ru + true + true + 0.35 + + + zh + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_zh + true + true + 0.35 + + + zh_TW + org.apache.solr.spelling.suggest.Suggester + org.apache.solr.spelling.suggest.tst.TSTLookup + autosuggest_zh_tw + true + true + 0.35 + + + + + + + + + + + + + diff --git a/core-customize/solr/server/solr/configsets/default/conf/stopwords.txt b/core-customize/solr/server/solr/configsets/default/conf/stopwords.txt new file mode 100644 index 00000000..535d20a7 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/stopwords.txt @@ -0,0 +1,3 @@ +# some examples: +# and +# or diff --git a/core-customize/solr/server/solr/configsets/default/conf/synonyms.txt b/core-customize/solr/server/solr/configsets/default/conf/synonyms.txt new file mode 100644 index 00000000..dd2fa7f8 --- /dev/null +++ b/core-customize/solr/server/solr/configsets/default/conf/synonyms.txt @@ -0,0 +1,3 @@ +# some examples: +# TV => Television +# GB,gib,gigabyte,gigabytes diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927a4d4fb3f96a785543079b8df6723c946b..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch literal 43764 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d706aba6..5f38436f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c7873..23d15a93 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -114,7 +114,7 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar +CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -133,22 +133,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,18 +200,28 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd32..db3a6ac2 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,8 +13,10 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,7 +27,8 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute +if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,32 +59,34 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar +set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/settings.gradle b/settings.gradle index 56f4c3e0..64543689 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -rootProject.name = 'sapcxtools-workspace' +rootProject.name = 'cxdevtools-workspace' include 'core-customize' \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties index 16375b18..5d67bce8 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,13 +1,13 @@ -sonar.projectKey=sapcxtools_workspace -sonar.organization=sapcxtools +sonar.projectKey=cxdevtools_workspace +sonar.organization=cxdevtools # This is the name and version displayed in the SonarCloud UI. -sonar.projectName=sapcxtools-workspace +sonar.projectName=cxdevtools-workspace sonar.projectVersion=5.0.0-snapshot # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. -sonar.sources=core-customize/hybris/bin/custom/sapcxtools -sonar.java.binaries=core-customize/hybris/bin/custom/sapcxtools/**/classes +sonar.sources=core-customize/hybris/bin/custom/cxdevtools +sonar.java.binaries=core-customize/hybris/bin/custom/cxdevtools/**/classes # Encoding of the source code. Default is default system encoding sonar.sourceEncoding=UTF-8 From 8079ca9d285dea49b465b85a4bde458789872b64 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 06:56:08 +0100 Subject: [PATCH 22/28] move CX DEV Proxy Server to new extension directory --- .../cxdevproxy/.gitignore | 0 .../{sapcxtools => cxdevtools}/cxdevproxy/.project | 0 .../cxdevproxy/CONTRIBUTING.md | 0 .../cxdevproxy/LICENSE.md | 0 .../{sapcxtools => cxdevtools}/cxdevproxy/README.md | 0 .../cxdevproxy/extensioninfo.xml | 0 .../cxdevproxy/external-dependencies.xml | 0 .../cxdevproxy/project.properties | 0 .../cxdevproxy/resources/cxdevproxy-spring.xml | 0 .../cxdevproxy/config/cxdevproxy-handler-spring.xml | 0 .../cxdevproxy/config/cxdevproxy-jwt-spring.xml | 0 .../cxdevproxy/jwt/customer/besteller.json | 0 .../resources/cxdevproxy/jwt/customer/besucher.json | 0 .../resources/cxdevproxy/jwt/customer/customer.json | 0 .../resources/cxdevproxy/jwt/customer/training.json | 0 .../resources/cxdevproxy/jwt/employee/admin.json | 0 .../cxdevproxy/jwt/employee/cmsmanager.json | 0 .../cxdevproxy/jwt/employee/productmanager.json | 0 .../resources/cxdevproxy/static-content/favicon.ico | Bin .../resources/cxdevproxy/static-content/index.html | 0 .../localization/cxdevproxy-locales_de.properties | 0 .../localization/cxdevproxy-locales_en.properties | 0 .../localization/cxdevproxy-locales_es.properties | 0 .../localization/cxdevproxy-locales_fr.properties | 0 .../localization/cxdevproxy-locales_it.properties | 0 .../localization/cxdevproxy-locales_ja.properties | 0 .../localization/cxdevproxy-locales_no.properties | 0 .../localization/cxdevproxy-locales_pt.properties | 0 .../localization/cxdevproxy-locales_ru.properties | 0 .../localization/cxdevproxy-locales_sv.properties | 0 .../localization/cxdevproxy-locales_zh.properties | 0 .../commerce/proxy/condition/AndCondition.java | 0 .../commerce/proxy/condition/ExchangeCondition.java | 0 .../proxy/condition/HeaderExistsCondition.java | 0 .../proxy/condition/HttpMethodCondition.java | 0 .../commerce/proxy/condition/NotCondition.java | 0 .../cxdev/commerce/proxy/condition/OrCondition.java | 0 .../proxy/condition/PathStartsWithCondition.java | 0 .../condition/QueryParameterExistsCondition.java | 0 .../proxy/constants/CxDevProxyConstants.java | 0 .../proxy/handler/ConditionalDelegateHandler.java | 0 .../proxy/handler/ForwardedHeadersHandler.java | 0 .../commerce/proxy/handler/JwtInjectorHandler.java | 0 .../commerce/proxy/handler/StartupPageHandler.java | 0 .../proxy/handler/StaticContentHandler.java | 0 .../livecycle/ProxyHttpServerExchangeHandler.java | 0 .../proxy/livecycle/ProxyLocalRouteHandler.java | 0 .../proxy/livecycle/UndertowProxyManager.java | 0 .../commerce/proxy/service/JwtTokenService.java | 0 .../commerce/proxy/trust/AcceptAllTrustManager.java | 0 50 files changed, 0 insertions(+), 0 deletions(-) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/.gitignore (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/.project (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/CONTRIBUTING.md (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/LICENSE.md (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/README.md (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/extensioninfo.xml (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/external-dependencies.xml (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/project.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy-spring.xml (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/cxdevproxy/static-content/index.html (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java (100%) rename core-customize/hybris/bin/custom/{sapcxtools => cxdevtools}/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java (100%) diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/.gitignore b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/.gitignore similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/.gitignore rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/.gitignore diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/.project b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/.project similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/.project rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/.project diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/CONTRIBUTING.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/CONTRIBUTING.md similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/CONTRIBUTING.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/CONTRIBUTING.md diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/LICENSE.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/LICENSE.md similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/LICENSE.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/LICENSE.md diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/README.md b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/README.md similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/README.md rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/README.md diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/extensioninfo.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/external-dependencies.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/project.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/project.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/project.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/project.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy-spring.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy-spring.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-handler-spring.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/config/cxdevproxy-jwt-spring.xml diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besteller.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/besucher.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/customer.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/customer/training.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/employee/admin.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/employee/cmsmanager.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/jwt/employee/productmanager.json diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/static-content/favicon.ico diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/index.html b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/static-content/index.html similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/cxdevproxy/static-content/index.html rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/cxdevproxy/static-content/index.html diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_de.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_en.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_es.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_fr.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_it.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_ja.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_no.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_pt.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_ru.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_sv.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/resources/localization/cxdevproxy-locales_zh.properties diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/AndCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/ExchangeCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HeaderExistsCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/HttpMethodCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/NotCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/OrCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/PathStartsWithCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/condition/QueryParameterExistsCondition.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/constants/CxDevProxyConstants.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ConditionalDelegateHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/ForwardedHeadersHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/JwtInjectorHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StartupPageHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/handler/StaticContentHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyHttpServerExchangeHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/ProxyLocalRouteHandler.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/livecycle/UndertowProxyManager.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/service/JwtTokenService.java diff --git a/core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java similarity index 100% rename from core-customize/hybris/bin/custom/sapcxtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java rename to core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/src/me/cxdev/commerce/proxy/trust/AcceptAllTrustManager.java From 93414a91cd5ba7415c972483502dfd4973b93f0b Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 07:25:16 +0100 Subject: [PATCH 23/28] set release version of extensions to 5.0.0 --- .../bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml | 2 +- .../custom/cxdevtools/cxdevbackoffice/external-dependencies.xml | 2 +- .../bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml | 2 +- .../custom/cxdevtools/cxdevenvconfig/external-dependencies.xml | 2 +- .../hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml | 2 +- .../bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml | 2 +- .../bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml | 2 +- .../custom/cxdevtools/cxdevreporting/external-dependencies.xml | 2 +- .../hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml | 2 +- .../custom/cxdevtools/cxdevtoolkit/external-dependencies.xml | 2 +- sonar-project.properties | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml index b2c72f86..e12900c6 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/extensioninfo.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml index a7d14274..e203eb33 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevbackoffice/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 me.cxdev cxdevbackoffice - 5.0.0-snapshot + 5.0.0 jar diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml index 550d9989..5b4fe641 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/extensioninfo.xml @@ -1,7 +1,7 @@ + name="cxdevenvconfig" version="5.0.0" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml index 626b6b91..11d6e5ea 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevenvconfig/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 me.cxdev cxdevenvconfig - 5.0.0-snapshot + 5.0.0 jar diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml index e535e725..d392fa64 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/extensioninfo.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml index da979388..5513ac13 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevproxy/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 me.cxdev cxdevproxy - 5.0.0-snapshot + 5.0.0 jar diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml index 424199db..ea5f96aa 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/extensioninfo.xml @@ -1,6 +1,6 @@ - + diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml index 8ad21e60..0e6bb88d 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevreporting/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 me.cxdev cxdevreporting - 5.0.0-snapshot + 5.0.0 jar diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml index dd7332ea..5b202928 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/extensioninfo.xml @@ -1,7 +1,7 @@ + name="cxdevtoolkit" version="5.0.0" usemaven="true"> diff --git a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml index d2aed483..923b8543 100644 --- a/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml +++ b/core-customize/hybris/bin/custom/cxdevtools/cxdevtoolkit/external-dependencies.xml @@ -3,7 +3,7 @@ 4.0.0 me.cxdev cxdevtoolkit - 5.0.0-snapshot + 5.0.0 jar diff --git a/sonar-project.properties b/sonar-project.properties index 5d67bce8..bd02abff 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -3,7 +3,7 @@ sonar.organization=cxdevtools # This is the name and version displayed in the SonarCloud UI. sonar.projectName=cxdevtools-workspace -sonar.projectVersion=5.0.0-snapshot +sonar.projectVersion=5.0.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. sonar.sources=core-customize/hybris/bin/custom/cxdevtools From 942ee676c42299bb7a2236870bc5792f720118f2 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 07:31:11 +0100 Subject: [PATCH 24/28] fix relative path the java version --- .github/workflows/buildandtest.yml | 2 +- .github/workflows/code-analysis.yml | 2 +- .github/workflows/dependency-check.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index 80821dd8..3c9e95ec 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -27,7 +27,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: "sapmachine" - java-version-file: "core-customize/.java-version" + java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v3 diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index 5e791596..b8a00bf6 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -16,7 +16,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: "sapmachine" - java-version-file: "core-customize/.java-version" + java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v3 diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 3fad6f79..8826be75 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -26,7 +26,7 @@ jobs: uses: actions/setup-java@v4 with: distribution: "sapmachine" - java-version-file: "core-customize/.java-version" + java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v3 From 8e81748ca3854cb284271860731ec88563de57b8 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 07:38:10 +0100 Subject: [PATCH 25/28] fix versions of github action plugins --- .github/workflows/buildandtest.yml | 8 ++++---- .github/workflows/code-analysis.yml | 6 +++--- .github/workflows/dependency-check.yml | 8 ++++---- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index 3c9e95ec..bfe163c2 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -20,19 +20,19 @@ jobs: build-and-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set up JDK - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: "sapmachine" java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper - uses: gradle/actions/wrapper-validation@v3 + uses: gradle/actions/wrapper-validation@v5 - name: Set up cache for SAP artifacts - uses: actions/cache@v4 + uses: actions/cache@v5 with: key: sap-artifacts-cache-${{ hashFiles('core-customize/manifest.json') }} path: dependencies diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index b8a00bf6..cfcfc4c5 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -11,14 +11,14 @@ jobs: code-analysis: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up JDK - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: "sapmachine" java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper - uses: gradle/actions/wrapper-validation@v3 + uses: gradle/actions/wrapper-validation@v5 - name: Verify code conventions run: ./gradlew spotlessCheck diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 8826be75..94e6af5c 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -21,17 +21,17 @@ jobs: matrix: extension: ["cxdevtoolkit", "cxdevbackoffice", "cxdevreporting", "cxdevenvconfig"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up JDK - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: "sapmachine" java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper - uses: gradle/actions/wrapper-validation@v3 + uses: gradle/actions/wrapper-validation@v5 - name: Set up cache for SAP artifacts - uses: actions/cache@v4 + uses: actions/cache@v5 with: key: sap-artifacts-cache-${{ hashFiles('core-customize/manifest.json') }} path: dependencies From 6098f51ec0ee7c0f3fe9b96713a74efafa541c02 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 07:40:36 +0100 Subject: [PATCH 26/28] dont rely on JDK patch level as it may break the build --- .github/workflows/buildandtest.yml | 2 +- .github/workflows/code-analysis.yml | 2 +- .github/workflows/dependency-check.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index bfe163c2..377ec4d2 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -27,7 +27,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: ".java-version" + java-version-file: "21" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index cfcfc4c5..d70ee6d3 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -16,7 +16,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: ".java-version" + java-version-file: "21" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 94e6af5c..5787991d 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -26,7 +26,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: ".java-version" + java-version-file: "21" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 From df0e5274ddbb099996c689ec53c8305b98742ff4 Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 07:45:11 +0100 Subject: [PATCH 27/28] fix versions of SAP Machine on GitHub Runner --- .github/workflows/buildandtest.yml | 2 +- .github/workflows/code-analysis.yml | 2 +- .github/workflows/dependency-check.yml | 2 +- .java-version | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index 377ec4d2..bfe163c2 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -27,7 +27,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: "21" + java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index d70ee6d3..cfcfc4c5 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -16,7 +16,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: "21" + java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 5787991d..94e6af5c 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -26,7 +26,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: "21" + java-version-file: ".java-version" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.java-version b/.java-version index 480d6e0d..962d54c3 100644 --- a/.java-version +++ b/.java-version @@ -1 +1 @@ -21.0.10-sapmchn \ No newline at end of file +21.0.9-sapmchn \ No newline at end of file From e84d214530381ecfaefb1aff92981246e664cffa Mon Sep 17 00:00:00 2001 From: Stefan Bechtold Date: Tue, 24 Feb 2026 07:47:43 +0100 Subject: [PATCH 28/28] fix versions of SAP Machine on GitHub Runner --- .github/workflows/buildandtest.yml | 2 +- .github/workflows/code-analysis.yml | 2 +- .github/workflows/dependency-check.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index bfe163c2..78bc603f 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -27,7 +27,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: ".java-version" + java-version: "21" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.github/workflows/code-analysis.yml b/.github/workflows/code-analysis.yml index cfcfc4c5..d8522684 100644 --- a/.github/workflows/code-analysis.yml +++ b/.github/workflows/code-analysis.yml @@ -16,7 +16,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: ".java-version" + java-version: "21" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5 diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 94e6af5c..96739ea2 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -26,7 +26,7 @@ jobs: uses: actions/setup-java@v5 with: distribution: "sapmachine" - java-version-file: ".java-version" + java-version: "21" cache: "gradle" - name: Validate Gradle wrapper uses: gradle/actions/wrapper-validation@v5