diff --git a/.github/workflows/build_container_develop_branch.yml b/.github/workflows/build_container_develop_branch.yml
index d3f355042..3afc3d6ec 100644
--- a/.github/workflows/build_container_develop_branch.yml
+++ b/.github/workflows/build_container_develop_branch.yml
@@ -41,6 +41,7 @@ jobs:
cache: maven
- name: Build with Maven
run: |
+ set -o pipefail
cp obp-api/src/main/resources/props/sample.props.template obp-api/src/main/resources/props/production.default.props
echo connector=star > obp-api/src/main/resources/props/test.default.props
echo starConnector_supported_types=mapped,internal >> obp-api/src/main/resources/props/test.default.props
@@ -76,7 +77,44 @@ jobs:
echo ResetPasswordUrlEnabled=true >> obp-api/src/main/resources/props/test.default.props
echo consents.allowed=true >> obp-api/src/main/resources/props/test.default.props
- MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod
+ MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod 2>&1 | tee maven-build.log
+
+ - name: Report failing tests (if any)
+ if: always()
+ run: |
+ echo "Checking build log for failing tests via grep..."
+ if [ ! -f maven-build.log ]; then
+ echo "No maven-build.log found; skipping failure scan."
+ exit 0
+ fi
+ if grep -n "\*\*\* FAILED \*\*\*" maven-build.log; then
+ echo "Failing tests detected above."
+ exit 1
+ else
+ echo "No failing tests detected in maven-build.log."
+ fi
+
+ - name: Upload Maven build log
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: maven-build-log
+ if-no-files-found: ignore
+ path: |
+ maven-build.log
+
+ - name: Upload test reports
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-reports
+ if-no-files-found: ignore
+ path: |
+ obp-api/target/surefire-reports/**
+ obp-commons/target/surefire-reports/**
+ **/target/scalatest-reports/**
+ **/target/site/surefire-report.html
+ **/target/site/surefire-report/*
- name: Save .war artifact
run: |
@@ -95,7 +133,7 @@ jobs:
docker push docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }} --all-tags
echo docker done
- - uses: sigstore/cosign-installer@main
+ - uses: sigstore/cosign-installer@4d14d7f17e7112af04ea6108fbb4bfc714c00390
- name: Write signing key to disk (only needed for `cosign sign --key`)
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
@@ -116,4 +154,3 @@ jobs:
COSIGN_PASSWORD: "${{secrets.COSIGN_PASSWORD}}"
-
diff --git a/.github/workflows/build_container_non_develop_branch.yml b/.github/workflows/build_container_non_develop_branch.yml
index 946d81de4..fda13bb72 100644
--- a/.github/workflows/build_container_non_develop_branch.yml
+++ b/.github/workflows/build_container_non_develop_branch.yml
@@ -3,7 +3,7 @@ name: Build and publish container non develop
on:
push:
branches:
- - '*'
+ - '**'
- '!develop'
env:
@@ -40,6 +40,7 @@ jobs:
cache: maven
- name: Build with Maven
run: |
+ set -o pipefail
cp obp-api/src/main/resources/props/sample.props.template obp-api/src/main/resources/props/production.default.props
echo connector=star > obp-api/src/main/resources/props/test.default.props
echo starConnector_supported_types=mapped,internal >> obp-api/src/main/resources/props/test.default.props
@@ -75,7 +76,44 @@ jobs:
echo ResetPasswordUrlEnabled=true >> obp-api/src/main/resources/props/test.default.props
echo consents.allowed=true >> obp-api/src/main/resources/props/test.default.props
- MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod
+ MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod 2>&1 | tee maven-build.log
+
+ - name: Report failing tests (if any)
+ if: always()
+ run: |
+ echo "Checking build log for failing tests via grep..."
+ if [ ! -f maven-build.log ]; then
+ echo "No maven-build.log found; skipping failure scan."
+ exit 0
+ fi
+ if grep -n "\*\*\* FAILED \*\*\*" maven-build.log; then
+ echo "Failing tests detected above."
+ exit 1
+ else
+ echo "No failing tests detected in maven-build.log."
+ fi
+
+ - name: Upload Maven build log
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: maven-build-log
+ if-no-files-found: ignore
+ path: |
+ maven-build.log
+
+ - name: Upload test reports
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-reports
+ if-no-files-found: ignore
+ path: |
+ obp-api/target/surefire-reports/**
+ obp-commons/target/surefire-reports/**
+ **/target/scalatest-reports/**
+ **/target/site/surefire-report.html
+ **/target/site/surefire-report/*
- name: Save .war artifact
run: |
@@ -94,7 +132,7 @@ jobs:
docker push docker.io/${{ env.DOCKER_HUB_ORGANIZATION }}/${{ env.DOCKER_HUB_REPOSITORY }} --all-tags
echo docker done
- - uses: sigstore/cosign-installer@main
+ - uses: sigstore/cosign-installer@4d14d7f17e7112af04ea6108fbb4bfc714c00390
- name: Write signing key to disk (only needed for `cosign sign --key`)
run: echo "${{ secrets.COSIGN_PRIVATE_KEY }}" > cosign.key
@@ -111,4 +149,3 @@ jobs:
COSIGN_PASSWORD: "${{secrets.COSIGN_PASSWORD}}"
-
diff --git a/.github/workflows/build_pull_request.yml b/.github/workflows/build_pull_request.yml
index 859d309ec..61d1e05a5 100644
--- a/.github/workflows/build_pull_request.yml
+++ b/.github/workflows/build_pull_request.yml
@@ -36,6 +36,7 @@ jobs:
cache: maven
- name: Build with Maven
run: |
+ set -o pipefail
cp obp-api/src/main/resources/props/sample.props.template obp-api/src/main/resources/props/production.default.props
echo connector=star > obp-api/src/main/resources/props/test.default.props
echo starConnector_supported_types=mapped,internal >> obp-api/src/main/resources/props/test.default.props
@@ -65,14 +66,50 @@ jobs:
echo COUNTERPARTY_OTP_INSTRUCTION_TRANSPORT=dummy >> obp-api/src/main/resources/props/test.default.props
echo SEPA_CREDIT_TRANSFERS_OTP_INSTRUCTION_TRANSPORT=dummy >> obp-api/src/main/resources/props/test.default.props
-
echo allow_oauth2_login=true >> obp-api/src/main/resources/props/test.default.props
echo oauth2.jwk_set.url=https://www.googleapis.com/oauth2/v3/certs >> obp-api/src/main/resources/props/test.default.props
echo ResetPasswordUrlEnabled=true >> obp-api/src/main/resources/props/test.default.props
echo consents.allowed=true >> obp-api/src/main/resources/props/test.default.props
- MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod
+ MAVEN_OPTS="-Xmx3G -Xss2m" mvn clean package -Pprod 2>&1 | tee maven-build.log
+
+ - name: Report failing tests (if any)
+ if: always()
+ run: |
+ echo "Checking build log for failing tests via grep..."
+ if [ ! -f maven-build.log ]; then
+ echo "No maven-build.log found; skipping failure scan."
+ exit 0
+ fi
+ if grep -n "\*\*\* FAILED \*\*\*" maven-build.log; then
+ echo "Failing tests detected above."
+ exit 1
+ else
+ echo "No failing tests detected in maven-build.log."
+ fi
+
+ - name: Upload Maven build log
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: maven-build-log
+ if-no-files-found: ignore
+ path: |
+ maven-build.log
+
+ - name: Upload test reports
+ if: always()
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-reports
+ if-no-files-found: ignore
+ path: |
+ obp-api/target/surefire-reports/**
+ obp-commons/target/surefire-reports/**
+ **/target/scalatest-reports/**
+ **/target/site/surefire-report.html
+ **/target/site/surefire-report/*
- name: Save .war artifact
run: |
diff --git a/.gitignore b/.gitignore
index c057cc52c..7e1e1bd93 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,3 +44,4 @@ project/project
coursier
metals.sbt
obp-http4s-runner/src/main/resources/git.properties
+test-results
\ No newline at end of file
diff --git a/flushall_build_and_run.sh b/flushall_build_and_run.sh
index 833442508..6708a9ed1 100755
--- a/flushall_build_and_run.sh
+++ b/flushall_build_and_run.sh
@@ -1,10 +1,13 @@
#!/bin/bash
-# Script to flush Redis, build the project, and run Jetty
+# Script to flush Redis, build the project, and run both Jetty and http4s servers
#
# This script should be run from the OBP-API root directory:
# cd /path/to/OBP-API
# ./flushall_build_and_run.sh
+#
+# The http4s server will run in the background on port 8081
+# The Jetty server will run in the foreground on port 8080
set -e # Exit on error
@@ -27,4 +30,29 @@ echo "=========================================="
echo "Building and running with Maven..."
echo "=========================================="
export MAVEN_OPTS="-Xss128m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED"
-mvn install -pl .,obp-commons && mvn jetty:run -pl obp-api
+mvn install -pl .,obp-commons
+
+echo ""
+echo "=========================================="
+echo "Building http4s runner..."
+echo "=========================================="
+export MAVEN_OPTS="-Xms3G -Xmx6G -XX:MaxMetaspaceSize=2G"
+mvn -pl obp-http4s-runner -am clean package -DskipTests=true -Dmaven.test.skip=true
+
+echo ""
+echo "=========================================="
+echo "Starting http4s server in background..."
+echo "=========================================="
+java -jar obp-http4s-runner/target/obp-http4s-runner.jar > http4s-server.log 2>&1 &
+HTTP4S_PID=$!
+echo "http4s server started with PID: $HTTP4S_PID (port 8081)"
+echo "Logs are being written to: http4s-server.log"
+echo ""
+echo "To stop http4s server later: kill $HTTP4S_PID"
+echo ""
+
+echo "=========================================="
+echo "Starting Jetty server (foreground)..."
+echo "=========================================="
+export MAVEN_OPTS="-Xss128m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED"
+mvn jetty:run -pl obp-api
diff --git a/obp-api/pom.xml b/obp-api/pom.xml
index 535178da8..7379ff566 100644
--- a/obp-api/pom.xml
+++ b/obp-api/pom.xml
@@ -586,8 +586,15 @@
once
.
WDF TestSuite.txt
- -Drun.mode=test -XX:MaxMetaspaceSize=512m -Xms512m -Xmx512m --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.jar=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED
+
+ -Drun.mode=test -XX:MaxMetaspaceSize=1G -Xms2G -Xmx4G -XX:+UseG1GC -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+UseStringDeduplication --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.jar=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED
code.external
+ ${maven.test.failure.ignore}
+
+
+
+
+ false
@@ -597,6 +604,49 @@
+
+
+ org.apache.maven.plugins
+ maven-surefire-report-plugin
+ 3.5.2
+
+ ${project.build.directory}/surefire-reports
+ ${project.build.directory}/surefire-reports
+
+
+
+ surefire-html-report
+ package
+
+ report-only
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ 3.1.0
+
+
+ delete-surefire-xml-after-html
+ verify
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -623,15 +673,26 @@
4.8.1
true
+ incremental
+ true
-Xms4G
-Xmx12G
+ -Xss4m
-XX:MaxMetaspaceSize=4G
-XX:+UseG1GC
+ -XX:+TieredCompilation
+ -XX:TieredStopAtLevel=1
-deprecation
-feature
+
+ -language:implicitConversions
+ -language:reflectiveCalls
+ -language:postfixOps
+
+ -Wconf:cat=deprecation&msg=auto-application:s
diff --git a/obp-api/src/main/resources/props/sample.props.template b/obp-api/src/main/resources/props/sample.props.template
index d181a5a1f..c0f151d83 100644
--- a/obp-api/src/main/resources/props/sample.props.template
+++ b/obp-api/src/main/resources/props/sample.props.template
@@ -624,6 +624,14 @@ webui_agree_terms_url =
#webui_post_consumer_registration_more_info_text = Please tell us more your Application and / or Startup using this link.
#webui_post_consumer_registration_submit_button_value=Register consumer
+# OBP Portal URL - base URL for the OBP Portal service
+webui_obp_portal_url = http://localhost:5174
+
+# External Consumer Registration URL - used to redirect "Get API Key" links to an external service
+# If not set, defaults to webui_obp_portal_url + "/consumer-registration"
+# Set this to redirect to a custom URL for consumer registration
+webui_external_consumer_registration_url = http://localhost:5174/consumer-registration
+
## Display For Banks section
webui_display_for_banks_section = true
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/AccountsApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/AccountsApi.scala
index 93488b0a9..bca13258f 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/AccountsApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/AccountsApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/BankingApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/BankingApi.scala
index 21a2776d5..60a9aadf7 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/BankingApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/BankingApi.scala
@@ -1,5 +1,6 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil.{defaultBankId, _}
import code.api.util.ApiTag._
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CommonApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CommonApi.scala
index d89052e67..4b39158e5 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CommonApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CommonApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CustomerApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CustomerApi.scala
index 1f829ef99..3e648cab8 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CustomerApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/CustomerApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DirectDebitsApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DirectDebitsApi.scala
index 4f3a82cac..869e19fe9 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DirectDebitsApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DirectDebitsApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DiscoveryApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DiscoveryApi.scala
index ea53f9af5..b434d089c 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DiscoveryApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/DiscoveryApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/PayeesApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/PayeesApi.scala
index 1e71822ef..386337d51 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/PayeesApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/PayeesApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ProductsApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ProductsApi.scala
index 12cbfe032..646eed5d3 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ProductsApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ProductsApi.scala
@@ -1,5 +1,6 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ScheduledPaymentsApi.scala b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ScheduledPaymentsApi.scala
index 363dbb5b5..289c43eff 100644
--- a/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ScheduledPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/AUOpenBanking/v1_0_0/ScheduledPaymentsApi.scala
@@ -1,5 +1,7 @@
package code.api.AUOpenBanking.v1_0_0
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountAccessConsentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountAccessConsentsApi.scala
index 6a5275caa..0bfaa7526 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountAccessConsentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountAccessConsentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountsApi.scala
index fbbe36828..aca6e29c0 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/AccountsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BalancesApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BalancesApi.scala
index f348050e2..6dfe3ce89 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BalancesApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BalancesApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BeneficiariesApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BeneficiariesApi.scala
index 4a58944c5..c10d058b4 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BeneficiariesApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/BeneficiariesApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DirectDebitsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DirectDebitsApi.scala
index c956e1af7..99e23cf40 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DirectDebitsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DirectDebitsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentConsentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentConsentsApi.scala
index 5f59bfe66..b52926915 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentConsentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentConsentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentsApi.scala
index 157df8b11..97340d0a3 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticFutureDatedPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsApi.scala
index 9e0c1a894..3491ae02d 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsConsentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsConsentsApi.scala
index 4db4c0b41..8b03e9e4a 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsConsentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/DomesticPaymentsConsentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/EventNotificationApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/EventNotificationApi.scala
index 2d40272d5..244088bda 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/EventNotificationApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/EventNotificationApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentConsentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentConsentsApi.scala
index 965d1f09b..822677061 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentConsentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentConsentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentsApi.scala
index 0dbd97d5b..166234039 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FilePaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FutureDatedPaymentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FutureDatedPaymentsApi.scala
index 1a3353ac2..bd2958efb 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FutureDatedPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/FutureDatedPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentConsentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentConsentsApi.scala
index 684a13c20..f5c237689 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentConsentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentConsentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentsApi.scala
index ef052b261..a566e2bb1 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/InternationalPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/OffersApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/OffersApi.scala
index 107fec5c1..1fb6ba9ee 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/OffersApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/OffersApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/PartiesApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/PartiesApi.scala
index 847fec053..1e5ab3666 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/PartiesApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/PartiesApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StandingOrdersApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StandingOrdersApi.scala
index 2d9b227e2..d3722d395 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StandingOrdersApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StandingOrdersApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StatementsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StatementsApi.scala
index d17d2afa0..aaa6102cd 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StatementsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/StatementsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/SupplementaryAccountInfoApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/SupplementaryAccountInfoApi.scala
index 0a26024ca..d4dec4f4d 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/SupplementaryAccountInfoApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/SupplementaryAccountInfoApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/TransactionsApi.scala b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/TransactionsApi.scala
index 8528cd690..12c2cf3d3 100644
--- a/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/TransactionsApi.scala
+++ b/obp-api/src/main/scala/code/api/BahrainOBF/v1_0_0/TransactionsApi.scala
@@ -1,5 +1,6 @@
package code.api.BahrainOBF.v1_0_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/MxOF/APIMethods_AtmsApi.scala b/obp-api/src/main/scala/code/api/MxOF/APIMethods_AtmsApi.scala
index 6ede06c1e..65089ecf7 100644
--- a/obp-api/src/main/scala/code/api/MxOF/APIMethods_AtmsApi.scala
+++ b/obp-api/src/main/scala/code/api/MxOF/APIMethods_AtmsApi.scala
@@ -1,5 +1,7 @@
package code.api.MxOF
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.Constant
import code.api.MxOF.JSONFactory_MXOF_0_0_1.createGetAtmsResponse
import code.api.util.APIUtil._
diff --git a/obp-api/src/main/scala/code/api/OBPRestHelper.scala b/obp-api/src/main/scala/code/api/OBPRestHelper.scala
index ea6adbdbb..78dc3bde3 100644
--- a/obp-api/src/main/scala/code/api/OBPRestHelper.scala
+++ b/obp-api/src/main/scala/code/api/OBPRestHelper.scala
@@ -27,6 +27,8 @@ TESOBE (http://www.tesobe.com/)
package code.api
+import scala.language.reflectiveCalls
+import scala.language.implicitConversions
import code.api.Constant._
import code.api.OAuthHandshake._
import code.api.util.APIUtil._
diff --git a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/AISApi.scala b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/AISApi.scala
index 1c4b6fa18..82b4965c0 100644
--- a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/AISApi.scala
+++ b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/AISApi.scala
@@ -1,5 +1,6 @@
package code.api.Polish.v2_1_1_1
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/ASApi.scala b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/ASApi.scala
index 40a4131f2..51c0488e0 100644
--- a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/ASApi.scala
+++ b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/ASApi.scala
@@ -1,5 +1,6 @@
package code.api.Polish.v2_1_1_1
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/CAFApi.scala b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/CAFApi.scala
index ac460d996..a23d8151a 100644
--- a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/CAFApi.scala
+++ b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/CAFApi.scala
@@ -1,5 +1,6 @@
package code.api.Polish.v2_1_1_1
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/PISApi.scala b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/PISApi.scala
index bc343808a..079d30030 100644
--- a/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/PISApi.scala
+++ b/obp-api/src/main/scala/code/api/Polish/v2_1_1_1/PISApi.scala
@@ -1,5 +1,6 @@
package code.api.Polish.v2_1_1_1
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocs140.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocs140.scala
index 70f4b4cd5..1a5d8bebc 100644
--- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocs140.scala
+++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocs140.scala
@@ -1,5 +1,6 @@
package code.api.ResourceDocs1_4_0
+import scala.language.reflectiveCalls
import code.api.Constant.HostName
import code.api.OBPRestHelper
import code.api.cache.Caching
@@ -16,7 +17,7 @@ import net.liftweb.http.{GetRequest, InMemoryResponse, PlainTextResponse, Req, S
object ResourceDocs140 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version = ApiVersion.v1_4_0 // "1.4.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObp,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
ImplementationsResourceDocs.getResourceDocsSwagger,
@@ -31,7 +32,7 @@ object ResourceDocs140 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs200 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version = ApiVersion.v2_0_0 // "2.0.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObp,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -46,7 +47,7 @@ object ResourceDocs200 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs210 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v2_1_0 // "2.1.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObp,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -60,7 +61,7 @@ object ResourceDocs210 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs220 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v2_2_0 // "2.2.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObp,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -74,7 +75,7 @@ object ResourceDocs220 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version : ApiVersion = ApiVersion.v3_0_0 // = "3.0.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObp,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -87,7 +88,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs310 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v3_1_0 // = "3.0.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObp,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -102,7 +103,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs400 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v4_0_0 // = "4.0.0" // We match other api versions so API explorer can easily use the path.
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObpV400,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -117,7 +118,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs500 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v5_0_0
val versionStatus = ApiVersionStatus.STABLE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObpV400,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -132,7 +133,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs510 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v5_1_0
val versionStatus = ApiVersionStatus.BLEEDING_EDGE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObpV400,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getBankLevelDynamicResourceDocsObp,
@@ -148,7 +149,7 @@ object ResourceDocs300 extends OBPRestHelper with ResourceDocsAPIMethods with Md
object ResourceDocs600 extends OBPRestHelper with ResourceDocsAPIMethods with MdcLoggable {
val version: ApiVersion = ApiVersion.v6_0_0
val versionStatus = ApiVersionStatus.BLEEDING_EDGE.toString
- val routes = List(
+ val routes: Seq[OBPEndpoint] = List(
ImplementationsResourceDocs.getResourceDocsObpV400,
ImplementationsResourceDocs.getResourceDocsSwagger,
ImplementationsResourceDocs.getResourceDocsOpenAPI31,
diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala
index bf95b10b0..b355e782e 100644
--- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala
+++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala
@@ -32,12 +32,14 @@ import com.openbankproject.commons.model.{BankId, ListResult, User}
import com.openbankproject.commons.util.ApiStandards._
import com.openbankproject.commons.util.{ApiVersion, ScannedApiVersion}
import net.liftweb.common.{Box, Empty, Full}
-import net.liftweb.http.{InMemoryResponse, LiftRules, PlainTextResponse, S}
+import net.liftweb.http.{LiftRules, S}
+import net.liftweb.http.{InMemoryResponse, LiftRules, PlainTextResponse}
import net.liftweb.json
import net.liftweb.json.JsonAST.{JField, JString, JValue}
import net.liftweb.json._
import java.util.concurrent.ConcurrentHashMap
+import scala.collection.immutable
import scala.collection.immutable.{List, Nil}
import scala.concurrent.Future
@@ -180,8 +182,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
requestedApiVersion match
{
// only `obp` standard show the `localResourceDocs`
- case version: ScannedApiVersion
- if(version.apiStandard == obp.toString) =>
+ case version: ScannedApiVersion
+ if(version.apiStandard == obp.toString) =>
activePlusLocalResourceDocs ++= localResourceDocs
case _ => ; // all other standards only show their own apis.
}
@@ -222,7 +224,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
/**
- *
+ *
* @param requestedApiVersion
* @param resourceDocTags
* @param partialFunctionNames
@@ -289,9 +291,9 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
val allDocs = staticDocs.map(_ ++ filteredDocs)
resourceDocsToResourceDocJson(allDocs, resourceDocTags, partialFunctionNames, isVersion4OrHigher, locale)
-
+
}
-
+
def getResourceDocsObpDynamicCached(
resourceDocTags: Option[List[ResourceDocTag]],
partialFunctionNames: Option[List[String]],
@@ -326,7 +328,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
}
resourceDocsToResourceDocJson(Some(filteredDocs), resourceDocTags, partialFunctionNames, isVersion4OrHigher, locale)
-
+
}
@@ -351,7 +353,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
def getResourceDocsDescription(isBankLevelResourceDoc: Boolean) = {
val endpointBankIdPath = if (isBankLevelResourceDoc) "/banks/BANK_ID" else ""
-
+
s"""Get documentation about the RESTful resources on this server including example bodies for POST and PUT requests.
|
|This is the native data format used to document OBP endpoints. Each endpoint has a Resource Doc (a Scala case class) defined in the source code.
@@ -372,8 +374,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
| if set content=dynamic, only show dynamic endpoints, if content=static, only show the static endpoints. if omit this parameter, we will show all the endpoints.
|
| You may need some other language resource docs, now we support en_GB and es_ES at the moment.
- |
- | You can filter with api-collection-id, but api-collection-id can not be used with others together. If api-collection-id is used in URL, it will ignore all other parameters.
+ |
+ | You can filter with api-collection-id, but api-collection-id can not be used with others together. If api-collection-id is used in URL, it will ignore all other parameters.
|
|See the Resource Doc endpoint for more information.
|
@@ -400,8 +402,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|
"""
}
-
-
+
+
localResourceDocs += ResourceDoc(
getResourceDocsObp,
implementedInApiVersion,
@@ -411,7 +413,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
"Get Resource Docs.",
getResourceDocsDescription(false),
EmptyBody,
- EmptyBody,
+ EmptyBody,
UnknownError :: Nil,
List(apiTagDocumentation, apiTagApi),
Some(List(canReadResourceDoc))
@@ -428,7 +430,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
getApiLevelResourceDocs(cc,requestedApiVersionString, tags, partialFunctions, locale, contentParam, apiCollectionIdParam,false)
}
}
-
+
localResourceDocs += ResourceDoc(
getResourceDocsObpV400,
implementedInApiVersion,
@@ -443,7 +445,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
List(apiTagDocumentation, apiTagApi),
Some(List(canReadResourceDoc))
)
-
+
lazy val getResourceDocsObpV400 : OBPEndpoint = {
case "resource-docs" :: requestedApiVersionString :: "obp" :: Nil JsonGet _ => {
val (tags, partialFunctions, locale, contentParam, apiCollectionIdParam) = ResourceDocsAPIMethodsUtil.getParams()
@@ -470,7 +472,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
case true => authenticatedAccess(cc) // If set resource_docs_requires_role=true, we need check the authentication
}
_ <- resourceDocsRequireRole match {
- case false => Future()
+ case false => Future(())
case true => // If set resource_docs_requires_role=true, we need check the roles as well
NewStyle.function.hasAtLeastOneEntitlement(failMsg = UserHasMissingRoles + canReadResourceDoc.toString)("", u.map(_.userId).getOrElse(""), ApiRole.canReadResourceDoc :: Nil, cc.callContext)
}
@@ -494,7 +496,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
Some(isVersion4OrHigher)
)
json <- locale match {
- case _ if (apiCollectionIdParam.isDefined) =>
+ case _ if (apiCollectionIdParam.isDefined) =>
NewStyle.function.tryons(s"$UnknownError Can not prepare OBP resource docs.", 500, callContext) {
val operationIds = MappedApiCollectionEndpointsProvider.getApiCollectionEndpoints(apiCollectionIdParam.getOrElse("")).map(_.operationId).map(getObpFormatOperationId)
val resourceDocs = ResourceDoc.getResourceDocs(operationIds)
@@ -594,7 +596,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
}
(_, callContext) <- NewStyle.function.getBank(BankId(bankId), Option(cc))
_ <- resourceDocsRequireRole match {
- case false => Future()
+ case false => Future(())
case true => // If set resource_docs_requires_role=true, we need check the the roles as well
NewStyle.function.hasAtLeastOneEntitlement(failMsg = UserHasMissingRoles + ApiRole.canReadDynamicResourceDocsAtOneBank.toString)(
bankId, u.map(_.userId).getOrElse(""), ApiRole.canReadDynamicResourceDocsAtOneBank::Nil, cc.callContext
@@ -651,7 +653,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
|See the Resource Doc endpoint for more information.
|
| Note: Resource Docs are cached, TTL is ${GET_DYNAMIC_RESOURCE_DOCS_TTL} seconds
- |
+ |
|Following are more examples:
|${getObpApiRoot}/v3.1.0/resource-docs/v3.1.0/swagger
|${getObpApiRoot}/v3.1.0/resource-docs/v3.1.0/swagger?tags=Account,Bank
@@ -698,7 +700,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
Some(isVersion4OrHigher)
)
cacheValueFromRedis = Caching.getStaticSwaggerDocCache(cacheKey)
-
+
swaggerJValue <- if (cacheValueFromRedis.isDefined) {
NewStyle.function.tryons(s"$UnknownError Can not convert internal swagger file from cache.", 400, cc.callContext) {json.parse(cacheValueFromRedis.get)}
} else {
@@ -751,7 +753,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
| • All endpoints are given one or more tags which are used for grouping
| • Empty values will return error OBP-10053
|
- |**functions** - Filter by function names (comma-separated list)
+ |**functions** - Filter by function names (comma-separated list)
| • Example: ?functions=getBanks,bankById
| • Each endpoint is implemented in the OBP Scala code by a 'function'
| • Empty values will return error OBP-10054
@@ -819,26 +821,26 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
List(apiTagDocumentation, apiTagApi)
)
- // Note: OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
- // is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
+ // Note: OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
+ // is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
// handle YAML content type. It provides the same functionality as the JSON endpoint
// but returns OpenAPI documentation in YAML format instead of JSON.
/**
* OpenAPI 3.1 endpoint with comprehensive parameter validation.
- *
+ *
* This endpoint generates OpenAPI 3.1 documentation with the following validated query parameters:
* - tags: Comma-separated list of tags to filter endpoints (e.g., ?tags=Account,Bank)
* - functions: Comma-separated list of function names to filter endpoints
- * - content: Filter type - "static", "dynamic", or "all"
+ * - content: Filter type - "static", "dynamic", or "all"
* - locale: Language code for localization (e.g., "en_GB", "es_ES")
* - api-collection-id: UUID to filter by specific API collection
- *
+ *
* Parameter validation guards ensure:
* - Empty parameters (e.g., ?tags=) return 400 error
* - Invalid content values return 400 error with valid options
* - All parameters are properly trimmed and sanitized
- *
+ *
* Examples:
* - ?content=static&tags=Account-Firehose
* - ?tags=Account,Bank&functions=getBanks,bankById
@@ -848,7 +850,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
case "resource-docs" :: requestedApiVersionString :: "openapi" :: Nil JsonGet _ => {
cc => {
implicit val ec = EndpointContext(Some(cc))
-
+
// Early validation for empty parameters using underlying S to bypass ObpS filtering
if (S.param("tags").exists(_.trim.isEmpty)) {
Full(errorJsonResponse(InvalidTagsParameter, 400))
@@ -892,7 +894,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
Some(isVersion4OrHigher)
)
cacheValueFromRedis = Caching.getStaticSwaggerDocCache(cacheKey)
-
+
openApiJValue <- if (cacheValueFromRedis.isDefined) {
NewStyle.function.tryons(s"$UnknownError Can not convert internal openapi file from cache.", 400, cc.callContext) {json.parse(cacheValueFromRedis.get)}
} else {
@@ -926,8 +928,8 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
}
}
- // Note: The OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
- // is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
+ // Note: The OpenAPI 3.1 YAML endpoint (/resource-docs/API_VERSION/openapi.yaml)
+ // is implemented using Lift's serve mechanism in ResourceDocs140.scala to properly
// handle YAML content type and response format, rather than as a standard OBPEndpoint.
@@ -1026,7 +1028,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
example_request_body = endpointMappingRequestBodyExample,
success_response_body = endpointMappingRequestBodyExample
)
-
+
case doc if ( doc.operation_id == buildOperationId(APIMethods400.Implementations4_0_0.implementedInApiVersion, nameOf(APIMethods400.Implementations4_0_0.getDynamicEndpoint)) ||
doc.operation_id == buildOperationId(APIMethods400.Implementations4_0_0.implementedInApiVersion, nameOf(APIMethods400.Implementations4_0_0.getBankLevelDynamicEndpoint))) =>
doc.copy(success_response_body = ExampleValue.dynamicEndpointResponseBodyEmptyExample)
@@ -1162,7 +1164,7 @@ object ResourceDocsAPIMethodsUtil extends MdcLoggable{
}
logger.debug(s"partialFunctionNames is $partialFunctionNames")
- val locale = ObpS.param(PARAM_LOCALE).or(ObpS.param("language")) // we used language before, so keep it there.
+ val locale = ObpS.param(PARAM_LOCALE).or(ObpS.param("language")) // we used language before, so keep it there.
logger.debug(s"locale is $locale")
// So we can produce a reduced list of resource docs to prevent manual editing of swagger files.
@@ -1177,8 +1179,8 @@ object ResourceDocsAPIMethodsUtil extends MdcLoggable{
if x.trim.nonEmpty
} yield x.trim
logger.debug(s"apiCollectionIdParam is $apiCollectionIdParam")
-
-
+
+
(tags, partialFunctionNames, locale, contentParam, apiCollectionIdParam)
}
@@ -1190,8 +1192,8 @@ We don't assume a default catalog (as API Explorer does)
so the caller must specify any required filtering by catalog explicitly.
*/
def filterResourceDocs(
- allResources: List[ResourceDoc],
- resourceDocTags: Option[List[ResourceDocTag]],
+ allResources: List[ResourceDoc],
+ resourceDocTags: Option[List[ResourceDocTag]],
partialFunctionNames: Option[List[String]]
) : List[ResourceDoc] = {
@@ -1233,7 +1235,7 @@ so the caller must specify any required filtering by catalog explicitly.
// tags param was not mentioned in url or was empty, so return all
case None => filteredResources3
}
-
+
val resourcesToUse = filteredResources4.toSet.toList
@@ -1255,3 +1257,4 @@ so the caller must specify any required filtering by catalog explicitly.
}
+
diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala
index bb62b8431..6e22b45cc 100644
--- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala
+++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala
@@ -1,5 +1,6 @@
package code.api.ResourceDocs1_4_0
+import scala.language.implicitConversions
import code.api.Constant
import code.api.Constant._
import code.api.UKOpenBanking.v2_0_0.JSONFactory_UKOpenBanking_200
diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala
index 28f11e297..2ac9c5782 100644
--- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala
+++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala
@@ -889,7 +889,7 @@ object SwaggerJSONFactory extends MdcLoggable {
* @return a list of include original list and nested objects
*/
private def getAllEntities(entities: List[AnyRef]) = {
- val notNullEntities = entities.filter(null !=)
+ val notNullEntities = entities.filter(null.!=)
val notSupportYetEntity = entities.filter(_.getClass.getSimpleName.equals(NotSupportedYet.getClass.getSimpleName.replace("$","")))
val existsEntityTypes: Set[universe.Type] = notNullEntities.map(ReflectUtils.getType).toSet
@@ -919,10 +919,10 @@ object SwaggerJSONFactory extends MdcLoggable {
val entityType = ReflectUtils.getType(obj)
val constructorParamList = ReflectUtils.getPrimaryConstructor(entityType).paramLists.headOption.getOrElse(Nil)
// if exclude current obj, the result list tail will be Nil
- val resultTail = if(excludeTypes.exists(entityType =:=)) Nil else List(obj)
+ val resultTail = if(excludeTypes.exists(entityType.=:=)) Nil else List(obj)
val refValues: List[Any] = constructorParamList
- .filter(it => isSwaggerRefType(it.info) && !excludeTypes.exists(_ =:= it.info))
+ .filter(it => isSwaggerRefType(it.info) && !excludeTypes.exists(_.=:=(it.info)))
.map(it => {
val paramName = it.name.toString
val value = ReflectUtils.invokeMethod(obj, paramName)
@@ -1009,7 +1009,7 @@ object SwaggerJSONFactory extends MdcLoggable {
val errorMessages: Set[AnyRef] = resourceDocList.flatMap(_.error_response_bodies).toSet
val errorDefinitions = ErrorMessages.allFields
- .filterNot(null ==)
+ .filterNot(null.==)
.filter(it => errorMessages.contains(it._2))
.toList
.map(it => {
diff --git a/obp-api/src/main/scala/code/api/STET/v1_4/AISPApi.scala b/obp-api/src/main/scala/code/api/STET/v1_4/AISPApi.scala
index a2175d0b9..7eeb835ab 100644
--- a/obp-api/src/main/scala/code/api/STET/v1_4/AISPApi.scala
+++ b/obp-api/src/main/scala/code/api/STET/v1_4/AISPApi.scala
@@ -1,5 +1,6 @@
package code.api.STET.v1_4
+import scala.language.implicitConversions
import code.api.APIFailureNewStyle
import code.api.STET.v1_4.JSONFactory_STET_1_4._
import code.api.berlin.group.v1_3.JvalueCaseClass
diff --git a/obp-api/src/main/scala/code/api/STET/v1_4/CBPIIApi.scala b/obp-api/src/main/scala/code/api/STET/v1_4/CBPIIApi.scala
index bd249bbc1..7c64f54ee 100644
--- a/obp-api/src/main/scala/code/api/STET/v1_4/CBPIIApi.scala
+++ b/obp-api/src/main/scala/code/api/STET/v1_4/CBPIIApi.scala
@@ -1,5 +1,6 @@
package code.api.STET.v1_4
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/STET/v1_4/PISPApi.scala b/obp-api/src/main/scala/code/api/STET/v1_4/PISPApi.scala
index 1a3b504bc..8dde01b43 100644
--- a/obp-api/src/main/scala/code/api/STET/v1_4/PISPApi.scala
+++ b/obp-api/src/main/scala/code/api/STET/v1_4/PISPApi.scala
@@ -1,5 +1,6 @@
package code.api.STET.v1_4
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountAccessApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountAccessApi.scala
index 1b99efeb1..2221a08cb 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountAccessApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountAccessApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.Constant
import code.api.UKOpenBanking.v3_1_0.JSONFactory_UKOpenBanking_310.ConsentPostBodyUKV310
import code.api.berlin.group.v1_3.JvalueCaseClass
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountsApi.scala
index d85e236ee..af76a559f 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/AccountsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.Constant
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BalancesApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BalancesApi.scala
index afa47da0d..7f5196a24 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BalancesApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BalancesApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.Constant
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BeneficiariesApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BeneficiariesApi.scala
index 8b2a9202f..a8bdf4a6f 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BeneficiariesApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/BeneficiariesApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DirectDebitsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DirectDebitsApi.scala
index 0fa62f861..691d74797 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DirectDebitsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DirectDebitsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticPaymentsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticPaymentsApi.scala
index a3eb5c672..26c9f7441 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticScheduledPaymentsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticScheduledPaymentsApi.scala
index 235d2e139..8a9c8fdf4 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticScheduledPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticScheduledPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticStandingOrdersApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticStandingOrdersApi.scala
index ee21f7fc4..9af02bff7 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticStandingOrdersApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/DomesticStandingOrdersApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FilePaymentsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FilePaymentsApi.scala
index 216d31cc7..ff17971f8 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FilePaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FilePaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FundsConfirmationsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FundsConfirmationsApi.scala
index 3dce3f6b8..61d110fb4 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FundsConfirmationsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/FundsConfirmationsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalPaymentsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalPaymentsApi.scala
index d5206696d..4902fc0c8 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalScheduledPaymentsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalScheduledPaymentsApi.scala
index e7f2ea6b0..7dd09f027 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalScheduledPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalScheduledPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalStandingOrdersApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalStandingOrdersApi.scala
index bb6b4f77f..f35323886 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalStandingOrdersApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/InternationalStandingOrdersApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/OffersApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/OffersApi.scala
index eb7cfc90b..953810052 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/OffersApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/OffersApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/PartysApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/PartysApi.scala
index cc066d556..4a8c43e58 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/PartysApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/PartysApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ProductsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ProductsApi.scala
index a623afaa1..4542578c9 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ProductsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ProductsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ScheduledPaymentsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ScheduledPaymentsApi.scala
index 163759ba7..826fd9d8d 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ScheduledPaymentsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/ScheduledPaymentsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StandingOrdersApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StandingOrdersApi.scala
index 48772074d..f44769525 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StandingOrdersApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StandingOrdersApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StatementsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StatementsApi.scala
index 69a893f0d..66be44423 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StatementsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/StatementsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil._
import code.api.util.ApiTag
diff --git a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/TransactionsApi.scala b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/TransactionsApi.scala
index 5a5718106..3b1f0e8b1 100644
--- a/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/TransactionsApi.scala
+++ b/obp-api/src/main/scala/code/api/UKOpenBanking/v3_1_0/TransactionsApi.scala
@@ -1,5 +1,6 @@
package code.api.UKOpenBanking.v3_1_0
+import scala.language.implicitConversions
import code.api.berlin.group.v1_3.JvalueCaseClass
import code.api.util.APIUtil.{defaultBankId, _}
import code.api.util.ApiTag._
diff --git a/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala b/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala
index d3684b268..df55fbfd0 100644
--- a/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala
+++ b/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala
@@ -1,5 +1,6 @@
package code.api.builder.AccountInformationServiceAISApi
+import scala.language.implicitConversions
import code.api.APIFailureNewStyle
import code.api.Constant.{SYSTEM_READ_ACCOUNTS_BERLIN_GROUP_VIEW_ID, SYSTEM_READ_BALANCES_BERLIN_GROUP_VIEW_ID, SYSTEM_READ_TRANSACTIONS_BERLIN_GROUP_VIEW_ID}
import code.api.berlin.group.ConstantsBG
diff --git a/obp-api/src/main/scala/code/api/berlin/group/v1_3/CommonServicesApi.scala b/obp-api/src/main/scala/code/api/berlin/group/v1_3/CommonServicesApi.scala
index 34b0f54f6..6a40112e9 100644
--- a/obp-api/src/main/scala/code/api/berlin/group/v1_3/CommonServicesApi.scala
+++ b/obp-api/src/main/scala/code/api/berlin/group/v1_3/CommonServicesApi.scala
@@ -1,5 +1,6 @@
package code.api.builder.CommonServicesApi
+import scala.language.implicitConversions
import code.api.berlin.group.ConstantsBG
import code.api.berlin.group.v1_3.{JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
import code.api.builder.AccountInformationServiceAISApi.APIMethods_AccountInformationServiceAISApi
diff --git a/obp-api/src/main/scala/code/api/berlin/group/v1_3/ConfirmationOfFundsServicePIISApi.scala b/obp-api/src/main/scala/code/api/berlin/group/v1_3/ConfirmationOfFundsServicePIISApi.scala
index 7e5108aa7..adde2f1fb 100644
--- a/obp-api/src/main/scala/code/api/berlin/group/v1_3/ConfirmationOfFundsServicePIISApi.scala
+++ b/obp-api/src/main/scala/code/api/berlin/group/v1_3/ConfirmationOfFundsServicePIISApi.scala
@@ -1,5 +1,6 @@
package code.api.builder.ConfirmationOfFundsServicePIISApi
+import scala.language.implicitConversions
import code.api.berlin.group.ConstantsBG
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3._
import code.api.berlin.group.v1_3.{JvalueCaseClass, OBP_BERLIN_GROUP_1_3}
diff --git a/obp-api/src/main/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApi.scala b/obp-api/src/main/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApi.scala
index 0d39f7502..ac2618326 100644
--- a/obp-api/src/main/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApi.scala
+++ b/obp-api/src/main/scala/code/api/berlin/group/v1_3/PaymentInitiationServicePISApi.scala
@@ -1,5 +1,6 @@
package code.api.builder.PaymentInitiationServicePISApi
+import scala.language.implicitConversions
import code.api.berlin.group.ConstantsBG
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3.{CancelPaymentResponseJson, CancelPaymentResponseLinks, LinkHrefJson, UpdatePaymentPsuDataJson, checkAuthorisationConfirmation, checkSelectPsuAuthenticationMethod, checkTransactionAuthorisation, checkUpdatePsuAuthentication, createCancellationTransactionRequestJson}
import code.api.berlin.group.v1_3.model.TransactionStatus.mapTransactionStatus
diff --git a/obp-api/src/main/scala/code/api/berlin/group/v1_3/SigningBasketsApi.scala b/obp-api/src/main/scala/code/api/berlin/group/v1_3/SigningBasketsApi.scala
index 8b1c05891..664bcee8e 100644
--- a/obp-api/src/main/scala/code/api/berlin/group/v1_3/SigningBasketsApi.scala
+++ b/obp-api/src/main/scala/code/api/berlin/group/v1_3/SigningBasketsApi.scala
@@ -1,5 +1,6 @@
package code.api.builder.SigningBasketsApi
+import scala.language.implicitConversions
import code.api.berlin.group.ConstantsBG
import code.api.berlin.group.v1_3.JSONFactory_BERLIN_GROUP_1_3.{PostSigningBasketJsonV13, UpdatePaymentPsuDataJson, createSigningBasketResponseJson, createStartSigningBasketAuthorisationJson, getSigningBasketResponseJson, getSigningBasketStatusResponseJson}
import code.api.berlin.group.v1_3.{JSONFactory_BERLIN_GROUP_1_3, JvalueCaseClass}
diff --git a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicCompileEndpoint.scala b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicCompileEndpoint.scala
index d052e2169..4022feacd 100644
--- a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicCompileEndpoint.scala
+++ b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicCompileEndpoint.scala
@@ -1,5 +1,6 @@
package code.api.dynamic.endpoint.helper
+import scala.language.implicitConversions
import code.api.util.APIUtil.{OBPEndpoint, OBPReturnType, futureToBoxedResponse, scalaFutureToLaFuture}
import code.api.util.DynamicUtil.{Sandbox, Validation}
import code.api.util.{CallContext, CustomJsonFormats, DynamicUtil}
@@ -34,7 +35,7 @@ trait DynamicCompileEndpoint {
}
private def validateDependencies() = {
- val dependencies = DynamicUtil.getDynamicCodeDependentMethods(this.getClass, "process" == )
+ val dependencies = DynamicUtil.getDynamicCodeDependentMethods(this.getClass, "process".==)
Validation.validateDependency(dependencies)
}
}
diff --git a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala
index 757ea0465..bf423d647 100644
--- a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala
+++ b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala
@@ -1,5 +1,6 @@
package code.api.dynamic.endpoint.helper
+import scala.language.existentials
import org.apache.pekko.http.scaladsl.model.{HttpMethods, HttpMethod => PekkoHttpMethod}
import code.DynamicData.{DynamicDataProvider, DynamicDataT}
import code.DynamicEndpoint.{DynamicEndpointProvider, DynamicEndpointT}
@@ -677,7 +678,7 @@ object DynamicEndpointHelper extends RestHelper {
schemas += schema
}
// check whether this schema already recurse two times
- if(schemas.count(schema ==) > 3) {
+ if(schemas.count(schema.==) > 3) {
return JObject(Nil)
}
diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala
index 11ee5094c..c1a47283b 100644
--- a/obp-api/src/main/scala/code/api/util/APIUtil.scala
+++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala
@@ -26,6 +26,9 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.util
+
+import scala.language.implicitConversions
+import scala.language.reflectiveCalls
import bootstrap.liftweb.CustomDBVendor
import cats.effect.IO
import code.accountholders.AccountHolders
@@ -1772,9 +1775,9 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
private val reversedRequestUrl = requestUrlPartPath.reverse
def getPathParams(url: List[String]): Map[String, String] =
- reversedRequestUrl.zip(url.reverse) collect {
+ reversedRequestUrl.zip(url.reverse).collect {
case pair @(k, _) if isPathVariable(k) => pair
- } toMap
+ }.toMap
/**
* According errorResponseBodies whether contains UserNotLoggedIn and UserHasMissingRoles do validation.
@@ -4031,7 +4034,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
def parseDate(date: String): Option[Date] = {
val currentSupportFormats = List(DateWithDayFormat, DateWithSecondsFormat, DateWithMsFormat, DateWithMsRollbackFormat)
val parsePosition = new ParsePosition(0)
- currentSupportFormats.toStream.map(_.parse(date, parsePosition)).find(null !=)
+ currentSupportFormats.toStream.map(_.parse(date, parsePosition)).find(null.!=)
}
private def passesPsd2ServiceProviderCommon(cc: Option[CallContext], serviceProvider: String) = {
@@ -4427,7 +4430,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
private def getClassPool(classLoader: ClassLoader) = {
import scala.concurrent.duration._
- Caching.memoizeSyncWithImMemory(Some(classLoader.toString()))(DurationInt(30) days) {
+ Caching.memoizeSyncWithImMemory(Some(classLoader.toString()))(DurationInt(30).days) {
val classPool: ClassPool = ClassPool.getDefault
classPool.appendClassPath(new LoaderClassPath(classLoader))
classPool
@@ -4528,7 +4531,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
*/
def getObpTrace(clazzName: String, methodName: String, signature: String, exclude: List[(String, String, String)] = Nil): List[(String, String, String)] = {
import scala.concurrent.duration._
- Caching.memoizeSyncWithImMemory(Some(clazzName + methodName + signature))(DurationInt(30) days) {
+ Caching.memoizeSyncWithImMemory(Some(clazzName + methodName + signature))(DurationInt(30).days) {
// List:: className->methodName->signature, find all the dependent methods for one
val methods = getDependentMethods(clazzName, methodName, signature)
diff --git a/obp-api/src/main/scala/code/api/util/AfterApiAuth.scala b/obp-api/src/main/scala/code/api/util/AfterApiAuth.scala
index 0650d3990..860957127 100644
--- a/obp-api/src/main/scala/code/api/util/AfterApiAuth.scala
+++ b/obp-api/src/main/scala/code/api/util/AfterApiAuth.scala
@@ -32,11 +32,12 @@ object AfterApiAuth extends MdcLoggable{
*/
def innerLoginUserInitAction(authUser: Box[AuthUser]) = {
authUser.map { u => // Init actions
- logger.info("AfterApiAuth.innerLoginUserInitAction started successfully")
+ logger.debug("AfterApiAuth.innerLoginUserInitAction started successfully")
sofitInitAction(u)
} match {
- case Full(_) => logger.warn("AfterApiAuth.innerLoginUserInitAction completed successfully")
- case userInitActionFailure => logger.warn("AfterApiAuth.innerLoginUserInitAction: " + userInitActionFailure)
+ case Full(_) => logger.debug("AfterApiAuth.innerLoginUserInitAction completed successfully")
+ case Empty => // Init actions are not started at all
+ case userInitActionFailure => logger.error("AfterApiAuth.innerLoginUserInitAction: " + userInitActionFailure)
}
}
/**
diff --git a/obp-api/src/main/scala/code/api/util/ApiRole.scala b/obp-api/src/main/scala/code/api/util/ApiRole.scala
index 7a107307e..9e1f404b7 100644
--- a/obp-api/src/main/scala/code/api/util/ApiRole.scala
+++ b/obp-api/src/main/scala/code/api/util/ApiRole.scala
@@ -86,19 +86,19 @@ object ApiRole extends MdcLoggable{
case class CanGetCustomersAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCustomersAtAllBanks = CanGetCustomersAtAllBanks()
-
+
case class CanGetCustomersMinimalAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCustomersMinimalAtAllBanks = CanGetCustomersMinimalAtAllBanks()
-
+
case class CanGetCustomersAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomersAtOneBank = CanGetCustomersAtOneBank()
-
+
case class CanGetCustomersMinimalAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomersMinimalAtOneBank = CanGetCustomersMinimalAtOneBank()
-
+
case class CanGetCustomerOverview(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerOverview = CanGetCustomerOverview()
-
+
case class CanGetCustomerOverviewFlat(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerOverviewFlat = CanGetCustomerOverviewFlat()
@@ -127,7 +127,7 @@ object ApiRole extends MdcLoggable{
case class CanUpdateAgentStatusAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canUpdateAgentStatusAtAnyBank = CanUpdateAgentStatusAtAnyBank()
-
+
case class CanUpdateAgentStatusAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateAgentStatusAtOneBank = CanUpdateAgentStatusAtOneBank()
@@ -136,10 +136,10 @@ object ApiRole extends MdcLoggable{
case class CanUpdateCustomerNumber(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateCustomerNumber = CanUpdateCustomerNumber()
-
+
case class CanUpdateCustomerMobilePhoneNumber(requiresBankId: Boolean = true) extends ApiRole
- lazy val canUpdateCustomerMobilePhoneNumber = CanUpdateCustomerMobilePhoneNumber()
-
+ lazy val canUpdateCustomerMobilePhoneNumber = CanUpdateCustomerMobilePhoneNumber()
+
case class CanUpdateCustomerIdentity(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateCustomerIdentity = CanUpdateCustomerIdentity()
@@ -160,28 +160,28 @@ object ApiRole extends MdcLoggable{
case class CanCreateCustomerAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateCustomerAtAnyBank = CanCreateCustomerAtAnyBank()
-
+
case class CanGetCorrelatedUsersInfo(requiresBankId: Boolean = true) extends ApiRole
- lazy val canGetCorrelatedUsersInfo = CanGetCorrelatedUsersInfo()
-
+ lazy val canGetCorrelatedUsersInfo = CanGetCorrelatedUsersInfo()
+
case class CanGetCorrelatedUsersInfoAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCorrelatedUsersInfoAtAnyBank = CanGetCorrelatedUsersInfoAtAnyBank()
case class CanCreateUserCustomerLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateUserCustomerLink = CanCreateUserCustomerLink()
-
+
case class CanDeleteUserCustomerLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteUserCustomerLink = CanDeleteUserCustomerLink()
-
+
case class CanGetUserCustomerLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetUserCustomerLink = CanGetUserCustomerLink()
case class CanCreateUserCustomerLinkAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateUserCustomerLinkAtAnyBank = CanCreateUserCustomerLinkAtAnyBank()
-
+
case class CanGetUserCustomerLinkAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUserCustomerLinkAtAnyBank = CanGetUserCustomerLinkAtAnyBank()
-
+
case class CanDeleteUserCustomerLinkAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteUserCustomerLinkAtAnyBank = CanDeleteUserCustomerLinkAtAnyBank()
@@ -193,10 +193,10 @@ object ApiRole extends MdcLoggable{
case class CanCreateAccountAttributeAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateAccountAttributeAtOneBank = CanCreateAccountAttributeAtOneBank()
-
+
case class CanUpdateAccountAttribute(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateAccountAttribute = CanUpdateAccountAttribute()
-
+
case class CanGetAnyUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAnyUser = CanGetAnyUser()
@@ -226,10 +226,10 @@ object ApiRole extends MdcLoggable{
case class CanCreateEntitlementAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateEntitlementAtOneBank = CanCreateEntitlementAtOneBank()
-
+
case class CanCreateSystemViewPermission(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateSystemViewPermission = CanCreateSystemViewPermission()
-
+
case class CanDeleteSystemViewPermission(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteSystemViewPermission = CanDeleteSystemViewPermission()
@@ -305,16 +305,16 @@ object ApiRole extends MdcLoggable{
case class CanGetCustomerAccountLink(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerAccountLink = CanGetCustomerAccountLink()
-
+
case class CanGetCustomerAccountLinks(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCustomerAccountLinks = CanGetCustomerAccountLinks()
-
+
case class CanCreateBranch(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateBranch = CanCreateBranch()
case class CanUpdateBranch(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateBranch = CanUpdateBranch()
-
+
case class CanCreateBranchAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateBranchAtAnyBank = CanCreateBranchAtAnyBank()
@@ -325,14 +325,14 @@ object ApiRole extends MdcLoggable{
lazy val canDeleteBranchAtAnyBank = CanDeleteBranchAtAnyBank()
case class CanCreateAtm(requiresBankId: Boolean = true) extends ApiRole
- lazy val canCreateAtm = CanCreateAtm()
-
+ lazy val canCreateAtm = CanCreateAtm()
+
case class CanDeleteAtm(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteAtm = CanDeleteAtm()
case class CanDeleteAtmAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteAtmAtAnyBank = CanDeleteAtmAtAnyBank()
-
+
case class CanUpdateAtm(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateAtm = CanUpdateAtm()
@@ -344,22 +344,22 @@ object ApiRole extends MdcLoggable{
case class CanCreateCounterparty(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateCounterparty = CanCreateCounterparty()
-
+
case class CanCreateCounterpartyAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateCounterpartyAtAnyBank = CanCreateCounterpartyAtAnyBank()
case class CanDeleteCounterparty(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteCounterparty = CanDeleteCounterparty()
-
+
case class CanDeleteCounterpartyAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteCounterpartyAtAnyBank = CanDeleteCounterpartyAtAnyBank()
-
+
case class CanGetCounterparty(requiresBankId: Boolean = true) extends ApiRole
- lazy val canGetCounterparty = CanGetCounterparty()
-
+ lazy val canGetCounterparty = CanGetCounterparty()
+
case class CanGetCounterpartiesAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCounterpartiesAtAnyBank = CanGetCounterpartiesAtAnyBank()
-
+
case class CanGetCounterparties(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetCounterparties = CanGetCounterparties()
@@ -368,10 +368,10 @@ object ApiRole extends MdcLoggable{
case class CanGetAllApiCollections(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAllApiCollections = CanGetAllApiCollections()
-
+
case class CanGetCounterpartyAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCounterpartyAtAnyBank = CanGetCounterpartyAtAnyBank()
-
+
case class CanCreateProduct(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateProduct = CanCreateProduct()
@@ -395,7 +395,7 @@ object ApiRole extends MdcLoggable{
case class CanReadMetrics (requiresBankId: Boolean = false) extends ApiRole
lazy val canReadMetrics = CanReadMetrics()
-
+
case class CanGetMetricsAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canGetMetricsAtOneBank = CanGetMetricsAtOneBank()
@@ -419,19 +419,19 @@ object ApiRole extends MdcLoggable{
case class CanDeleteCacheKey(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteCacheKey = CanDeleteCacheKey()
lazy val canGetConfig = CanGetConfig()
-
+
case class CanGetAdapterInfo(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAdapterInfo = CanGetAdapterInfo()
-
+
case class CanGetAdapterInfoAtOneBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetAdapterInfoAtOneBank = CanGetAdapterInfoAtOneBank()
-
+
case class CanGetDatabaseInfo(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetDatabaseInfo = CanGetDatabaseInfo()
-
+
case class CanGetMigrations(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetMigrations = CanGetMigrations()
-
+
case class CanGetCallContext(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetCallContext = CanGetCallContext()
@@ -446,10 +446,10 @@ object ApiRole extends MdcLoggable{
case class CanUseAccountFirehoseAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canUseAccountFirehoseAtAnyBank = CanUseAccountFirehoseAtAnyBank()
-
+
case class CanUseAccountFirehose(requiresBankId: Boolean = true) extends ApiRole
lazy val canUseAccountFirehose = CanUseAccountFirehose()
-
+
case class CanUseCustomerFirehoseAtAnyBank(requiresBankId: Boolean = false) extends ApiRole
lazy val canUseCustomerFirehoseAtAnyBank = CanUseCustomerFirehoseAtAnyBank()
@@ -467,38 +467,38 @@ object ApiRole extends MdcLoggable{
case class CanUnlockUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canUnlockUser = CanUnlockUser()
-
+
case class CanLockUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canLockUser = CanLockUser()
-
+
case class CanDeleteUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteUser = CanDeleteUser()
case class CanValidateUser (requiresBankId: Boolean = false) extends ApiRole
lazy val canValidateUser = CanValidateUser()
-
+
case class CanGetUsersWithAttributes (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUsersWithAttributes = CanGetUsersWithAttributes()
-
+
case class CanCreateNonPersonalUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateNonPersonalUserAttribute = CanCreateNonPersonalUserAttribute()
-
+
case class CanGetNonPersonalUserAttributes (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetNonPersonalUserAttributes = CanGetNonPersonalUserAttributes()
-
+
case class CanDeleteNonPersonalUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteNonPersonalUserAttribute = CanDeleteNonPersonalUserAttribute()
// v6.0.0 User Attribute roles (consistent naming - "user attributes" means non-personal)
case class CanCreateUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateUserAttribute = CanCreateUserAttribute()
-
+
case class CanGetUserAttributes (requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUserAttributes = CanGetUserAttributes()
-
+
case class CanUpdateUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canUpdateUserAttribute = CanUpdateUserAttribute()
-
+
case class CanDeleteUserAttribute (requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteUserAttribute = CanDeleteUserAttribute()
@@ -510,7 +510,7 @@ object ApiRole extends MdcLoggable{
case class CanCreateRateLimits(requiresBankId: Boolean = false) extends ApiRole
lazy val canCreateRateLimits = CanCreateRateLimits()
-
+
case class CanDeleteRateLimits(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteRateLimits = CanDeleteRateLimits()
@@ -1173,17 +1173,17 @@ object ApiRole extends MdcLoggable{
lazy val canCreateGroupAtAllBanks = CanCreateGroupAtAllBanks()
case class CanCreateGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canCreateGroupAtOneBank = CanCreateGroupAtOneBank()
-
+
case class CanUpdateGroupAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canUpdateGroupAtAllBanks = CanUpdateGroupAtAllBanks()
case class CanUpdateGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canUpdateGroupAtOneBank = CanUpdateGroupAtOneBank()
-
+
case class CanDeleteGroupAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canDeleteGroupAtAllBanks = CanDeleteGroupAtAllBanks()
case class CanDeleteGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canDeleteGroupAtOneBank = CanDeleteGroupAtOneBank()
-
+
case class CanGetGroupsAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetGroupsAtAllBanks = CanGetGroupsAtAllBanks()
case class CanGetGroupsAtOneBank(requiresBankId: Boolean = true) extends ApiRole
@@ -1194,12 +1194,12 @@ object ApiRole extends MdcLoggable{
lazy val canAddUserToGroupAtAllBanks = CanAddUserToGroupAtAllBanks()
case class CanAddUserToGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canAddUserToGroupAtOneBank = CanAddUserToGroupAtOneBank()
-
+
case class CanRemoveUserFromGroupAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canRemoveUserFromGroupAtAllBanks = CanRemoveUserFromGroupAtAllBanks()
case class CanRemoveUserFromGroupAtOneBank(requiresBankId: Boolean = true) extends ApiRole
lazy val canRemoveUserFromGroupAtOneBank = CanRemoveUserFromGroupAtOneBank()
-
+
case class CanGetUserGroupMembershipsAtAllBanks(requiresBankId: Boolean = false) extends ApiRole
lazy val canGetUserGroupMembershipsAtAllBanks = CanGetUserGroupMembershipsAtAllBanks()
case class CanGetUserGroupMembershipsAtOneBank(requiresBankId: Boolean = true) extends ApiRole
@@ -1282,15 +1282,15 @@ object Util {
"CanSetCallLimits",
"CanDeleteRateLimits"
)
-
+
val allowed = allowedPrefixes ::: allowedExistingNames
source.collect {
case obj: Defn.Object if obj.name.value == "ApiRole" =>
obj.collect {
- case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == true =>
+ case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == true =>
// OK
- case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == false =>
+ case c: Defn.Class if allowed.exists(i => c.name.syntax.startsWith(i)) == false =>
println("INCORRECT - " + c)
}
}
@@ -1300,4 +1300,4 @@ object Util {
checkWrongDefinedNames
}
-}
+}
\ No newline at end of file
diff --git a/obp-api/src/main/scala/code/api/util/NewStyle.scala b/obp-api/src/main/scala/code/api/util/NewStyle.scala
index 80394c0c5..2a684e516 100644
--- a/obp-api/src/main/scala/code/api/util/NewStyle.scala
+++ b/obp-api/src/main/scala/code/api/util/NewStyle.scala
@@ -3160,7 +3160,7 @@ object NewStyle extends MdcLoggable{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(methodRoutingTTL second) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(methodRoutingTTL.second) {
MethodRoutingProvider.connectorMethodProvider.vend.getMethodRoutings(methodName, isBankIdExactMatch, bankIdPattern)
}
}
@@ -3213,7 +3213,7 @@ object NewStyle extends MdcLoggable{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(endpointMappingTTL second) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(endpointMappingTTL.second) {
{(EndpointMappingProvider.endpointMappingProvider.vend.getAllEndpointMappings(bankId), callContext)}
}
}
@@ -3327,7 +3327,7 @@ object NewStyle extends MdcLoggable{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL second) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL.second) {
DynamicEntityProvider.connectorMethodProvider.vend.getDynamicEntities(bankId, returnBothBankAndSystemLevel)
}
}
@@ -3338,7 +3338,7 @@ object NewStyle extends MdcLoggable{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL second) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(dynamicEntityTTL.second) {
DynamicEntityProvider.connectorMethodProvider.vend.getDynamicEntitiesByUserId(userId: String)
}
}
diff --git a/obp-api/src/main/scala/code/api/v1_2_1/APIMethods121.scala b/obp-api/src/main/scala/code/api/v1_2_1/APIMethods121.scala
index f55e488a2..7a93c9e15 100644
--- a/obp-api/src/main/scala/code/api/v1_2_1/APIMethods121.scala
+++ b/obp-api/src/main/scala/code/api/v1_2_1/APIMethods121.scala
@@ -76,7 +76,7 @@ trait APIMethods121 {
def checkIfLocationPossible(lat:Double,lon:Double) : Box[Unit] = {
if(scala.math.abs(lat) <= 90 & scala.math.abs(lon) <= 180)
- Full()
+ Full(())
else
Failure("Coordinates not possible")
}
@@ -132,7 +132,7 @@ trait APIMethods121 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(apiVersion,apiVersionStatus), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v1_2_1/OBPAPI1.2.1.scala b/obp-api/src/main/scala/code/api/v1_2_1/OBPAPI1.2.1.scala
index 5c550e036..113d684b1 100644
--- a/obp-api/src/main/scala/code/api/v1_2_1/OBPAPI1.2.1.scala
+++ b/obp-api/src/main/scala/code/api/v1_2_1/OBPAPI1.2.1.scala
@@ -26,6 +26,8 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v1_2_1
+import scala.language.implicitConversions
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
@@ -40,7 +42,7 @@ object OBPAPI1_2_1 extends OBPRestHelper with APIMethods121 with MdcLoggable wit
val version : ApiVersion = ApiVersion.v1_2_1 // "1.2.1"
val versionStatus = ApiVersionStatus.DEPRECATED.toString
- lazy val endpointsOf1_2_1 = List(
+ lazy val endpointsOf1_2_1: Seq[OBPEndpoint] = List(
Implementations1_2_1.root,
Implementations1_2_1.getBanks,
Implementations1_2_1.bankById,
diff --git a/obp-api/src/main/scala/code/api/v1_3_0/APIMethods130.scala b/obp-api/src/main/scala/code/api/v1_3_0/APIMethods130.scala
index da3ea41bf..5cd2d75cc 100644
--- a/obp-api/src/main/scala/code/api/v1_3_0/APIMethods130.scala
+++ b/obp-api/src/main/scala/code/api/v1_3_0/APIMethods130.scala
@@ -50,7 +50,7 @@ trait APIMethods130 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI1_3_0.version, OBPAPI1_3_0.versionStatus), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v1_3_0/OBPAPI1_3_0.scala b/obp-api/src/main/scala/code/api/v1_3_0/OBPAPI1_3_0.scala
index 7dccdf33d..d5b6ce050 100644
--- a/obp-api/src/main/scala/code/api/v1_3_0/OBPAPI1_3_0.scala
+++ b/obp-api/src/main/scala/code/api/v1_3_0/OBPAPI1_3_0.scala
@@ -1,5 +1,6 @@
package code.api.v1_3_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
diff --git a/obp-api/src/main/scala/code/api/v1_4_0/APIMethods140.scala b/obp-api/src/main/scala/code/api/v1_4_0/APIMethods140.scala
index a8ac7072c..b74008028 100644
--- a/obp-api/src/main/scala/code/api/v1_4_0/APIMethods140.scala
+++ b/obp-api/src/main/scala/code/api/v1_4_0/APIMethods140.scala
@@ -1,5 +1,6 @@
package code.api.v1_4_0
+import scala.language.reflectiveCalls
import code.api.Constant._
import code.api.util.ApiRole._
import code.api.util.ApiTag._
@@ -84,7 +85,7 @@ trait APIMethods140 extends MdcLoggable with APIMethods130 with APIMethods121{
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI1_4_0.version, OBPAPI1_4_0.versionStatus), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala b/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala
index bc2701364..db6f7ee9f 100644
--- a/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala
+++ b/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala
@@ -530,7 +530,7 @@ object JSONFactory1_4_0 extends MdcLoggable{
jsonResponseBodyFieldsI18n:String
): ResourceDocJson = {
val cacheKey = LOCALISED_RESOURCE_DOC_PREFIX + s"operationId:${operationId}-locale:$locale- isVersion4OrHigher:$isVersion4OrHigher".intern()
- Caching.memoizeSyncWithImMemory(Some(cacheKey))(CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL seconds) {
+ Caching.memoizeSyncWithImMemory(Some(cacheKey))(CREATE_LOCALISED_RESOURCE_DOC_JSON_TTL.seconds) {
val fieldsDescription =
if (resourceDocUpdatedTags.tags.toString.contains("Dynamic-Entity")
|| resourceDocUpdatedTags.tags.toString.contains("Dynamic-Endpoint")
diff --git a/obp-api/src/main/scala/code/api/v1_4_0/OBPAPI1_4_0.scala b/obp-api/src/main/scala/code/api/v1_4_0/OBPAPI1_4_0.scala
index 57d6d2180..86c282757 100644
--- a/obp-api/src/main/scala/code/api/v1_4_0/OBPAPI1_4_0.scala
+++ b/obp-api/src/main/scala/code/api/v1_4_0/OBPAPI1_4_0.scala
@@ -1,5 +1,6 @@
package code.api.v1_4_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
diff --git a/obp-api/src/main/scala/code/api/v2_0_0/APIMethods200.scala b/obp-api/src/main/scala/code/api/v2_0_0/APIMethods200.scala
index b496bee72..894261e4c 100644
--- a/obp-api/src/main/scala/code/api/v2_0_0/APIMethods200.scala
+++ b/obp-api/src/main/scala/code/api/v2_0_0/APIMethods200.scala
@@ -1,5 +1,6 @@
package code.api.v2_0_0
+import scala.language.reflectiveCalls
import code.TransactionTypes.TransactionType
import code.api.APIFailureNewStyle
import code.api.Constant._
@@ -147,7 +148,7 @@ trait APIMethods200 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory121.getApiInfoJSON(OBPAPI2_0_0.version, OBPAPI2_0_0.versionStatus), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v2_0_0/OBPAPI2_0_0.scala b/obp-api/src/main/scala/code/api/v2_0_0/OBPAPI2_0_0.scala
index 6e037559c..c642e154a 100644
--- a/obp-api/src/main/scala/code/api/v2_0_0/OBPAPI2_0_0.scala
+++ b/obp-api/src/main/scala/code/api/v2_0_0/OBPAPI2_0_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v2_0_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
diff --git a/obp-api/src/main/scala/code/api/v2_1_0/APIMethods210.scala b/obp-api/src/main/scala/code/api/v2_1_0/APIMethods210.scala
index 5280a9267..1c83ad6de 100644
--- a/obp-api/src/main/scala/code/api/v2_1_0/APIMethods210.scala
+++ b/obp-api/src/main/scala/code/api/v2_1_0/APIMethods210.scala
@@ -1,5 +1,6 @@
package code.api.v2_1_0
+import scala.language.reflectiveCalls
import code.TransactionTypes.TransactionType
import code.api.Constant.CAN_SEE_TRANSACTION_REQUESTS
import code.api.util.ApiTag._
@@ -91,7 +92,7 @@ trait APIMethods210 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI2_1_0.version, OBPAPI2_1_0.versionStatus), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v2_1_0/OBPAPI2_1_0.scala b/obp-api/src/main/scala/code/api/v2_1_0/OBPAPI2_1_0.scala
index e796bbee5..eaab7b2d0 100644
--- a/obp-api/src/main/scala/code/api/v2_1_0/OBPAPI2_1_0.scala
+++ b/obp-api/src/main/scala/code/api/v2_1_0/OBPAPI2_1_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v2_1_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import code.api.util.{APIUtil, VersionedOBPApis}
diff --git a/obp-api/src/main/scala/code/api/v2_2_0/APIMethods220.scala b/obp-api/src/main/scala/code/api/v2_2_0/APIMethods220.scala
index e6af9eba3..0cc651df4 100644
--- a/obp-api/src/main/scala/code/api/v2_2_0/APIMethods220.scala
+++ b/obp-api/src/main/scala/code/api/v2_2_0/APIMethods220.scala
@@ -1,5 +1,6 @@
package code.api.v2_2_0
+import scala.language.reflectiveCalls
import code.api.Constant._
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
import code.api.util.APIUtil._
@@ -79,7 +80,7 @@ trait APIMethods220 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI2_2_0.version, OBPAPI2_2_0.versionStatus), HttpCode.`200`(cc.callContext))
}
@@ -535,14 +536,14 @@ trait APIMethods220 {
_ <- entitlementsByBank.filter(_.roleName == CanCreateEntitlementAtOneBank.toString()).size > 0 match {
case true =>
// Already has entitlement
- Full()
+ Full(())
case false =>
Full(Entitlement.entitlement.vend.addEntitlement(bank.id, u.userId, CanCreateEntitlementAtOneBank.toString()))
}
_ <- entitlementsByBank.filter(_.roleName == CanReadDynamicResourceDocsAtOneBank.toString()).size > 0 match {
case true =>
// Already has entitlement
- Full()
+ Full(())
case false =>
Full(Entitlement.entitlement.vend.addEntitlement(bank.id, u.userId, CanReadDynamicResourceDocsAtOneBank.toString()))
}
@@ -1246,7 +1247,7 @@ trait APIMethods220 {
(account, callContext)
}
}else
- Future{(Full(), Some(cc))}
+ Future{(Full(()), Some(cc))}
otherAccountRoutingSchemeOBPFormat = if(postJson.other_account_routing_scheme.equalsIgnoreCase("AccountNo")) "ACCOUNT_NUMBER" else StringHelpers.snakify(postJson.other_account_routing_scheme).toUpperCase
diff --git a/obp-api/src/main/scala/code/api/v2_2_0/OBPAPI2_2_0.scala b/obp-api/src/main/scala/code/api/v2_2_0/OBPAPI2_2_0.scala
index d618322c2..eef388578 100644
--- a/obp-api/src/main/scala/code/api/v2_2_0/OBPAPI2_2_0.scala
+++ b/obp-api/src/main/scala/code/api/v2_2_0/OBPAPI2_2_0.scala
@@ -1,6 +1,7 @@
package code.api.v2_2_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import code.api.util.{APIUtil, VersionedOBPApis}
diff --git a/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala b/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala
index 400da0234..e556b67ea 100644
--- a/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala
+++ b/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala
@@ -1,5 +1,6 @@
package code.api.v3_0_0
+import scala.language.reflectiveCalls
import code.accountattribute.AccountAttributeX
import code.api.Constant._
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON
@@ -84,7 +85,7 @@ trait APIMethods300 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI3_0_0.version, OBPAPI3_0_0.versionStatus), HttpCode.`200`(cc.callContext))
}
@@ -2118,7 +2119,7 @@ trait APIMethods300 {
hasCanReadGlossaryRole
}
} else {
- Future{Full()}
+ Future{Full(())}
}
json = JSONFactory300.createGlossaryItemsJsonV300(getGlossaryItems)
} yield {
diff --git a/obp-api/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala b/obp-api/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala
index fad91faae..d8bd8f86c 100644
--- a/obp-api/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala
+++ b/obp-api/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v3_0_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
diff --git a/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala b/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala
index c4867e5d8..9a31b35fb 100644
--- a/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala
+++ b/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala
@@ -1,5 +1,6 @@
package code.api.v3_1_0
+import scala.language.reflectiveCalls
import code.api.Constant
import code.api.Constant._
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
@@ -101,7 +102,7 @@ trait APIMethods310 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory.getApiInfoJSON(OBPAPI3_1_0.version, OBPAPI3_1_0.versionStatus), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v3_1_0/JSONFactory3.1.0.scala b/obp-api/src/main/scala/code/api/v3_1_0/JSONFactory3.1.0.scala
index a640f7efa..0f25cb7c5 100644
--- a/obp-api/src/main/scala/code/api/v3_1_0/JSONFactory3.1.0.scala
+++ b/obp-api/src/main/scala/code/api/v3_1_0/JSONFactory3.1.0.scala
@@ -1075,7 +1075,7 @@ object JSONFactory310{
def createEntitlementJsonsV310(tr: List[Entitlement]) = {
val idToUser: Map[String, Box[String]] = tr.map(_.userId).distinct.map {
userId => (userId, UserX.findByUserId(userId).map(_.name))
- } toMap;
+ }.toMap;
EntitlementJSonsV310(
tr.map(e =>
diff --git a/obp-api/src/main/scala/code/api/v3_1_0/OBPAPI3_1_0.scala b/obp-api/src/main/scala/code/api/v3_1_0/OBPAPI3_1_0.scala
index b581773be..fe1b43249 100644
--- a/obp-api/src/main/scala/code/api/v3_1_0/OBPAPI3_1_0.scala
+++ b/obp-api/src/main/scala/code/api/v3_1_0/OBPAPI3_1_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v3_1_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import com.openbankproject.commons.util.{ApiVersion,ApiVersionStatus}
diff --git a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala
index 78228ef5f..fa4a35a62 100644
--- a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala
+++ b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala
@@ -1,5 +1,6 @@
package code.api.v4_0_0
+import scala.language.reflectiveCalls
import code.DynamicData.DynamicData
import code.DynamicEndpoint.DynamicEndpointSwagger
import code.accountattribute.AccountAttributeX
@@ -1546,7 +1547,7 @@ trait APIMethods400 extends MdcLoggable {
value = rejectReasonCode,
callContext = callContext
)
- } else Future.successful()
+ } else Future.successful(())
rejectAdditionalInformation =
challengeAnswerJson.additional_information.getOrElse("")
_ <-
@@ -1562,7 +1563,7 @@ trait APIMethods400 extends MdcLoggable {
value = rejectAdditionalInformation,
callContext = callContext
)
- } else Future.successful()
+ } else Future.successful(())
_ <- NewStyle.function.notifyTransactionRequest(
fromAccount,
toAccount,
@@ -3371,7 +3372,7 @@ trait APIMethods400 extends MdcLoggable {
case (Nil | "root" :: Nil) JsonGet _ => { cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(
JSONFactory400.getApiInfoJSON(
@@ -3405,7 +3406,7 @@ trait APIMethods400 extends MdcLoggable {
case "development" :: "call_context" :: Nil JsonGet _ => { cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(cc.callContext, HttpCode.`200`(cc.callContext))
}
@@ -3434,7 +3435,7 @@ trait APIMethods400 extends MdcLoggable {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(cc.callContext, HttpCode.`200`(cc.callContext))
}
@@ -10457,7 +10458,7 @@ trait APIMethods400 extends MdcLoggable {
(account, callContext)
}
} else
- Future { (Full(), Some(cc)) }
+ Future { (Full(()), Some(cc)) }
otherAccountRoutingSchemeOBPFormat =
if (
@@ -10810,7 +10811,7 @@ trait APIMethods400 extends MdcLoggable {
(account, callContext)
}
} else
- Future { (Full(), Some(cc)) }
+ Future { (Full(()), Some(cc)) }
otherAccountRoutingSchemeOBPFormat =
if (
@@ -12872,7 +12873,7 @@ trait APIMethods400 extends MdcLoggable {
// auth type validation related endpoints
private val allowedAuthTypes =
- AuthenticationType.values.filterNot(AuthenticationType.Anonymous ==)
+ AuthenticationType.values.filterNot(AuthenticationType.Anonymous.==)
staticResourceDocs += ResourceDoc(
createAuthenticationTypeValidation,
implementedInApiVersion,
@@ -16724,7 +16725,7 @@ trait APIMethods400 extends MdcLoggable {
s"$EntitlementAlreadyExists user_id($userId) ${duplicatedRoles.mkString(",")}"
Helper.booleanToFuture(errorMessages, cc = callContext) { false }
} else
- Future.successful(Full())
+ Future.successful(Full(()))
}
/** This method will check all the roles the loggedIn user already has and the
@@ -16758,7 +16759,7 @@ trait APIMethods400 extends MdcLoggable {
.mkString(",")}"
Helper.booleanToFuture(errorMessages, cc = callContext) { false }
} else
- Future.successful(Full())
+ Future.successful(Full(()))
}
private def checkRoleBankIdMapping(
diff --git a/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala b/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala
index 0d8c671fa..089a7bc14 100644
--- a/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala
+++ b/obp-api/src/main/scala/code/api/v4_0_0/OBPAPI4_0_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v4_0_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import code.api.util.VersionedOBPApis
diff --git a/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala b/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala
index 129d217c3..77790a030 100644
--- a/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala
+++ b/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala
@@ -1,5 +1,6 @@
package code.api.v5_0_0
+import scala.language.reflectiveCalls
import code.accountattribute.AccountAttributeX
import code.api.Constant._
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
@@ -104,7 +105,7 @@ trait APIMethods500 {
cc =>
implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory400.getApiInfoJSON(OBPAPI5_0_0.version,OBPAPI5_0_0.versionStatus), HttpCode.`200`(cc.callContext))
}
@@ -220,14 +221,14 @@ trait APIMethods500 {
_ <- entitlementsByBank.filter(_.roleName == CanCreateEntitlementAtOneBank.toString()).size > 0 match {
case true =>
// Already has entitlement
- Future()
+ Future(())
case false =>
Future(Entitlement.entitlement.vend.addEntitlement(postJson.id.getOrElse(""), cc.userId, CanCreateEntitlementAtOneBank.toString()))
}
_ <- entitlementsByBank.filter(_.roleName == CanReadDynamicResourceDocsAtOneBank.toString()).size > 0 match {
case true =>
// Already has entitlement
- Future()
+ Future(())
case false =>
Future(Entitlement.entitlement.vend.addEntitlement(postJson.id.getOrElse(""), cc.userId, CanReadDynamicResourceDocsAtOneBank.toString()))
}
diff --git a/obp-api/src/main/scala/code/api/v5_0_0/OBPAPI5_0_0.scala b/obp-api/src/main/scala/code/api/v5_0_0/OBPAPI5_0_0.scala
index 24110ea73..ac3528d8d 100644
--- a/obp-api/src/main/scala/code/api/v5_0_0/OBPAPI5_0_0.scala
+++ b/obp-api/src/main/scala/code/api/v5_0_0/OBPAPI5_0_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v5_0_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import code.api.util.{APIUtil, VersionedOBPApis}
diff --git a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala
index e3f26b02f..aa9a1d727 100644
--- a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala
+++ b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala
@@ -1,6 +1,7 @@
package code.api.v5_1_0
+import scala.language.reflectiveCalls
import code.api.Constant
import code.api.Constant._
import code.api.OAuth2Login.{Keycloak, OBPOIDC}
@@ -107,7 +108,7 @@ trait APIMethods510 {
case (Nil | "root" :: Nil) JsonGet _ => {
cc => implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory510.getApiInfoJSON(OBPAPI5_1_0.version,OBPAPI5_1_0.versionStatus), HttpCode.`200`(cc.callContext))
}
@@ -4451,7 +4452,7 @@ trait APIMethods510 {
case "tags" :: Nil JsonGet _ =>
cc => implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future.successful() // Just start async call
+ _ <- Future.successful(()) // Just start async call
} yield {
(APITags(ApiTag.allDisplayTagNames.toList), HttpCode.`200`(cc.callContext))
}
diff --git a/obp-api/src/main/scala/code/api/v5_1_0/OBPAPI5_1_0.scala b/obp-api/src/main/scala/code/api/v5_1_0/OBPAPI5_1_0.scala
index 804e2eb5e..3a7f94e39 100644
--- a/obp-api/src/main/scala/code/api/v5_1_0/OBPAPI5_1_0.scala
+++ b/obp-api/src/main/scala/code/api/v5_1_0/OBPAPI5_1_0.scala
@@ -26,6 +26,7 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v5_1_0
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import code.api.util.{APIUtil, VersionedOBPApis}
diff --git a/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala b/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala
index 9dd79e45c..6331f2a44 100644
--- a/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala
+++ b/obp-api/src/main/scala/code/api/v6_0_0/APIMethods600.scala
@@ -1,5 +1,6 @@
package code.api.v6_0_0
+import scala.language.reflectiveCalls
import code.accountattribute.AccountAttributeX
import code.api.Constant
import code.api.{DirectLogin, ObpApiFailure}
@@ -27,7 +28,7 @@ import code.api.v5_0_0.{ViewJsonV500, ViewsJsonV500}
import code.api.v5_1_0.{JSONFactory510, PostCustomerLegalNameJsonV510}
import code.api.dynamic.entity.helper.{DynamicEntityHelper, DynamicEntityInfo}
import code.api.v6_0_0.JSONFactory600.{AddUserToGroupResponseJsonV600, DynamicEntityDiagnosticsJsonV600, DynamicEntityIssueJsonV600, GroupEntitlementJsonV600, GroupEntitlementsJsonV600, GroupJsonV600, GroupsJsonV600, PostGroupJsonV600, PostGroupMembershipJsonV600, PostResetPasswordUrlJsonV600, PutGroupJsonV600, ReferenceTypeJsonV600, ReferenceTypesJsonV600, ResetPasswordUrlJsonV600, RoleWithEntitlementCountJsonV600, RolesWithEntitlementCountsJsonV600, ScannedApiVersionJsonV600, UpdateViewJsonV600, UserGroupMembershipJsonV600, UserGroupMembershipsJsonV600, ValidateUserEmailJsonV600, ValidateUserEmailResponseJsonV600, ViewJsonV600, ViewPermissionJsonV600, ViewPermissionsJsonV600, ViewsJsonV600, createAbacRuleJsonV600, createAbacRulesJsonV600, createActiveRateLimitsJsonV600, createCallLimitJsonV600, createRedisCallCountersJson}
-import code.api.v6_0_0.{AbacRuleJsonV600, AbacRuleResultJsonV600, AbacRulesJsonV600, CacheConfigJsonV600, CacheInfoJsonV600, CacheNamespaceInfoJsonV600, CreateAbacRuleJsonV600, CurrentConsumerJsonV600, ExecuteAbacRuleJsonV600, InMemoryCacheStatusJsonV600, RedisCacheStatusJsonV600, UpdateAbacRuleJsonV600, AbacPoliciesJsonV600, AbacPolicyJsonV600}
+import code.api.v6_0_0.{AbacRuleJsonV600, AbacRuleResultJsonV600, AbacRulesJsonV600, CacheConfigJsonV600, CacheInfoJsonV600, CacheNamespaceInfoJsonV600, CreateAbacRuleJsonV600, CurrentConsumerJsonV600, ExecuteAbacRuleJsonV600, InMemoryCacheStatusJsonV600, RedisCacheStatusJsonV600, UpdateAbacRuleJsonV600}
import code.api.v6_0_0.OBPAPI6_0_0
import code.abacrule.{AbacRuleEngine, MappedAbacRuleProvider}
import code.metrics.APIMetrics
@@ -111,7 +112,7 @@ trait APIMethods600 {
case (Nil | "root" :: Nil) JsonGet _ => {
cc => implicit val ec = EndpointContext(Some(cc))
for {
- _ <- Future() // Just start async call
+ _ <- Future(()) // Just start async call
} yield {
(JSONFactory510.getApiInfoJSON(OBPAPI6_0_0.version, OBPAPI6_0_0.versionStatus), HttpCode.`200`(cc.callContext))
}
@@ -1556,14 +1557,14 @@ trait APIMethods600 {
_ <- entitlementsByBank.exists(_.roleName == CanCreateEntitlementAtOneBank.toString()) match {
case true =>
// Already has entitlement
- Future()
+ Future(())
case false =>
Future(Entitlement.entitlement.vend.addEntitlement(postJson.bank_id, cc.userId, CanCreateEntitlementAtOneBank.toString()))
}
_ <- entitlementsByBank.exists(_.roleName == CanReadDynamicResourceDocsAtOneBank.toString()) match {
case true =>
// Already has entitlement
- Future()
+ Future(())
case false =>
Future(Entitlement.entitlement.vend.addEntitlement(postJson.bank_id, cc.userId, CanReadDynamicResourceDocsAtOneBank.toString()))
}
@@ -1691,7 +1692,7 @@ trait APIMethods600 {
*/
val cacheKey = "getConnectorMethodNames"
val cacheTTL = APIUtil.getPropsAsIntValue("getConnectorMethodNames.cache.ttl.seconds", 3600)
- Caching.memoizeSyncWithProvider(Some(cacheKey))(cacheTTL seconds) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey))(cacheTTL.seconds) {
val connectorName = APIUtil.getPropsValue("connector", "mapped")
val connector = code.bankconnectors.Connector.getConnectorInstance(connectorName)
connector.callableMethods.keys.toList
diff --git a/obp-api/src/main/scala/code/api/v6_0_0/OBPAPI6_0_0.scala b/obp-api/src/main/scala/code/api/v6_0_0/OBPAPI6_0_0.scala
index 6b1868e7d..b6a30baf5 100644
--- a/obp-api/src/main/scala/code/api/v6_0_0/OBPAPI6_0_0.scala
+++ b/obp-api/src/main/scala/code/api/v6_0_0/OBPAPI6_0_0.scala
@@ -26,6 +26,8 @@ TESOBE (http://www.tesobe.com/)
*/
package code.api.v6_0_0
+
+import scala.language.reflectiveCalls
import code.api.OBPRestHelper
import code.api.util.APIUtil.{OBPEndpoint, getAllowedEndpoints}
import code.api.util.VersionedOBPApis
diff --git a/obp-api/src/main/scala/code/authtypevalidation/MappedAuthTypeValidationProvider.scala b/obp-api/src/main/scala/code/authtypevalidation/MappedAuthTypeValidationProvider.scala
index 19e7cffd6..6f7d12219 100644
--- a/obp-api/src/main/scala/code/authtypevalidation/MappedAuthTypeValidationProvider.scala
+++ b/obp-api/src/main/scala/code/authtypevalidation/MappedAuthTypeValidationProvider.scala
@@ -22,7 +22,7 @@ object MappedAuthTypeValidationProvider extends AuthenticationTypeValidationProv
override def getByOperationId(operationId: String): Box[JsonAuthTypeValidation] = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getValidationByOperationIdTTL second) {
+ Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getValidationByOperationIdTTL.second) {
AuthenticationTypeValidation.find(By(AuthenticationTypeValidation.OperationId, operationId))
.map(it => JsonAuthTypeValidation(it.operationId, it.allowedAuthTypes))
}}
diff --git a/obp-api/src/main/scala/code/bankconnectors/Connector.scala b/obp-api/src/main/scala/code/bankconnectors/Connector.scala
index 4fe2e3b84..8ef5483e3 100644
--- a/obp-api/src/main/scala/code/bankconnectors/Connector.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/Connector.scala
@@ -1,5 +1,6 @@
package code.bankconnectors
+import scala.language.implicitConversions
import org.apache.pekko.http.scaladsl.model.HttpMethod
import code.api.attributedefinition.AttributeDefinition
import code.api.util.APIUtil.{OBPReturnType, _}
@@ -220,7 +221,7 @@ trait Connector extends MdcLoggable {
protected implicit def OBPReturnTypeToFutureReturnType[T](value: OBPReturnType[Box[T]]): Future[Box[(T, Option[CallContext])]] =
value map tupleToBoxTuple
- private val futureTimeOut: Duration = 20 seconds
+ private val futureTimeOut: Duration = 20.seconds
/**
* convert OBPReturnType return type to Tuple type
*
@@ -240,7 +241,7 @@ trait Connector extends MdcLoggable {
*/
protected implicit def OBPReturnTypeToBoxTuple[T](value: OBPReturnType[Box[T]]): Box[(T, Option[CallContext])] =
Await.result(
- OBPReturnTypeToFutureReturnType(value), 30 seconds
+ OBPReturnTypeToFutureReturnType(value), 30.seconds
)
/**
@@ -253,7 +254,7 @@ trait Connector extends MdcLoggable {
protected implicit def OBPReturnTypeToBox[T](value: OBPReturnType[Box[T]]): Box[T] =
Await.result(
value.map(_._1),
- 30 seconds
+ 30.seconds
)
protected def convertToTuple[T](callContext: Option[CallContext])(inbound: Box[InBoundTrait[T]]): (Box[T], Option[CallContext]) = {
diff --git a/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala b/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala
index b9d1464a4..d5fac02b5 100644
--- a/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala
@@ -241,19 +241,19 @@ object InternalConnector {
val dynamicMethods: Map[String, MethodSymbol] = ConnectorMethodProvider.provider.vend.getAll().map {
case JsonConnectorMethod(_, methodName, _, _) =>
methodName -> Box(methodNameToSymbols.get(methodName)).openOrThrowException(s"method name $methodName does not exist in the Connector")
- } toMap
+ }.toMap
dynamicMethods
}
- private lazy val methodNameToSymbols: Map[String, MethodSymbol] = typeOf[Connector].decls collect {
+ private lazy val methodNameToSymbols: Map[String, MethodSymbol] = typeOf[Connector].decls.collect {
case t: TermSymbol if t.isMethod && t.isPublic && !t.isConstructor && !t.isVal && !t.isVar =>
val methodName = t.name.decodedName.toString.trim
val method = t.asMethod
methodName -> method
- } toMap
+ }.toMap
- lazy val methodNameToSignature: Map[String, String] = methodNameToSymbols map {
+ lazy val methodNameToSignature: Map[String, String] = methodNameToSymbols.map {
case (methodName, methodSymbol) =>
val signature = methodSymbol.typeSignature.toString
val returnType = methodSymbol.returnType.toString
diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnectorInternal.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnectorInternal.scala
index 25e48a15f..5313b8926 100644
--- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnectorInternal.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnectorInternal.scala
@@ -947,7 +947,7 @@ object LocalMappedConnectorInternal extends MdcLoggable {
attributeType = TransactionRequestAttributeType.withName("STRING"),
value = refundReasonCode,
callContext = callContext)
- } else Future.successful()
+ } else Future.successful(())
(newTransactionRequestStatus, callContext) <- NewStyle.function.notifyTransactionRequest(refundFromAccount, refundToAccount, createdTransactionRequest, callContext)
_ <- NewStyle.function.saveTransactionRequestStatusImpl(createdTransactionRequest.id, newTransactionRequestStatus.toString, callContext)
diff --git a/obp-api/src/main/scala/code/bankconnectors/akka/actor/AkkaConnectorActorInit.scala b/obp-api/src/main/scala/code/bankconnectors/akka/actor/AkkaConnectorActorInit.scala
index 2170bf622..ec718d31d 100644
--- a/obp-api/src/main/scala/code/bankconnectors/akka/actor/AkkaConnectorActorInit.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/akka/actor/AkkaConnectorActorInit.scala
@@ -9,5 +9,5 @@ import scala.concurrent.duration._
trait AkkaConnectorActorInit extends MdcLoggable{
// Default is 3 seconds, which should be more than enough for slower systems
val ACTOR_TIMEOUT: Long = APIUtil.getPropsAsLongValue("akka_connector.timeout").openOr(3)
- implicit val timeout = Timeout(ACTOR_TIMEOUT * (1000 milliseconds))
+ implicit val timeout = Timeout(ACTOR_TIMEOUT * (1000.milliseconds))
}
\ No newline at end of file
diff --git a/obp-api/src/main/scala/code/bankconnectors/rest/RestConnector_vMar2019.scala b/obp-api/src/main/scala/code/bankconnectors/rest/RestConnector_vMar2019.scala
index 26304d01f..c5bd84c1b 100644
--- a/obp-api/src/main/scala/code/bankconnectors/rest/RestConnector_vMar2019.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/rest/RestConnector_vMar2019.scala
@@ -23,6 +23,7 @@ Osloerstrasse 16/17
Berlin 13359, Germany
*/
+import scala.language.implicitConversions
import _root_.org.apache.pekko.stream.StreamTcpException
import org.apache.pekko.http.scaladsl.model._
import org.apache.pekko.http.scaladsl.model.headers.RawHeader
diff --git a/obp-api/src/main/scala/code/connectormethod/MappedConnectorMethodProvider.scala b/obp-api/src/main/scala/code/connectormethod/MappedConnectorMethodProvider.scala
index caf7cfa0e..426f9b047 100644
--- a/obp-api/src/main/scala/code/connectormethod/MappedConnectorMethodProvider.scala
+++ b/obp-api/src/main/scala/code/connectormethod/MappedConnectorMethodProvider.scala
@@ -31,14 +31,14 @@ object MappedConnectorMethodProvider extends ConnectorMethodProvider {
override def getByMethodNameWithCache(methodName: String): Box[JsonConnectorMethod] = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getConnectorMethodTTL second) {
+ Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getConnectorMethodTTL.second) {
getByMethodNameWithoutCache(methodName)
}}
}
override def getAll(): List[JsonConnectorMethod] = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getConnectorMethodTTL second) {
+ Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getConnectorMethodTTL.second) {
ConnectorMethod.findAll()
.map(it => JsonConnectorMethod(Some(it.ConnectorMethodId.get), it.MethodName.get, it.MethodBody.get, getLang(it)))
}}
diff --git a/obp-api/src/main/scala/code/dynamicEndpoint/MapppedDynamicEndpointProvider.scala b/obp-api/src/main/scala/code/dynamicEndpoint/MapppedDynamicEndpointProvider.scala
index 3ae9f9cc0..d4660d7b5 100644
--- a/obp-api/src/main/scala/code/dynamicEndpoint/MapppedDynamicEndpointProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicEndpoint/MapppedDynamicEndpointProvider.scala
@@ -71,7 +71,7 @@ object MappedDynamicEndpointProvider extends DynamicEndpointProvider with Custom
override def getAll(bankId: Option[String]): List[DynamicEndpointT] = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (dynamicEndpointTTL second) {
+ Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (dynamicEndpointTTL.second) {
if (bankId.isEmpty)
DynamicEndpoint.findAll()
else
diff --git a/obp-api/src/main/scala/code/dynamicMessageDoc/MappedDynamicMessageDocProvider.scala b/obp-api/src/main/scala/code/dynamicMessageDoc/MappedDynamicMessageDocProvider.scala
index 81b420b27..81240419f 100644
--- a/obp-api/src/main/scala/code/dynamicMessageDoc/MappedDynamicMessageDocProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicMessageDoc/MappedDynamicMessageDocProvider.scala
@@ -44,7 +44,7 @@ object MappedDynamicMessageDocProvider extends DynamicMessageDocProvider {
override def getAll(bankId: Option[String]): List[JsonDynamicMessageDoc] = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getDynamicMessageDocTTL second) {
+ Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getDynamicMessageDocTTL.second) {
if(bankId.isEmpty){
DynamicMessageDoc.findAll().map(DynamicMessageDoc.getJsonDynamicMessageDoc)
} else {
diff --git a/obp-api/src/main/scala/code/dynamicResourceDoc/MappedDynamicResourceDocProvider.scala b/obp-api/src/main/scala/code/dynamicResourceDoc/MappedDynamicResourceDocProvider.scala
index 2b545f336..142e64b2e 100644
--- a/obp-api/src/main/scala/code/dynamicResourceDoc/MappedDynamicResourceDocProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicResourceDoc/MappedDynamicResourceDocProvider.scala
@@ -50,7 +50,7 @@ object MappedDynamicResourceDocProvider extends DynamicResourceDocProvider {
override def getAllAndConvert[T: Manifest](bankId: Option[String], transform: JsonDynamicResourceDoc => T): List[T] = {
val cacheKey = (bankId.toString+transform.toString()).intern()
- Caching.memoizeSyncWithImMemory(Some(cacheKey))(getDynamicResourceDocTTL seconds){
+ Caching.memoizeSyncWithImMemory(Some(cacheKey))(getDynamicResourceDocTTL.seconds){
if(bankId.isEmpty){
DynamicResourceDoc.findAll()
.map(doc => transform(DynamicResourceDoc.getJsonDynamicResourceDoc(doc)))
diff --git a/obp-api/src/main/scala/code/fx/fx.scala b/obp-api/src/main/scala/code/fx/fx.scala
index f5a6ec948..9abf2e2f9 100644
--- a/obp-api/src/main/scala/code/fx/fx.scala
+++ b/obp-api/src/main/scala/code/fx/fx.scala
@@ -66,7 +66,7 @@ object fx extends MdcLoggable {
*/
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(TTL seconds) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(TTL.seconds) {
getFallbackExchangeRate(fromCurrency, toCurrency)
}
}
diff --git a/obp-api/src/main/scala/code/management/ImporterAPI.scala b/obp-api/src/main/scala/code/management/ImporterAPI.scala
index 3a0fa9e28..0a65a03e0 100644
--- a/obp-api/src/main/scala/code/management/ImporterAPI.scala
+++ b/obp-api/src/main/scala/code/management/ImporterAPI.scala
@@ -160,7 +160,7 @@ object ImporterAPI extends RestHelper with MdcLoggable {
* per "Account".
*/
// TODO: this duration limit should be fixed
- val createdEnvelopes = TransactionInserter !? (3 minutes, toInsert)
+ val createdEnvelopes = TransactionInserter !? (3.minutes, toInsert)
createdEnvelopes match {
case Full(inserted : InsertedTransactions) =>
diff --git a/obp-api/src/main/scala/code/metadata/counterparties/MapperCounterparties.scala b/obp-api/src/main/scala/code/metadata/counterparties/MapperCounterparties.scala
index 08c244a22..44d6b5cf4 100644
--- a/obp-api/src/main/scala/code/metadata/counterparties/MapperCounterparties.scala
+++ b/obp-api/src/main/scala/code/metadata/counterparties/MapperCounterparties.scala
@@ -35,7 +35,7 @@ object MapperCounterparties extends Counterparties with MdcLoggable {
*/
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(MetadataTTL second) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(MetadataTTL.second) {
/**
* Generates a new alias name that is guaranteed not to collide with any existing public alias names
diff --git a/obp-api/src/main/scala/code/metrics/ConnectorMetrics.scala b/obp-api/src/main/scala/code/metrics/ConnectorMetrics.scala
index edc8a1de1..9267e18c6 100644
--- a/obp-api/src/main/scala/code/metrics/ConnectorMetrics.scala
+++ b/obp-api/src/main/scala/code/metrics/ConnectorMetrics.scala
@@ -33,7 +33,7 @@ object ConnectorMetrics extends ConnectorMetricsProvider {
*/
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cachedAllConnectorMetrics days){
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cachedAllConnectorMetrics.days){
val limit = queryParams.collect { case OBPLimit(value) => MaxRows[MappedConnectorMetric](value) }.headOption
val offset = queryParams.collect { case OBPOffset(value) => StartAt[MappedConnectorMetric](value) }.headOption
val fromDate = queryParams.collect { case OBPFromDate(date) => By_>=(MappedConnectorMetric.date, date) }.headOption
diff --git a/obp-api/src/main/scala/code/metrics/MappedMetrics.scala b/obp-api/src/main/scala/code/metrics/MappedMetrics.scala
index c62a4dc6e..6ccdefb8a 100644
--- a/obp-api/src/main/scala/code/metrics/MappedMetrics.scala
+++ b/obp-api/src/main/scala/code/metrics/MappedMetrics.scala
@@ -284,7 +284,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
val cacheTTL = determineMetricsCacheTTL(queryParams)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL seconds){
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL.seconds){
val optionalParams = getQueryParams(queryParams)
MappedMetric.findAll(optionalParams: _*)
}
@@ -339,7 +339,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
val cacheTTL = determineMetricsCacheTTL(queryParams)
logger.debug(s"getAllAggregateMetricsBox cache key: $cacheKey, TTL: $cacheTTL seconds")
- CacheKeyFromArguments.buildCacheKey { Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL seconds){
+ CacheKeyFromArguments.buildCacheKey { Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL.seconds){
logger.info(s"getAllAggregateMetricsBox - CACHE MISS - Executing database query for aggregate metrics")
val startTime = System.currentTimeMillis()
val fromDate = queryParams.collect { case OBPFromDate(value) => value }.headOption
@@ -457,7 +457,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{
*/
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
val cacheTTL = determineMetricsCacheTTL(queryParams)
- CacheKeyFromArguments.buildCacheKey {Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL seconds){
+ CacheKeyFromArguments.buildCacheKey {Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL.seconds){
{
val fromDate = queryParams.collect { case OBPFromDate(value) => value }.headOption
val toDate = queryParams.collect { case OBPToDate(value) => value }.headOption
@@ -540,7 +540,7 @@ object MappedMetrics extends APIMetrics with MdcLoggable{
*/
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
val cacheTTL = determineMetricsCacheTTL(queryParams)
- CacheKeyFromArguments.buildCacheKey {Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL seconds){
+ CacheKeyFromArguments.buildCacheKey {Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL.seconds){
val fromDate = queryParams.collect { case OBPFromDate(value) => value }.headOption
val toDate = queryParams.collect { case OBPToDate(value) => value }.headOption
diff --git a/obp-api/src/main/scala/code/model/ModeratedBankingData.scala b/obp-api/src/main/scala/code/model/ModeratedBankingData.scala
index 569b48f99..d1623e060 100644
--- a/obp-api/src/main/scala/code/model/ModeratedBankingData.scala
+++ b/obp-api/src/main/scala/code/model/ModeratedBankingData.scala
@@ -26,6 +26,8 @@ TESOBE (http://www.tesobe.com/)
*/
package code.model
+
+import scala.language.implicitConversions
import code.api.Constant._
import code.api.util.ErrorMessages._
import code.api.util.{APIUtil, CallContext}
@@ -182,6 +184,7 @@ class ModeratedTransactionMetadata(
object ModeratedTransactionMetadata {
+ import scala.language.implicitConversions
@deprecated(Helper.deprecatedJsonGenerationMessage)
implicit def moderatedTransactionMetadata2Json(mTransactionMeta: ModeratedTransactionMetadata) : JObject = {
JObject(JField("blah", JString("test")) :: Nil)
@@ -256,6 +259,7 @@ object ModeratedBankAccount {
("name" -> bankName))
}
+ import scala.language.implicitConversions
@deprecated(Helper.deprecatedJsonGenerationMessage)
implicit def moderatedBankAccount2Json(mBankAccount: ModeratedBankAccount) : JObject = {
val holderName = mBankAccount.owners match{
@@ -318,6 +322,7 @@ case class ModeratedOtherBankAccountCore(
}
object ModeratedOtherBankAccount {
+ import scala.language.implicitConversions
@deprecated(Helper.deprecatedJsonGenerationMessage)
implicit def moderatedOtherBankAccount2Json(mOtherBank: ModeratedOtherBankAccount) : JObject = {
val holderName = mOtherBank.label.display
@@ -353,6 +358,7 @@ class ModeratedOtherBankAccountMetadata(
)
object ModeratedOtherBankAccountMetadata {
+ import scala.language.implicitConversions
@deprecated(Helper.deprecatedJsonGenerationMessage)
implicit def moderatedOtherBankAccountMetadata2Json(mOtherBankMeta: ModeratedOtherBankAccountMetadata) : JObject = {
JObject(JField("blah", JString("test")) :: Nil)
diff --git a/obp-api/src/main/scala/code/model/OAuth.scala b/obp-api/src/main/scala/code/model/OAuth.scala
index c59f63a9c..6a93dceef 100644
--- a/obp-api/src/main/scala/code/model/OAuth.scala
+++ b/obp-api/src/main/scala/code/model/OAuth.scala
@@ -299,7 +299,7 @@ object MappedConsumersProvider extends ConsumersProvider with MdcLoggable {
if(integrateWithHydra && isActive.isDefined) {
val clientId = c.key.get
val existsOAuth2Client = Box.tryo(hydraAdmin.getOAuth2Client(clientId))
- .filter(null !=)
+ .filter(null.!=)
// TODO Involve Hydra ORY version with working update mechanism
if (isActive == Some(false) && existsOAuth2Client.isDefined) {
existsOAuth2Client
@@ -956,7 +956,7 @@ class Token extends LongKeyedMapper[Token]{
}
def generateThirdPartyApplicationSecret: String = {
- if(thirdPartyApplicationSecret.get isEmpty){
+ if(thirdPartyApplicationSecret.get.isEmpty){
def r() = randomInt(9).toString //from zero to 9
val generatedSecret = (1 to 10).map(x => r()).foldLeft("")(_ + _)
thirdPartyApplicationSecret(generatedSecret).save
diff --git a/obp-api/src/main/scala/code/model/View.scala b/obp-api/src/main/scala/code/model/View.scala
index b7d9d4ebd..bbb44d32a 100644
--- a/obp-api/src/main/scala/code/model/View.scala
+++ b/obp-api/src/main/scala/code/model/View.scala
@@ -505,6 +505,7 @@ case class ViewExtended(val view: View) extends MdcLoggable {
None
}
+ import scala.language.implicitConversions
implicit def optionStringToString(x : Option[String]) : String = x.getOrElse("")
val otherAccountNationalIdentifier = if(viewPermissions.exists(_ == CAN_SEE_OTHER_ACCOUNT_NATIONAL_IDENTIFIER)) Some(otherBankAccount.nationalIdentifier) else None
val otherAccountSWIFT_BIC = if(viewPermissions.exists(_ == CAN_SEE_OTHER_ACCOUNT_SWIFT_BIC)) otherBankAccount.otherBankRoutingAddress else None
@@ -607,6 +608,7 @@ case class ViewExtended(val view: View) extends MdcLoggable {
None
}
+ import scala.language.implicitConversions
implicit def optionStringToString(x : Option[String]) : String = x.getOrElse("")
val otherAccountSWIFT_BIC = if(viewPermissions.exists(_ == CAN_SEE_OTHER_ACCOUNT_SWIFT_BIC)) counterpartyCore.otherBankRoutingAddress else None
val otherAccountIBAN = if(viewPermissions.exists(_ == CAN_SEE_OTHER_ACCOUNT_IBAN)) counterpartyCore.otherAccountRoutingAddress else None
diff --git a/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala b/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala
index 0d8a462f9..de1989065 100644
--- a/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala
+++ b/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala
@@ -352,7 +352,7 @@ class AuthUser extends MegaProtoUser[AuthUser] with CreatedUpdated with MdcLogga
}
override def save(): Boolean = {
- if(! (user defined_?)){
+ if(! (user.defined_?)){
logger.info("user reference is null. We will create a ResourceUser")
val resourceUser = createUnsavedResourceUser()
val savedUser = Users.users.vend.saveResourceUser(resourceUser)
diff --git a/obp-api/src/main/scala/code/model/dataAccess/ResourceUser.scala b/obp-api/src/main/scala/code/model/dataAccess/ResourceUser.scala
index 5b0174c21..810d1bc6c 100644
--- a/obp-api/src/main/scala/code/model/dataAccess/ResourceUser.scala
+++ b/obp-api/src/main/scala/code/model/dataAccess/ResourceUser.scala
@@ -139,7 +139,7 @@ object ResourceUser extends ResourceUser with LongKeyedMetaMapper[ResourceUser]{
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
val cacheTTL = APIUtil.getPropsAsIntValue("getDistinctProviders.cache.ttl.seconds", 3600)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL seconds) {
+ Caching.memoizeSyncWithProvider(Some(cacheKey.toString()))(cacheTTL.seconds) {
val sql = "SELECT DISTINCT provider_ FROM resourceuser ORDER BY provider_"
val (_, rows) = DB.runQuery(sql, List())
rows.flatten
diff --git a/obp-api/src/main/scala/code/model/package.scala b/obp-api/src/main/scala/code/model/package.scala
index 2f79aed10..4f2626c13 100644
--- a/obp-api/src/main/scala/code/model/package.scala
+++ b/obp-api/src/main/scala/code/model/package.scala
@@ -1,5 +1,6 @@
package code
+import scala.language.implicitConversions
import code.metadata.comments.Comments
import code.metadata.counterparties.Counterparties
import code.metadata.narrative.Narrative
@@ -16,6 +17,7 @@ import com.openbankproject.commons.model._
* Bank -> Bank + BankEx
*/
package object model {
+ import scala.language.implicitConversions
implicit def toBankExtended(bank: Bank) = BankExtended(bank)
diff --git a/obp-api/src/main/scala/code/obp/grpc/Client.scala b/obp-api/src/main/scala/code/obp/grpc/Client.scala
index 9d81a57bd..c8209f6c1 100644
--- a/obp-api/src/main/scala/code/obp/grpc/Client.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/Client.scala
@@ -1,5 +1,6 @@
package code.obp.grpc
+import scala.language.existentials
import code.obp.grpc.api._
import com.google.protobuf.empty.Empty
import io.grpc.{ManagedChannel, ManagedChannelBuilder}
diff --git a/obp-api/src/main/scala/code/obp/grpc/HelloWorldServer.scala b/obp-api/src/main/scala/code/obp/grpc/HelloWorldServer.scala
index 773b60f60..c77752fc5 100644
--- a/obp-api/src/main/scala/code/obp/grpc/HelloWorldServer.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/HelloWorldServer.scala
@@ -1,5 +1,7 @@
package code.obp.grpc
+import scala.language.existentials
+import scala.language.reflectiveCalls
import code.api.util.newstyle.ViewNewStyle
import code.api.util.{APIUtil, CallContext, NewStyle}
import code.api.v3_0_0.{CoreTransactionsJsonV300, ModeratedTransactionCoreWithAttributes}
diff --git a/obp-api/src/main/scala/code/search/search.scala b/obp-api/src/main/scala/code/search/search.scala
index 5c37eeaa9..e99dddf3d 100644
--- a/obp-api/src/main/scala/code/search/search.scala
+++ b/obp-api/src/main/scala/code/search/search.scala
@@ -185,13 +185,13 @@ class elasticsearch extends MdcLoggable {
}
private def getParameters(queryString: String): Map[String, String] = {
- val res = queryString.split('&') map { str =>
+ val res = queryString.split('&').map { str =>
val pair = str.split('=')
if (pair.length > 1)
(pair(0) -> pair(1))
else
(pair(0) -> "")
- } toMap
+ }.toMap
res
}
diff --git a/obp-api/src/main/scala/code/snippet/GetHtmlFromUrl.scala b/obp-api/src/main/scala/code/snippet/GetHtmlFromUrl.scala
index b1016ffa1..2d4b82f5e 100644
--- a/obp-api/src/main/scala/code/snippet/GetHtmlFromUrl.scala
+++ b/obp-api/src/main/scala/code/snippet/GetHtmlFromUrl.scala
@@ -55,7 +55,7 @@ object GetHtmlFromUrl extends MdcLoggable {
logger.debug("jsVendorSupportHtml: " + jsVendorSupportHtml)
// sleep for up to 5 seconds at development environment
- if (Props.mode == Props.RunModes.Development) Thread.sleep(randomLong(3 seconds))
+ if (Props.mode == Props.RunModes.Development) Thread.sleep(randomLong(3.seconds))
jsVendorSupportHtml
}
diff --git a/obp-api/src/main/scala/code/snippet/WebUI.scala b/obp-api/src/main/scala/code/snippet/WebUI.scala
index 63214fa92..5b0704a02 100644
--- a/obp-api/src/main/scala/code/snippet/WebUI.scala
+++ b/obp-api/src/main/scala/code/snippet/WebUI.scala
@@ -312,11 +312,11 @@ class WebUI extends MdcLoggable{
// External Consumer Registration Link
// This replaces the internal Lift-based consumer registration functionality
// with a link to an external consumer registration service.
- // Uses webui_api_explorer_url + /consumers/register as default.
+ // Uses OBP-Portal (webui_obp_portal_url) for consumer registration by default.
// Configure webui_external_consumer_registration_url to override with a custom URL.
def externalConsumerRegistrationLink: CssSel = {
- val apiExplorerUrl = getWebUiPropsValue("webui_api_explorer_url", "http://localhost:5174")
- val defaultConsumerRegisterUrl = s"$apiExplorerUrl/consumers/register"
+ val portalUrl = getWebUiPropsValue("webui_obp_portal_url", "http://localhost:5174")
+ val defaultConsumerRegisterUrl = s"$portalUrl/consumer-registration"
val externalUrl = getWebUiPropsValue("webui_external_consumer_registration_url", defaultConsumerRegisterUrl)
".get-api-key-link a [href]" #> scala.xml.Unparsed(externalUrl) &
".get-api-key-link a [target]" #> "_blank" &
@@ -641,7 +641,7 @@ class WebUI extends MdcLoggable{
val html = XML.loadString(htmlString)
// Sleep if in development environment so can see the effects of content loading slowly
- if (Props.mode == Props.RunModes.Development) Thread.sleep(10 seconds)
+ if (Props.mode == Props.RunModes.Development) Thread.sleep(10.seconds)
// Return the HTML
html
diff --git a/obp-api/src/main/scala/code/util/AkkaHttpClient.scala b/obp-api/src/main/scala/code/util/AkkaHttpClient.scala
index 946c1a92b..46d229784 100644
--- a/obp-api/src/main/scala/code/util/AkkaHttpClient.scala
+++ b/obp-api/src/main/scala/code/util/AkkaHttpClient.scala
@@ -52,7 +52,7 @@ object AkkaHttpClient extends MdcLoggable with CustomJsonFormats {
private lazy val connectionPoolSettings: ConnectionPoolSettings = {
val systemConfig = ConnectionPoolSettings(system.settings.config)
//Note: get the timeout setting from here: https://github.com/akka/akka-http/issues/742
- val clientSettings = systemConfig.connectionSettings.withIdleTimeout(httpRequestTimeout seconds)
+ val clientSettings = systemConfig.connectionSettings.withIdleTimeout(httpRequestTimeout.seconds)
// reset some settings value
systemConfig.copy(
/*
diff --git a/obp-api/src/main/scala/code/util/Helper.scala b/obp-api/src/main/scala/code/util/Helper.scala
index e2dd61562..51802a0ac 100644
--- a/obp-api/src/main/scala/code/util/Helper.scala
+++ b/obp-api/src/main/scala/code/util/Helper.scala
@@ -89,14 +89,14 @@ object Helper extends Loggable {
*/
def booleanToBox(statement: => Boolean, msg: String): Box[Unit] = {
if(statement)
- Full()
+ Full(())
else
Failure(msg)
}
def booleanToBox(statement: => Boolean): Box[Unit] = {
if(statement)
- Full()
+ Full(())
else
Empty
}
@@ -450,7 +450,7 @@ object Helper extends Loggable {
def getRequiredFieldInfo(tpe: Type): RequiredInfo = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- code.api.cache.Caching.memoizeSyncWithImMemory (Some(cacheKey.toString())) (100000 days) {
+ code.api.cache.Caching.memoizeSyncWithImMemory (Some(cacheKey.toString())) (100000.days) {
RequiredFieldValidation.getRequiredInfo(tpe)
diff --git a/obp-api/src/main/scala/code/validation/MappedJsonSchemaValidationProvider.scala b/obp-api/src/main/scala/code/validation/MappedJsonSchemaValidationProvider.scala
index 53538d152..17f7a663e 100644
--- a/obp-api/src/main/scala/code/validation/MappedJsonSchemaValidationProvider.scala
+++ b/obp-api/src/main/scala/code/validation/MappedJsonSchemaValidationProvider.scala
@@ -20,7 +20,7 @@ object MappedJsonSchemaValidationProvider extends JsonSchemaValidationProvider {
override def getByOperationId(operationId: String): Box[JsonValidation] = {
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getValidationByOperationIdTTL second) {
+ Caching.memoizeSyncWithProvider (Some(cacheKey.toString())) (getValidationByOperationIdTTL.second) {
JsonSchemaValidation.find(By(JsonSchemaValidation.OperationId, operationId))
.map(it => JsonValidation(it.operationId, it.jsonSchema))
}}
diff --git a/obp-api/src/main/scala/code/views/MapperViews.scala b/obp-api/src/main/scala/code/views/MapperViews.scala
index 19e7d1c4e..01cacb7d6 100644
--- a/obp-api/src/main/scala/code/views/MapperViews.scala
+++ b/obp-api/src/main/scala/code/views/MapperViews.scala
@@ -469,7 +469,7 @@ object MapperViews extends Views with MdcLoggable {
viewId
).length > 0 match {
case true => Failure("Account Access record uses this View.") // We want to prevent account access orphans
- case false => Full()
+ case false => Full(())
}
} yield {
customView.deleteViewPermissions
@@ -481,7 +481,7 @@ object MapperViews extends Views with MdcLoggable {
view <- ViewDefinition.findSystemView(viewId.value)
_ <- AccountAccess.findAllBySystemViewId(viewId).length > 0 match {
case true => Failure("Account Access record uses this View.") // We want to prevent account access orphans
- case false => Full()
+ case false => Full(())
}
} yield {
view.deleteViewPermissions
diff --git a/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala b/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala
index cec35e7c0..93b7516be 100644
--- a/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala
+++ b/obp-api/src/main/scala/code/webuiprops/MappedWebUiPropsProvider.scala
@@ -42,7 +42,7 @@ object MappedWebUiPropsProvider extends WebUiPropsProvider {
import scala.concurrent.duration._
var cacheKey = (randomUUID().toString, randomUUID().toString, randomUUID().toString)
CacheKeyFromArguments.buildCacheKey {
- Caching.memoizeSyncWithImMemory(Some(cacheKey.toString()))(webUiPropsTTL second) {
+ Caching.memoizeSyncWithImMemory(Some(cacheKey.toString()))(webUiPropsTTL.second) {
// If we have an active brand, construct a target property name to look for.
val brandSpecificPropertyName = activeBrand() match {
case Some(brand) => s"${requestedPropertyName}_FOR_BRAND_${brand}"
diff --git a/obp-commons/pom.xml b/obp-commons/pom.xml
index eac3d3709..a41f81a4e 100644
--- a/obp-commons/pom.xml
+++ b/obp-commons/pom.xml
@@ -113,8 +113,14 @@
once
.
WDF TestSuite.txt
- -Drun.mode=test -XX:MaxMetaspaceSize=512m -Xms512m -Xmx512m
+
+ -Drun.mode=test -XX:MaxMetaspaceSize=1G -Xms2G -Xmx4G -XX:+UseG1GC -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+UseStringDeduplication
code.external
+ ${maven.test.failure.ignore}
+
+
+
+ false
@@ -125,6 +131,49 @@
+
+ org.apache.maven.plugins
+ maven-surefire-report-plugin
+ 3.5.2
+
+ ${project.build.directory}/surefire-reports
+ ${project.build.directory}/surefire-reports
+
+
+
+ surefire-html-report
+ package
+
+ report-only
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+ 3.1.0
+
+
+ delete-surefire-xml-after-html
+ verify
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
org.apache.maven.plugins
maven-resources-plugin
diff --git a/pom.xml b/pom.xml
index f179b8559..af0637b25 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,7 @@
UTF-8
${project.build.sourceEncoding}
+ false
1.2-m1
scaladocs/
@@ -133,10 +134,14 @@
${scala.compiler}
${project.build.sourceEncoding}
true
+ incremental
+ true
-DpackageLinkDefs=file://${project.build.directory}/packageLinkDefs.properties
- -Xms64m
- -Xmx1024m
+ -Xms512m
+ -Xmx2G
+ -XX:+TieredCompilation
+ -XX:TieredStopAtLevel=1
-unchecked
@@ -146,6 +151,12 @@
-deprecation
-->
-Ypartial-unification
+
+ -language:implicitConversions
+ -language:reflectiveCalls
+ -language:postfixOps
+
+ -Wconf:cat=deprecation&msg=auto-application:s
@@ -155,13 +166,6 @@
testCompile
-
- scala-test-compile
- process-test-resources
-
- testCompile
-
-
diff --git a/run_all_tests.sh b/run_all_tests.sh
index 0169debaf..894429fe6 100755
--- a/run_all_tests.sh
+++ b/run_all_tests.sh
@@ -14,30 +14,66 @@
# Usage:
# ./run_all_tests.sh - Run full test suite
# ./run_all_tests.sh --summary-only - Regenerate summary from existing log
+# ./run_all_tests.sh --timeout=60 - Run with 60 minute timeout
################################################################################
-set -e
+# Don't use set -e globally - it causes issues with grep returning 1 when no match
+# Instead, we handle errors explicitly where needed
################################################################################
# PARSE COMMAND LINE ARGUMENTS
################################################################################
SUMMARY_ONLY=false
-if [ "$1" = "--summary-only" ]; then
- SUMMARY_ONLY=true
-fi
+TIMEOUT_MINUTES=0 # 0 means no timeout
+
+for arg in "$@"; do
+ case $arg in
+ --summary-only)
+ SUMMARY_ONLY=true
+ ;;
+ --timeout=*)
+ TIMEOUT_MINUTES="${arg#*=}"
+ ;;
+ esac
+done
################################################################################
# TERMINAL STYLING FUNCTIONS
################################################################################
-# Set terminal to "test mode" - blue background, special title
+# Set terminal to "test mode" - different colors for different phases
set_terminal_style() {
local phase="${1:-Running}"
- echo -ne "\033]0;OBP-API Tests ${phase}...\007" # Title
- echo -ne "\033]11;#001f3f\007" # Dark blue background
- echo -ne "\033]10;#ffffff\007" # White text
- # Print header bar
+
+ # Set different background colors for different phases
+ case "$phase" in
+ "Starting")
+ echo -ne "\033]11;#4a4a4a\007" # Dark gray background
+ echo -ne "\033]10;#ffffff\007" # White text
+ ;;
+ "Building")
+ echo -ne "\033]11;#ff6b35\007" # Orange background
+ echo -ne "\033]10;#ffffff\007" # White text
+ ;;
+ "Testing")
+ echo -ne "\033]11;#001f3f\007" # Dark blue background
+ echo -ne "\033]10;#ffffff\007" # White text
+ ;;
+ "Complete")
+ echo -ne "\033]11;#2ecc40\007" # Green background
+ echo -ne "\033]10;#ffffff\007" # White text
+ ;;
+ *)
+ echo -ne "\033]11;#001f3f\007" # Default blue background
+ echo -ne "\033]10;#ffffff\007" # White text
+ ;;
+ esac
+
+ # Set window title
+ echo -ne "\033]0;OBP-API Tests ${phase}...\007"
+
+ # Print header bar with phase-specific styling
printf "\033[44m\033[1;37m%-$(tput cols)s\r OBP-API TEST RUNNER ACTIVE - ${phase} \n%-$(tput cols)s\033[0m\n" " " " "
}
@@ -91,8 +127,74 @@ DETAIL_LOG="${LOG_DIR}/last_run.log" # Full Maven output
SUMMARY_LOG="${LOG_DIR}/last_run_summary.log" # Summary only
FAILED_TESTS_FILE="${LOG_DIR}/failed_tests.txt" # Failed test list for run_specific_tests.sh
+# Phase timing variables (stored in temporary file)
+PHASE_START_TIME=0
+
mkdir -p "${LOG_DIR}"
+# Function to get current time in milliseconds
+get_time_ms() {
+ if [[ "$OSTYPE" == "darwin"* ]]; then
+ # macOS
+ python3 -c "import time; print(int(time.time() * 1000))"
+ else
+ # Linux
+ date +%s%3N
+ fi
+}
+
+# Function to record phase timing
+record_phase_time() {
+ local phase="$1"
+ local current_time=$(get_time_ms)
+ local timing_file="${LOG_DIR}/phase_timing.tmp"
+
+ case "$phase" in
+ "starting")
+ echo "PHASE_START_TIME=$current_time" > "$timing_file"
+ ;;
+ "building")
+ if [ -f "$timing_file" ]; then
+ local phase_start=$(grep "PHASE_START_TIME=" "$timing_file" | cut -d= -f2)
+ if [ "$phase_start" -gt 0 ]; then
+ local starting_time=$((current_time - phase_start))
+ echo "STARTING_TIME=$starting_time" >> "$timing_file"
+ fi
+ fi
+ echo "PHASE_START_TIME=$current_time" >> "$timing_file"
+ ;;
+ "testing")
+ if [ -f "$timing_file" ]; then
+ local phase_start=$(grep "PHASE_START_TIME=" "$timing_file" | tail -1 | cut -d= -f2)
+ if [ "$phase_start" -gt 0 ]; then
+ local building_time=$((current_time - phase_start))
+ echo "BUILDING_TIME=$building_time" >> "$timing_file"
+ fi
+ fi
+ echo "PHASE_START_TIME=$current_time" >> "$timing_file"
+ ;;
+ "complete")
+ if [ -f "$timing_file" ]; then
+ local phase_start=$(grep "PHASE_START_TIME=" "$timing_file" | tail -1 | cut -d= -f2)
+ if [ "$phase_start" -gt 0 ]; then
+ local testing_time=$((current_time - phase_start))
+ echo "TESTING_TIME=$testing_time" >> "$timing_file"
+ fi
+ fi
+ echo "PHASE_START_TIME=$current_time" >> "$timing_file"
+ ;;
+ "end")
+ if [ -f "$timing_file" ]; then
+ local phase_start=$(grep "PHASE_START_TIME=" "$timing_file" | tail -1 | cut -d= -f2)
+ if [ "$phase_start" -gt 0 ]; then
+ local complete_time=$((current_time - phase_start))
+ echo "COMPLETE_TIME=$complete_time" >> "$timing_file"
+ fi
+ fi
+ ;;
+ esac
+}
+
# If summary-only mode, skip to summary generation
if [ "$SUMMARY_ONLY" = true ]; then
if [ ! -f "${DETAIL_LOG}" ]; then
@@ -130,16 +232,21 @@ fi
rm -f "${LOG_DIR}/recent_lines.tmp"
echo " - Removed stale temp file"
fi
+ if [ -f "${LOG_DIR}/phase_timing.tmp" ]; then
+ rm -f "${LOG_DIR}/phase_timing.tmp"
+ echo " - Removed stale timing file"
+ fi
fi # End of if [ "$SUMMARY_ONLY" = true ]
################################################################################
# HELPER FUNCTIONS
################################################################################
-# Log message to terminal and summary file
+# Log message to terminal and both log files
log_message() {
echo "$1"
echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" >> "${SUMMARY_LOG}"
+ echo "$1" >> "${DETAIL_LOG}"
}
# Print section header
@@ -231,8 +338,10 @@ generate_summary() {
# If no timing info (summary-only mode), extract from log
if [ $duration -eq 0 ] && grep -q "Total time:" "$detail_log"; then
local time_str=$(grep "Total time:" "$detail_log" | tail -1)
- duration_min=$(echo "$time_str" | grep -oP '\d+(?= min)' || echo "0")
- duration_sec=$(echo "$time_str" | grep -oP '\d+(?=\.\d+ s)' || echo "0")
+ duration_min=$(echo "$time_str" | sed 's/.*: //' | sed 's/ min.*//' | grep -o '[0-9]*' | head -1)
+ [ -z "$duration_min" ] && duration_min="0"
+ duration_sec=$(echo "$time_str" | sed 's/.* min //' | sed 's/\..*//' | grep -o '[0-9]*' | head -1)
+ [ -z "$duration_sec" ] && duration_sec="0"
fi
print_header "Test Results Summary"
@@ -244,22 +353,36 @@ generate_summary() {
# Suites: completed M, aborted 0
# Tests: succeeded N, failed 0, canceled 0, ignored 0, pending 0
# All tests passed.
- # We need to extract the stats from the last test run (in case there are multiple modules)
- SCALATEST_SECTION=$(grep -A 4 "Run completed" "${detail_log}" | tail -5)
- if [ -n "$SCALATEST_SECTION" ]; then
- TOTAL_TESTS=$(echo "$SCALATEST_SECTION" | grep -oP "Total number of tests run: \K\d+" || echo "UNKNOWN")
- SUCCEEDED=$(echo "$SCALATEST_SECTION" | grep -oP "succeeded \K\d+" || echo "UNKNOWN")
- FAILED=$(echo "$SCALATEST_SECTION" | grep -oP "failed \K\d+" || echo "UNKNOWN")
- ERRORS=$(echo "$SCALATEST_SECTION" | grep -oP "errors \K\d+" || echo "0")
- SKIPPED=$(echo "$SCALATEST_SECTION" | grep -oP "ignored \K\d+" || echo "UNKNOWN")
+ # We need to sum stats from ALL test runs (multiple modules: obp-commons, obp-api, etc.)
+
+ # Sum up all "Total number of tests run" values (macOS compatible - no grep -P)
+ TOTAL_TESTS=$(grep "Total number of tests run:" "${detail_log}" 2>/dev/null | sed 's/.*Total number of tests run: //' | awk '{sum+=$1} END {print sum}' || echo "0")
+ [ -z "$TOTAL_TESTS" ] || [ "$TOTAL_TESTS" = "0" ] && TOTAL_TESTS="UNKNOWN"
+
+ # Sum up all succeeded from "Tests: succeeded N, ..." lines
+ SUCCEEDED=$(grep "Tests: succeeded" "${detail_log}" 2>/dev/null | sed 's/.*succeeded //' | sed 's/,.*//' | awk '{sum+=$1} END {print sum}' || echo "0")
+ [ -z "$SUCCEEDED" ] && SUCCEEDED="UNKNOWN"
+
+ # Sum up all failed from "Tests: ... failed N, ..." lines
+ FAILED=$(grep "Tests:.*failed" "${detail_log}" 2>/dev/null | sed 's/.*failed //' | sed 's/,.*//' | awk '{sum+=$1} END {print sum}' || echo "0")
+ [ -z "$FAILED" ] && FAILED="0"
+
+ # Sum up all ignored from "Tests: ... ignored N, ..." lines
+ IGNORED=$(grep "Tests:.*ignored" "${detail_log}" 2>/dev/null | sed 's/.*ignored //' | sed 's/,.*//' | awk '{sum+=$1} END {print sum}' || echo "0")
+ [ -z "$IGNORED" ] && IGNORED="0"
+
+ # Sum up errors (if any)
+ ERRORS=$(grep "errors" "${detail_log}" 2>/dev/null | grep -v "ERROR" | sed 's/.*errors //' | sed 's/[^0-9].*//' | awk '{sum+=$1} END {print sum}' || echo "0")
+ [ -z "$ERRORS" ] && ERRORS="0"
+
+ # Calculate total including ignored (like IntelliJ does)
+ if [ "$TOTAL_TESTS" != "UNKNOWN" ] && [ "$IGNORED" != "0" ]; then
+ TOTAL_WITH_IGNORED=$((TOTAL_TESTS + IGNORED))
else
- TOTAL_TESTS="UNKNOWN"
- SUCCEEDED="UNKNOWN"
- FAILED="UNKNOWN"
- ERRORS="0"
- SKIPPED="UNKNOWN"
+ TOTAL_WITH_IGNORED="$TOTAL_TESTS"
fi
- WARNINGS=$(grep -c "WARNING" "${detail_log}" || echo "UNKNOWN")
+
+ WARNINGS=$(grep -c "WARNING" "${detail_log}" 2>/dev/null || echo "0")
# Determine build status
if grep -q "BUILD SUCCESS" "${detail_log}"; then
@@ -276,16 +399,153 @@ generate_summary() {
# Print summary
log_message "Test Run Summary"
log_message "================"
- log_message "Timestamp: $(date)"
- log_message "Duration: ${duration_min}m ${duration_sec}s"
+
+ # Extract Maven timestamps and calculate Terminal timestamps
+ local maven_start_timestamp=""
+ local maven_end_timestamp=""
+ local terminal_start_timestamp=""
+ local terminal_end_timestamp=$(date)
+
+ if [ "$start_time" -gt 0 ] && [ "$end_time" -gt 0 ]; then
+ # Use actual terminal start/end times if available
+ terminal_start_timestamp=$(date -r "$start_time" 2>/dev/null || date -d "@$start_time" 2>/dev/null || echo "Unknown")
+ terminal_end_timestamp=$(date -r "$end_time" 2>/dev/null || date -d "@$end_time" 2>/dev/null || echo "Unknown")
+ else
+ # Calculate terminal start time by subtracting duration from current time
+ if [ "$duration_min" -gt 0 -o "$duration_sec" -gt 0 ]; then
+ local total_seconds=$((duration_min * 60 + duration_sec))
+ local approx_start_epoch=$(($(date "+%s") - total_seconds))
+ terminal_start_timestamp=$(date -r "$approx_start_epoch" 2>/dev/null || echo "Approx. ${duration_min}m ${duration_sec}s ago")
+ else
+ terminal_start_timestamp="Unknown"
+ fi
+ fi
+
+ # Extract Maven timestamps from log
+ maven_end_timestamp=$(grep "Finished at:" "${detail_log}" | tail -1 | sed 's/.*Finished at: //' | sed 's/T/ /' | sed 's/+.*//' || echo "Unknown")
+
+ # Calculate Maven start time from Maven's "Total time" if available
+ local maven_total_time=$(grep "Total time:" "${detail_log}" | tail -1 | sed 's/.*Total time: *//' | sed 's/ .*//' || echo "")
+ if [ -n "$maven_total_time" ] && [ "$maven_end_timestamp" != "Unknown" ]; then
+ # Parse Maven duration (e.g., "02:06" for "02:06 min" or "43.653" for "43.653 s")
+ local maven_seconds=0
+ if echo "$maven_total_time" | grep -q ":"; then
+ # Format like "02:06" (minutes:seconds)
+ local maven_min=$(echo "$maven_total_time" | sed 's/:.*//')
+ local maven_sec=$(echo "$maven_total_time" | sed 's/.*://')
+ # Remove leading zeros to avoid octal interpretation
+ maven_min=$(echo "$maven_min" | sed 's/^0*//' | sed 's/^$/0/')
+ maven_sec=$(echo "$maven_sec" | sed 's/^0*//' | sed 's/^$/0/')
+ maven_seconds=$((maven_min * 60 + maven_sec))
+ else
+ # Format like "43.653" (seconds)
+ maven_seconds=$(echo "$maven_total_time" | sed 's/\..*//')
+ fi
+
+ # Calculate Maven start time
+ if [ "$maven_seconds" -gt 0 ]; then
+ local maven_end_epoch=$(date -j -f "%Y-%m-%d %H:%M:%S" "$maven_end_timestamp" "+%s" 2>/dev/null || echo "0")
+ if [ "$maven_end_epoch" -gt 0 ]; then
+ local maven_start_epoch=$((maven_end_epoch - maven_seconds))
+ maven_start_timestamp=$(date -r "$maven_start_epoch" 2>/dev/null || echo "Unknown")
+ else
+ maven_start_timestamp="Unknown"
+ fi
+ else
+ maven_start_timestamp="Unknown"
+ fi
+ else
+ maven_start_timestamp="Unknown"
+ fi
+
+ # Format Maven end timestamp nicely
+ if [ "$maven_end_timestamp" != "Unknown" ]; then
+ maven_end_timestamp=$(date -j -f "%Y-%m-%d %H:%M:%S" "$maven_end_timestamp" "+%a %b %d %H:%M:%S %Z %Y" 2>/dev/null || echo "$maven_end_timestamp")
+ fi
+
+ # Display both timelines
+ log_message "Terminal Timeline:"
+ log_message " Started: ${terminal_start_timestamp}"
+ log_message " Completed: ${terminal_end_timestamp}"
+ log_message " Duration: ${duration_min}m ${duration_sec}s"
+ log_message ""
+ log_message "Maven Timeline:"
+ log_message " Started: ${maven_start_timestamp}"
+ log_message " Completed: ${maven_end_timestamp}"
+ if [ -n "$maven_total_time" ]; then
+ local maven_duration_display=$(grep "Total time:" "${detail_log}" | tail -1 | sed 's/.*Total time: *//' || echo "Unknown")
+ log_message " Duration: ${maven_duration_display}"
+ fi
+ log_message ""
log_message "Build Status: ${BUILD_STATUS}"
log_message ""
+
+ # Phase timing breakdown (if available)
+ local timing_file="${LOG_DIR}/phase_timing.tmp"
+ if [ -f "$timing_file" ]; then
+ # Read timing values from file
+ local start_ms=$(grep "STARTING_TIME=" "$timing_file" | cut -d= -f2 2>/dev/null || echo "0")
+ local build_ms=$(grep "BUILDING_TIME=" "$timing_file" | cut -d= -f2 2>/dev/null || echo "0")
+ local test_ms=$(grep "TESTING_TIME=" "$timing_file" | cut -d= -f2 2>/dev/null || echo "0")
+ local complete_ms=$(grep "COMPLETE_TIME=" "$timing_file" | cut -d= -f2 2>/dev/null || echo "0")
+
+ # Ensure we have numeric values (default to 0 if empty)
+ [ -z "$start_ms" ] && start_ms=0
+ [ -z "$build_ms" ] && build_ms=0
+ [ -z "$test_ms" ] && test_ms=0
+ [ -z "$complete_ms" ] && complete_ms=0
+
+ # Clean up timing file
+ rm -f "$timing_file"
+
+ if [ "$start_ms" -gt 0 ] 2>/dev/null || [ "$build_ms" -gt 0 ] 2>/dev/null || [ "$test_ms" -gt 0 ] 2>/dev/null || [ "$complete_ms" -gt 0 ] 2>/dev/null; then
+ log_message "Phase Timing Breakdown:"
+
+ if [ "$start_ms" -gt 0 ] 2>/dev/null; then
+ log_message " Starting: ${start_ms}ms ($(printf "%.2f" $(echo "scale=2; $start_ms/1000" | bc))s)"
+ fi
+ if [ "$build_ms" -gt 0 ] 2>/dev/null; then
+ log_message " Building: ${build_ms}ms ($(printf "%.2f" $(echo "scale=2; $build_ms/1000" | bc))s)"
+ fi
+ if [ "$test_ms" -gt 0 ] 2>/dev/null; then
+ log_message " Testing: ${test_ms}ms ($(printf "%.2f" $(echo "scale=2; $test_ms/1000" | bc))s)"
+ fi
+ if [ "$complete_ms" -gt 0 ] 2>/dev/null; then
+ log_message " Complete: ${complete_ms}ms ($(printf "%.2f" $(echo "scale=2; $complete_ms/1000" | bc))s)"
+ fi
+
+ # Calculate percentages
+ local total_phase_time=$((start_ms + build_ms + test_ms + complete_ms))
+ if [ "$total_phase_time" -gt 0 ]; then
+ log_message ""
+ log_message "Phase Distribution:"
+ if [ "$start_ms" -gt 0 ] 2>/dev/null; then
+ local starting_pct=$(echo "scale=1; $start_ms * 100 / $total_phase_time" | bc)
+ log_message " Starting: ${starting_pct}%"
+ fi
+ if [ "$build_ms" -gt 0 ] 2>/dev/null; then
+ local building_pct=$(echo "scale=1; $build_ms * 100 / $total_phase_time" | bc)
+ log_message " Building: ${building_pct}%"
+ fi
+ if [ "$test_ms" -gt 0 ] 2>/dev/null; then
+ local testing_pct=$(echo "scale=1; $test_ms * 100 / $total_phase_time" | bc)
+ log_message " Testing: ${testing_pct}%"
+ fi
+ if [ "$complete_ms" -gt 0 ] 2>/dev/null; then
+ local complete_pct=$(echo "scale=1; $complete_ms * 100 / $total_phase_time" | bc)
+ log_message " Complete: ${complete_pct}%"
+ fi
+ fi
+ log_message ""
+ fi
+ fi
+
log_message "Test Statistics:"
- log_message " Total: ${TOTAL_TESTS}"
+ log_message " Total: ${TOTAL_WITH_IGNORED} (${TOTAL_TESTS} run + ${IGNORED} ignored)"
log_message " Succeeded: ${SUCCEEDED}"
log_message " Failed: ${FAILED}"
+ log_message " Ignored: ${IGNORED}"
log_message " Errors: ${ERRORS}"
- log_message " Skipped: ${SKIPPED}"
log_message " Warnings: ${WARNINGS}"
log_message ""
@@ -320,7 +580,7 @@ generate_summary() {
# Extract test class names from failures
grep -B 20 "\*\*\* FAILED \*\*\*" "${detail_log}" | \
- grep -oP "^[A-Z][a-zA-Z0-9_]+(?=:)" | \
+ grep -E "^[A-Z][a-zA-Z0-9_]+:" | sed 's/:$//' | \
sort -u | \
while read test_class; do
# Try to find package by searching for the class in test files
@@ -375,6 +635,8 @@ fi
# START TEST RUN
################################################################################
+# Record starting phase
+record_phase_time "starting"
set_terminal_style "Starting"
# Start the test run
@@ -414,24 +676,67 @@ fi
################################################################################
print_header "Checking Test Server Ports"
-log_message "Checking if test server port 8018 is available..."
-# Check if port 8018 is in use
-if lsof -i :8018 >/dev/null 2>&1; then
- log_message "[WARNING] Port 8018 is in use - attempting to kill process"
- # Try to kill the process using the port
- PORT_PID=$(lsof -t -i :8018 2>/dev/null)
+# Default test port (can be overridden)
+TEST_PORT=8018
+MAX_PORT_ATTEMPTS=5
+
+log_message "Checking if test server port ${TEST_PORT} is available..."
+
+# Function to find an available port
+find_available_port() {
+ local port=$1
+ local max_attempts=$2
+ local attempt=0
+
+ while [ $attempt -lt $max_attempts ]; do
+ if ! lsof -i :$port >/dev/null 2>&1; then
+ echo $port
+ return 0
+ fi
+ port=$((port + 1))
+ attempt=$((attempt + 1))
+ done
+
+ echo ""
+ return 1
+}
+
+# Check if port is in use
+if lsof -i :${TEST_PORT} >/dev/null 2>&1; then
+ log_message "[WARNING] Port ${TEST_PORT} is in use - attempting to kill process"
+ PORT_PID=$(lsof -t -i :${TEST_PORT} 2>/dev/null || true)
if [ -n "$PORT_PID" ]; then
kill -9 $PORT_PID 2>/dev/null || true
sleep 2
- log_message "[OK] Killed process $PORT_PID using port 8018"
+
+ # Verify port is now free
+ if lsof -i :${TEST_PORT} >/dev/null 2>&1; then
+ log_message "[WARNING] Could not free port ${TEST_PORT}, searching for alternative..."
+ NEW_PORT=$(find_available_port $((TEST_PORT + 1)) $MAX_PORT_ATTEMPTS)
+ if [ -n "$NEW_PORT" ]; then
+ log_message "[OK] Found available port: ${NEW_PORT}"
+ # Update test.default.props with new port
+ if [ -f "${PROPS_FILE}" ]; then
+ sed -i.bak "s/hostname=127.0.0.1:${TEST_PORT}/hostname=127.0.0.1:${NEW_PORT}/" "${PROPS_FILE}" 2>/dev/null || \
+ sed -i '' "s/hostname=127.0.0.1:${TEST_PORT}/hostname=127.0.0.1:${NEW_PORT}/" "${PROPS_FILE}"
+ log_message "[OK] Updated test.default.props to use port ${NEW_PORT}"
+ TEST_PORT=$NEW_PORT
+ fi
+ else
+ log_message "[ERROR] No available ports found in range ${TEST_PORT}-$((TEST_PORT + MAX_PORT_ATTEMPTS))"
+ exit 1
+ fi
+ else
+ log_message "[OK] Killed process $PORT_PID, port ${TEST_PORT} is now available"
+ fi
fi
else
- log_message "[OK] Port 8018 is available"
+ log_message "[OK] Port ${TEST_PORT} is available"
fi
# Also check for any stale Java test processes
-STALE_TEST_PROCS=$(ps aux | grep -E "TestServer|ScalaTest.*obp-api" | grep -v grep | awk '{print $2}' || true)
+STALE_TEST_PROCS=$(ps aux | grep -E "TestServer|ScalaTest.*obp-api" | grep -v grep | awk '{print $2}' 2>/dev/null || true)
if [ -n "$STALE_TEST_PROCS" ]; then
log_message "[WARNING] Found stale test processes - cleaning up"
echo "$STALE_TEST_PROCS" | xargs kill -9 2>/dev/null || true
@@ -481,7 +786,6 @@ log_message ""
################################################################################
print_header "Running Tests"
-update_terminal_title "Building"
log_message "Executing: mvn clean test"
echo ""
@@ -492,6 +796,13 @@ export START_TIME
MONITOR_FLAG="${LOG_DIR}/monitor.flag"
touch "${MONITOR_FLAG}"
+# Optional timeout handling
+MAVEN_PID=""
+if [ "$TIMEOUT_MINUTES" -gt 0 ] 2>/dev/null; then
+ log_message "[INFO] Test timeout set to ${TIMEOUT_MINUTES} minutes"
+ TIMEOUT_SECONDS=$((TIMEOUT_MINUTES * 60))
+fi
+
# Background process: Monitor log file and update title bar with progress
(
# Wait for log file to be created and have Maven output
@@ -500,35 +811,50 @@ touch "${MONITOR_FLAG}"
done
phase="Building"
+ in_building=false
in_testing=false
+ timing_file="${LOG_DIR}/phase_timing.tmp"
# Keep monitoring until flag file is removed
while [ -f "${MONITOR_FLAG}" ]; do
# Use tail to look at recent lines only (last 500 lines for performance)
- # This ensures O(1) performance regardless of log file size
- recent_lines=$(tail -n 500 "${DETAIL_LOG}" 2>/dev/null)
+ recent_lines=$(tail -n 500 "${DETAIL_LOG}" 2>/dev/null || true)
+
+ # Switch to "Building" phase when Maven starts compiling
+ if ! $in_building && echo "$recent_lines" | grep -q -E 'Compiling|Building.*Open Bank Project' 2>/dev/null; then
+ phase="Building"
+ in_building=true
+ # Record building phase and update terminal (inline to avoid subshell issues)
+ current_time=$(python3 -c "import time; print(int(time.time() * 1000))" 2>/dev/null || date +%s000)
+ if [ -f "$timing_file" ]; then
+ phase_start=$(grep "PHASE_START_TIME=" "$timing_file" 2>/dev/null | tail -1 | cut -d= -f2 || echo "0")
+ [ -n "$phase_start" ] && [ "$phase_start" -gt 0 ] 2>/dev/null && echo "STARTING_TIME=$((current_time - phase_start))" >> "$timing_file"
+ fi
+ echo "PHASE_START_TIME=$current_time" >> "$timing_file"
+ echo -ne "\033]11;#ff6b35\007\033]10;#ffffff\007" # Orange background
+ fi
# Switch to "Testing" phase when tests start
if ! $in_testing && echo "$recent_lines" | grep -q "Run starting" 2>/dev/null; then
phase="Testing"
in_testing=true
+ # Record testing phase
+ current_time=$(python3 -c "import time; print(int(time.time() * 1000))" 2>/dev/null || date +%s000)
+ if [ -f "$timing_file" ]; then
+ phase_start=$(grep "PHASE_START_TIME=" "$timing_file" 2>/dev/null | tail -1 | cut -d= -f2 || echo "0")
+ [ -n "$phase_start" ] && [ "$phase_start" -gt 0 ] 2>/dev/null && echo "BUILDING_TIME=$((current_time - phase_start))" >> "$timing_file"
+ fi
+ echo "PHASE_START_TIME=$current_time" >> "$timing_file"
+ echo -ne "\033]11;#001f3f\007\033]10;#ffffff\007" # Blue background
fi
# Extract current running test suite and scenario from recent lines
suite=""
scenario=""
if $in_testing; then
- # Find the most recent test suite name (pattern like "SomeTest:")
- # Pipe directly to avoid temp file I/O
- suite=$(echo "$recent_lines" | grep -E "Test:" | tail -1 | sed 's/\x1b\[[0-9;]*m//g' | sed 's/:$//' | tr -d '\n\r')
-
- # Find the most recent scenario name (pattern like " Scenario: ..." or "- Scenario: ...")
- scenario=$(echo "$recent_lines" | grep -i "scenario:" | tail -1 | sed 's/\x1b\[[0-9;]*m//g' | sed 's/^[[:space:]]*-*[[:space:]]*//' | sed -E 's/^[Ss]cenario:[[:space:]]*//' | tr -d '\n\r')
-
- # Truncate scenario if too long (max 50 chars)
- if [ -n "$scenario" ] && [ ${#scenario} -gt 50 ]; then
- scenario="${scenario:0:47}..."
- fi
+ suite=$(echo "$recent_lines" | grep -E "Test:" 2>/dev/null | tail -1 | sed 's/\x1b\[[0-9;]*m//g' | sed 's/:$//' | tr -d '\n\r' || true)
+ scenario=$(echo "$recent_lines" | grep -i "scenario:" 2>/dev/null | tail -1 | sed 's/\x1b\[[0-9;]*m//g' | sed 's/^[[:space:]]*-*[[:space:]]*//' | sed -E 's/^[Ss]cenario:[[:space:]]*//' | tr -d '\n\r' || true)
+ [ -n "$scenario" ] && [ ${#scenario} -gt 50 ] && scenario="${scenario:0:47}..."
fi
# Calculate elapsed time
@@ -537,23 +863,102 @@ touch "${MONITOR_FLAG}"
seconds=$((duration % 60))
elapsed=$(printf "%dm %ds" $minutes $seconds)
- # Update title: "Testing: DynamicEntityTest - Scenario name [5m 23s]"
- update_terminal_title "$phase" "$elapsed" "" "$suite" "$scenario"
+ # Update title
+ title="OBP-API ${phase}"
+ [ -n "$suite" ] && title="${title}: ${suite}"
+ [ -n "$scenario" ] && title="${title} - ${scenario}"
+ title="${title}... [${elapsed}]"
+ echo -ne "\033]0;${title}\007"
sleep 5
done
) &
MONITOR_PID=$!
-# Run Maven (all output goes to terminal AND log file)
-if mvn clean test 2>&1 | tee "${DETAIL_LOG}"; then
- TEST_RESULT="SUCCESS"
- RESULT_COLOR=""
+# Run Maven with optional timeout
+if [ "$TIMEOUT_MINUTES" -gt 0 ] 2>/dev/null; then
+ # Run Maven in background and monitor for timeout
+ mvn clean test 2>&1 | tee "${DETAIL_LOG}" &
+ MAVEN_PID=$!
+
+ elapsed=0
+ while kill -0 $MAVEN_PID 2>/dev/null; do
+ sleep 10
+ elapsed=$((elapsed + 10))
+ if [ $elapsed -ge $TIMEOUT_SECONDS ]; then
+ log_message ""
+ log_message "[TIMEOUT] Test execution exceeded ${TIMEOUT_MINUTES} minutes - terminating"
+ kill -9 $MAVEN_PID 2>/dev/null || true
+ # Also kill any child Java processes
+ pkill -9 -P $MAVEN_PID 2>/dev/null || true
+ TEST_RESULT="TIMEOUT"
+ break
+ fi
+ done
+
+ if [ "$TEST_RESULT" != "TIMEOUT" ]; then
+ wait $MAVEN_PID
+ if [ $? -eq 0 ]; then
+ TEST_RESULT="SUCCESS"
+ else
+ TEST_RESULT="FAILURE"
+ fi
+ fi
else
- TEST_RESULT="FAILURE"
- RESULT_COLOR=""
+ # Run Maven normally (all output goes to terminal AND log file)
+ if mvn clean test 2>&1 | tee "${DETAIL_LOG}"; then
+ TEST_RESULT="SUCCESS"
+ else
+ TEST_RESULT="FAILURE"
+ fi
fi
+################################################################################
+# GENERATE HTML REPORT
+################################################################################
+
+print_header "Generating HTML Report"
+log_message "Running: mvn surefire-report:report-only -DskipTests"
+
+# Generate HTML report from surefire XML files (without re-running tests)
+if mvn surefire-report:report-only -DskipTests 2>&1 | tee -a "${DETAIL_LOG}"; then
+ log_message "[OK] HTML report generated"
+
+ # Copy HTML reports to test-results directory for easy access
+ HTML_REPORT_DIR="${LOG_DIR}/html-reports"
+ mkdir -p "${HTML_REPORT_DIR}"
+
+ # Copy reports from both modules
+ if [ -f "obp-api/target/surefire-reports/surefire.html" ]; then
+ cp "obp-api/target/surefire-reports/surefire.html" "${HTML_REPORT_DIR}/obp-api-report.html"
+ # Also copy CSS, JS, images for proper rendering
+ cp -r "obp-api/target/surefire-reports/css" "${HTML_REPORT_DIR}/" 2>/dev/null || true
+ cp -r "obp-api/target/surefire-reports/js" "${HTML_REPORT_DIR}/" 2>/dev/null || true
+ cp -r "obp-api/target/surefire-reports/images" "${HTML_REPORT_DIR}/" 2>/dev/null || true
+ cp -r "obp-api/target/surefire-reports/fonts" "${HTML_REPORT_DIR}/" 2>/dev/null || true
+ cp -r "obp-api/target/surefire-reports/img" "${HTML_REPORT_DIR}/" 2>/dev/null || true
+ log_message " - obp-api report: ${HTML_REPORT_DIR}/obp-api-report.html"
+ fi
+ if [ -f "obp-commons/target/surefire-reports/surefire.html" ]; then
+ cp "obp-commons/target/surefire-reports/surefire.html" "${HTML_REPORT_DIR}/obp-commons-report.html"
+ log_message " - obp-commons report: ${HTML_REPORT_DIR}/obp-commons-report.html"
+ fi
+
+ # Also check for site reports location (alternative naming)
+ if [ -f "obp-api/target/site/surefire-report.html" ]; then
+ cp "obp-api/target/site/surefire-report.html" "${HTML_REPORT_DIR}/obp-api-report.html"
+ log_message " - obp-api report: ${HTML_REPORT_DIR}/obp-api-report.html"
+ fi
+ if [ -f "obp-commons/target/site/surefire-report.html" ]; then
+ cp "obp-commons/target/site/surefire-report.html" "${HTML_REPORT_DIR}/obp-commons-report.html"
+ log_message " - obp-commons report: ${HTML_REPORT_DIR}/obp-commons-report.html"
+ fi
+else
+ log_message "[WARNING] Failed to generate HTML report"
+fi
+
+log_message ""
+
# Stop background monitor by removing flag file
rm -f "${MONITOR_FLAG}"
sleep 1
@@ -568,11 +973,15 @@ DURATION_SEC=$((DURATION % 60))
# Update title with final results (no suite/scenario name for Complete phase)
FINAL_ELAPSED=$(printf "%dm %ds" $DURATION_MIN $DURATION_SEC)
# Build final counts with module context
-FINAL_COMMONS=$(sed -n '/Building Open Bank Project Commons/,/Building Open Bank Project API/{/Tests: succeeded/p;}' "${DETAIL_LOG}" 2>/dev/null | grep -oP "succeeded \K\d+" | head -1)
-FINAL_API=$(sed -n '/Building Open Bank Project API/,/OBP Http4s Runner/{/Tests: succeeded/p;}' "${DETAIL_LOG}" 2>/dev/null | grep -oP "succeeded \K\d+" | tail -1)
+FINAL_COMMONS=$(sed -n '/Building Open Bank Project Commons/,/Building Open Bank Project API/{/Tests: succeeded/p;}' "${DETAIL_LOG}" 2>/dev/null | sed 's/.*succeeded //' | sed 's/,.*//' | head -1)
+FINAL_API=$(sed -n '/Building Open Bank Project API/,/OBP Http4s Runner/{/Tests: succeeded/p;}' "${DETAIL_LOG}" 2>/dev/null | sed 's/.*succeeded //' | sed 's/,.*//' | tail -1)
FINAL_COUNTS=""
[ -n "$FINAL_COMMONS" ] && FINAL_COUNTS="commons:+${FINAL_COMMONS}"
[ -n "$FINAL_API" ] && FINAL_COUNTS="${FINAL_COUNTS:+${FINAL_COUNTS} }api:+${FINAL_API}"
+
+# Record complete phase start and change to green for completion phase
+record_phase_time "complete"
+set_terminal_style "Complete"
update_terminal_title "Complete" "$FINAL_ELAPSED" "$FINAL_COUNTS" "" ""
################################################################################
@@ -585,6 +994,9 @@ else
EXIT_CODE=1
fi
+# Record end time for complete phase
+record_phase_time "end"
+
log_message ""
log_message "Logs saved to:"
log_message " ${DETAIL_LOG}"
@@ -592,6 +1004,13 @@ log_message " ${SUMMARY_LOG}"
if [ -f "${FAILED_TESTS_FILE}" ]; then
log_message " ${FAILED_TESTS_FILE}"
fi
+if [ -d "${LOG_DIR}/html-reports" ]; then
+ log_message ""
+ log_message "HTML Reports:"
+ for report in "${LOG_DIR}/html-reports"/*.html; do
+ [ -f "$report" ] && log_message " $report"
+ done
+fi
echo ""
exit ${EXIT_CODE}