Compare commits
93 commits
Author | SHA1 | Date | |
---|---|---|---|
4cf733f2e0 | |||
69c09b38c8 | |||
01bd8f0e5e | |||
015ffc41a9 | |||
811cc349ef | |||
2f488e0670 | |||
5ff50a9635 | |||
1f2cc4b05a | |||
68455c65a8 | |||
ffcc764133 | |||
6fa9b23a99 | |||
babb8145b9 | |||
ff9716514e | |||
2daa09cfde | |||
52e73ce137 | |||
bb82c8d043 | |||
15e8b6129d | |||
7cf442b65f | |||
7b3f0c4389 | |||
36e99650e1 | |||
3b34ef1c67 | |||
c158d595a9 | |||
552132ec05 | |||
2efb1ec4f8 | |||
bb5c3348ea | |||
3f6bae2b49 | |||
9bc298643a | |||
b98d342f5b | |||
4334faf044 | |||
efe5cf1e22 | |||
d2d2b225cb | |||
b6a3bdd9fa | |||
b80e078903 | |||
d449192dae | |||
f2d02491ee | |||
e4a357b745 | |||
d2e57e413b | |||
debea7a86c | |||
e0ebbe8c02 | |||
80af944f35 | |||
715d6b173e | |||
105ab75b3a | |||
31e09c76b2 | |||
8dfa709ca8 | |||
7562823671 | |||
8562c61910 | |||
05d59f136a | |||
8c606c4c3c | |||
66eb4b91ec | |||
ec02ad9bc3 | |||
4d18ae0fd8 | |||
22f5cd98f2 | |||
32c173f7a6 | |||
3e9a386578 | |||
592005798f | |||
5a3607d866 | |||
3ae3142dbf | |||
97b0086002 | |||
1715fdec6a | |||
58cf377d9f | |||
9b7d54a288 | |||
b562756ced | |||
8a8efac2e7 | |||
4274fd2d73 | |||
03d6766a4a | |||
9c26dffc6d | |||
9ff271e2a3 | |||
469977f079 | |||
2804fde899 | |||
8078904ded | |||
4dd3a66fbb | |||
a4caed576a | |||
62451c7396 | |||
95a7552826 | |||
fa360dd569 | |||
d84e02cbc6 | |||
ee9d43fd39 | |||
4b4c1ca439 | |||
f21c1cdb16 | |||
27ffd8efb1 | |||
5ce7cb6724 | |||
893c192dc9 | |||
4ffbe941f2 | |||
0116346899 | |||
8ab95b1bd2 | |||
00a3e423c1 | |||
667dd806cd | |||
a1a151764d | |||
ec7b794e50 | |||
3a74fb5ddc | |||
3100279338 | |||
1e9ab13c97 | |||
58a53fe280 |
27 changed files with 528 additions and 235 deletions
4
.github/project.yaml
vendored
4
.github/project.yaml
vendored
|
@ -1,5 +1,5 @@
|
|||
name: Quarkus Commons
|
||||
release:
|
||||
current-version: "1.0.8"
|
||||
next-version: "1.0.9-SNAPSHOT"
|
||||
current-version: "1.1.2"
|
||||
next-version: "1.1.3-SNAPSHOT"
|
||||
|
||||
|
|
18
.github/workflows/build.yaml
vendored
18
.github/workflows/build.yaml
vendored
|
@ -25,12 +25,12 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v4
|
||||
uses: https://github.com/actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: https://github.com/actions/setup-java@v4
|
||||
uses: https://github.com/actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
|
@ -48,7 +48,7 @@ jobs:
|
|||
|
||||
- name: Cache Maven Repository
|
||||
id: cache-maven
|
||||
uses: actions/cache@v4
|
||||
uses: https://github.com/actions/cache@v4
|
||||
with:
|
||||
path: ~/.m2/repository
|
||||
# The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
|
||||
|
@ -58,19 +58,13 @@ jobs:
|
|||
${{ steps.cache-key.outputs.m2-monthly-cache-key }}
|
||||
|
||||
- name: Configure Maven CI/CD settings
|
||||
uses: https://github.com/s4u/maven-settings-action@v3.1.0
|
||||
uses: https://github.com/s4u/maven-settings-action@v4.0.0
|
||||
with:
|
||||
servers: |
|
||||
[{
|
||||
"id": "phoenix-oss",
|
||||
"configuration": {
|
||||
"httpHeaders": {
|
||||
"property": {
|
||||
"name": "Authorization",
|
||||
"value": "token ${{ secrets.ORG_PACKAGE_WRITER_TOKEN }}"
|
||||
}
|
||||
}
|
||||
}
|
||||
"username": "${{ vars.ORG_PACKAGE_WRITER_USERNAME }}",
|
||||
"password": "${{ secrets.ORG_PACKAGE_WRITER_TOKEN }}"
|
||||
}]
|
||||
|
||||
- name: Make maven wrapper executable
|
||||
|
|
6
.github/workflows/release.yaml
vendored
6
.github/workflows/release.yaml
vendored
|
@ -17,7 +17,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: actions/checkout@v4
|
||||
uses: https://github.com/actions/checkout@v5
|
||||
|
||||
- name: Retrieve project metadata
|
||||
uses: https://github.com/radcortez/project-metadata-action@main
|
||||
|
@ -60,7 +60,7 @@ jobs:
|
|||
git config --global user.signingkey ${SSH_DIR}/id_rsa
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: https://github.com/actions/setup-java@v4
|
||||
uses: https://github.com/actions/setup-java@v5
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '21'
|
||||
|
@ -78,7 +78,7 @@ jobs:
|
|||
|
||||
- name: Cache Maven Repository
|
||||
id: cache-maven
|
||||
uses: actions/cache@v4
|
||||
uses: https://github.com/actions/cache@v4
|
||||
with:
|
||||
path: ~/.m2/repository
|
||||
# The cache is per branch but in case we don't find a branch for a given branch, we will get a cache from another branch.
|
||||
|
|
2
.github/workflows/validate-versions.yaml
vendored
2
.github/workflows/validate-versions.yaml
vendored
|
@ -11,7 +11,7 @@ jobs:
|
|||
|
||||
steps:
|
||||
- name: Checkout the code
|
||||
uses: https://github.com/actions/checkout@v4
|
||||
uses: https://github.com/actions/checkout@v5
|
||||
|
||||
- name: Retrieve project metadata
|
||||
uses: https://github.com/radcortez/project-metadata-action@main
|
||||
|
|
19
.mvn/wrapper/maven-wrapper.properties
vendored
19
.mvn/wrapper/maven-wrapper.properties
vendored
|
@ -1,19 +1,2 @@
|
|||
# Licensed to the Apache Software Foundation (ASF) under one
|
||||
# or more contributor license agreements. See the NOTICE file
|
||||
# distributed with this work for additional information
|
||||
# regarding copyright ownership. The ASF licenses this file
|
||||
# to you under the Apache License, Version 2.0 (the
|
||||
# "License"); you may not use this file except in compliance
|
||||
# with the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing,
|
||||
# software distributed under the License is distributed on an
|
||||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
# KIND, either express or implied. See the License for the
|
||||
# specific language governing permissions and limitations
|
||||
# under the License.
|
||||
wrapperVersion=3.3.2
|
||||
distributionType=only-script
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
|
||||
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.11/apache-maven-3.9.11-bin.zip
|
||||
|
|
14
README.md
14
README.md
|
@ -2,12 +2,12 @@ Quarkus Commons
|
|||
===============
|
||||
|
||||
[](https://openjdk.org/projects/jdk/21/)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
[](https://sonarqube.pub.basel.kvant.cloud/dashboard?id=quarkus-commons)
|
||||
|
||||
# Introduction
|
||||
|
||||
|
@ -17,10 +17,12 @@ that can be used by Quarkus applications.
|
|||
The modules are:
|
||||
|
||||
* `quarkus-audit-tools`
|
||||
* `quarkus-client-logger`
|
||||
* `quarkus-clock-service`
|
||||
* `quarkus-json-service`
|
||||
* `quarkus-message-digest-service`
|
||||
* `quarkus-random-number-generator`
|
||||
* `quarkus-table-generator`
|
||||
* `quarkus-tracing-service`
|
||||
* `quarkus-uuid-generator`
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
* @jorge.bornhausen
|
||||
* @jorge.bornhausen @pawel.derehajlo @roque.caballero @michal.tumilowicz
|
50
mvnw
vendored
50
mvnw
vendored
|
@ -19,7 +19,7 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# Apache Maven Wrapper startup batch script, version 3.3.2
|
||||
# Apache Maven Wrapper startup batch script, version 3.3.3
|
||||
#
|
||||
# Optional ENV vars
|
||||
# -----------------
|
||||
|
@ -105,14 +105,17 @@ trim() {
|
|||
printf "%s" "${1}" | tr -d '[:space:]'
|
||||
}
|
||||
|
||||
scriptDir="$(dirname "$0")"
|
||||
scriptName="$(basename "$0")"
|
||||
|
||||
# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
|
||||
while IFS="=" read -r key value; do
|
||||
case "${key-}" in
|
||||
distributionUrl) distributionUrl=$(trim "${value-}") ;;
|
||||
distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
|
||||
esac
|
||||
done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
|
||||
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
|
||||
done <"$scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||
[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||
|
||||
case "${distributionUrl##*/}" in
|
||||
maven-mvnd-*bin.*)
|
||||
|
@ -130,7 +133,7 @@ maven-mvnd-*bin.*)
|
|||
distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
|
||||
;;
|
||||
maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
|
||||
*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
|
||||
*) MVN_CMD="mvn${scriptName#mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
|
||||
esac
|
||||
|
||||
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||
|
@ -227,7 +230,7 @@ if [ -n "${distributionSha256Sum-}" ]; then
|
|||
echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
|
||||
exit 1
|
||||
elif command -v sha256sum >/dev/null; then
|
||||
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
|
||||
if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c - >/dev/null 2>&1; then
|
||||
distributionSha256Result=true
|
||||
fi
|
||||
elif command -v shasum >/dev/null; then
|
||||
|
@ -252,8 +255,41 @@ if command -v unzip >/dev/null; then
|
|||
else
|
||||
tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
|
||||
fi
|
||||
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
|
||||
mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
|
||||
|
||||
# Find the actual extracted directory name (handles snapshots where filename != directory name)
|
||||
actualDistributionDir=""
|
||||
|
||||
# First try the expected directory name (for regular distributions)
|
||||
if [ -d "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" ]; then
|
||||
if [ -f "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/bin/$MVN_CMD" ]; then
|
||||
actualDistributionDir="$distributionUrlNameMain"
|
||||
fi
|
||||
fi
|
||||
|
||||
# If not found, search for any directory with the Maven executable (for snapshots)
|
||||
if [ -z "$actualDistributionDir" ]; then
|
||||
# enable globbing to iterate over items
|
||||
set +f
|
||||
for dir in "$TMP_DOWNLOAD_DIR"/*; do
|
||||
if [ -d "$dir" ]; then
|
||||
if [ -f "$dir/bin/$MVN_CMD" ]; then
|
||||
actualDistributionDir="$(basename "$dir")"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
set -f
|
||||
fi
|
||||
|
||||
if [ -z "$actualDistributionDir" ]; then
|
||||
verbose "Contents of $TMP_DOWNLOAD_DIR:"
|
||||
verbose "$(ls -la "$TMP_DOWNLOAD_DIR")"
|
||||
die "Could not find Maven distribution directory in extracted archive"
|
||||
fi
|
||||
|
||||
verbose "Found extracted Maven distribution directory: $actualDistributionDir"
|
||||
printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$actualDistributionDir/mvnw.url"
|
||||
mv -- "$TMP_DOWNLOAD_DIR/$actualDistributionDir" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
|
||||
|
||||
clean || :
|
||||
exec_maven "$@"
|
||||
|
|
338
mvnw.cmd
vendored
338
mvnw.cmd
vendored
|
@ -1,149 +1,189 @@
|
|||
<# : batch portion
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Apache Maven Wrapper startup batch script, version 3.3.2
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM MVNW_REPOURL - repo url base for downloading maven distribution
|
||||
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
|
||||
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
|
||||
@SET __MVNW_CMD__=
|
||||
@SET __MVNW_ERROR__=
|
||||
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
|
||||
@SET PSModulePath=
|
||||
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
|
||||
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
|
||||
)
|
||||
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
|
||||
@SET __MVNW_PSMODULEP_SAVE=
|
||||
@SET __MVNW_ARG0_NAME__=
|
||||
@SET MVNW_USERNAME=
|
||||
@SET MVNW_PASSWORD=
|
||||
@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
|
||||
@echo Cannot start maven from wrapper >&2 && exit /b 1
|
||||
@GOTO :EOF
|
||||
: end batch / begin powershell #>
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
if ($env:MVNW_VERBOSE -eq "true") {
|
||||
$VerbosePreference = "Continue"
|
||||
}
|
||||
|
||||
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
|
||||
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
|
||||
if (!$distributionUrl) {
|
||||
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||
}
|
||||
|
||||
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
|
||||
"maven-mvnd-*" {
|
||||
$USE_MVND = $true
|
||||
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
|
||||
$MVN_CMD = "mvnd.cmd"
|
||||
break
|
||||
}
|
||||
default {
|
||||
$USE_MVND = $false
|
||||
$MVN_CMD = $script -replace '^mvnw','mvn'
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
|
||||
if ($env:MVNW_REPOURL) {
|
||||
$MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
|
||||
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
|
||||
}
|
||||
$distributionUrlName = $distributionUrl -replace '^.*/',''
|
||||
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
|
||||
$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
|
||||
if ($env:MAVEN_USER_HOME) {
|
||||
$MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
|
||||
}
|
||||
$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
|
||||
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
|
||||
|
||||
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
|
||||
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
|
||||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||
exit $?
|
||||
}
|
||||
|
||||
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
|
||||
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
|
||||
}
|
||||
|
||||
# prepare tmp dir
|
||||
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
|
||||
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
|
||||
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
|
||||
trap {
|
||||
if ($TMP_DOWNLOAD_DIR.Exists) {
|
||||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||
}
|
||||
}
|
||||
|
||||
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
|
||||
|
||||
# Download and Install Apache Maven
|
||||
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
|
||||
Write-Verbose "Downloading from: $distributionUrl"
|
||||
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||
|
||||
$webclient = New-Object System.Net.WebClient
|
||||
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
|
||||
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
|
||||
}
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
|
||||
|
||||
# If specified, validate the SHA-256 sum of the Maven distribution zip file
|
||||
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
|
||||
if ($distributionSha256Sum) {
|
||||
if ($USE_MVND) {
|
||||
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
|
||||
}
|
||||
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
|
||||
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
|
||||
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
|
||||
}
|
||||
}
|
||||
|
||||
# unzip and move
|
||||
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
|
||||
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
|
||||
try {
|
||||
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
|
||||
} catch {
|
||||
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
|
||||
Write-Error "fail to move MAVEN_HOME"
|
||||
}
|
||||
} finally {
|
||||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||
}
|
||||
|
||||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||
<# : batch portion
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Licensed to the Apache Software Foundation (ASF) under one
|
||||
@REM or more contributor license agreements. See the NOTICE file
|
||||
@REM distributed with this work for additional information
|
||||
@REM regarding copyright ownership. The ASF licenses this file
|
||||
@REM to you under the Apache License, Version 2.0 (the
|
||||
@REM "License"); you may not use this file except in compliance
|
||||
@REM with the License. You may obtain a copy of the License at
|
||||
@REM
|
||||
@REM http://www.apache.org/licenses/LICENSE-2.0
|
||||
@REM
|
||||
@REM Unless required by applicable law or agreed to in writing,
|
||||
@REM software distributed under the License is distributed on an
|
||||
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
@REM KIND, either express or implied. See the License for the
|
||||
@REM specific language governing permissions and limitations
|
||||
@REM under the License.
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@REM ----------------------------------------------------------------------------
|
||||
@REM Apache Maven Wrapper startup batch script, version 3.3.3
|
||||
@REM
|
||||
@REM Optional ENV vars
|
||||
@REM MVNW_REPOURL - repo url base for downloading maven distribution
|
||||
@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
|
||||
@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
|
||||
@REM ----------------------------------------------------------------------------
|
||||
|
||||
@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
|
||||
@SET __MVNW_CMD__=
|
||||
@SET __MVNW_ERROR__=
|
||||
@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
|
||||
@SET PSModulePath=
|
||||
@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
|
||||
IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
|
||||
)
|
||||
@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
|
||||
@SET __MVNW_PSMODULEP_SAVE=
|
||||
@SET __MVNW_ARG0_NAME__=
|
||||
@SET MVNW_USERNAME=
|
||||
@SET MVNW_PASSWORD=
|
||||
@IF NOT "%__MVNW_CMD__%"=="" ("%__MVNW_CMD__%" %*)
|
||||
@echo Cannot start maven from wrapper >&2 && exit /b 1
|
||||
@GOTO :EOF
|
||||
: end batch / begin powershell #>
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
if ($env:MVNW_VERBOSE -eq "true") {
|
||||
$VerbosePreference = "Continue"
|
||||
}
|
||||
|
||||
# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
|
||||
$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
|
||||
if (!$distributionUrl) {
|
||||
Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
|
||||
}
|
||||
|
||||
switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
|
||||
"maven-mvnd-*" {
|
||||
$USE_MVND = $true
|
||||
$distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
|
||||
$MVN_CMD = "mvnd.cmd"
|
||||
break
|
||||
}
|
||||
default {
|
||||
$USE_MVND = $false
|
||||
$MVN_CMD = $script -replace '^mvnw','mvn'
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
# apply MVNW_REPOURL and calculate MAVEN_HOME
|
||||
# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-<version>,maven-mvnd-<version>-<platform>}/<hash>
|
||||
if ($env:MVNW_REPOURL) {
|
||||
$MVNW_REPO_PATTERN = if ($USE_MVND -eq $False) { "/org/apache/maven/" } else { "/maven/mvnd/" }
|
||||
$distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace "^.*$MVNW_REPO_PATTERN",'')"
|
||||
}
|
||||
$distributionUrlName = $distributionUrl -replace '^.*/',''
|
||||
$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
|
||||
|
||||
$MAVEN_M2_PATH = "$HOME/.m2"
|
||||
if ($env:MAVEN_USER_HOME) {
|
||||
$MAVEN_M2_PATH = "$env:MAVEN_USER_HOME"
|
||||
}
|
||||
|
||||
if (-not (Test-Path -Path $MAVEN_M2_PATH)) {
|
||||
New-Item -Path $MAVEN_M2_PATH -ItemType Directory | Out-Null
|
||||
}
|
||||
|
||||
$MAVEN_WRAPPER_DISTS = $null
|
||||
if ((Get-Item $MAVEN_M2_PATH).Target[0] -eq $null) {
|
||||
$MAVEN_WRAPPER_DISTS = "$MAVEN_M2_PATH/wrapper/dists"
|
||||
} else {
|
||||
$MAVEN_WRAPPER_DISTS = (Get-Item $MAVEN_M2_PATH).Target[0] + "/wrapper/dists"
|
||||
}
|
||||
|
||||
$MAVEN_HOME_PARENT = "$MAVEN_WRAPPER_DISTS/$distributionUrlNameMain"
|
||||
$MAVEN_HOME_NAME = ([System.Security.Cryptography.SHA256]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
|
||||
$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
|
||||
|
||||
if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
|
||||
Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
|
||||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||
exit $?
|
||||
}
|
||||
|
||||
if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
|
||||
Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
|
||||
}
|
||||
|
||||
# prepare tmp dir
|
||||
$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
|
||||
$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
|
||||
$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
|
||||
trap {
|
||||
if ($TMP_DOWNLOAD_DIR.Exists) {
|
||||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||
}
|
||||
}
|
||||
|
||||
New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
|
||||
|
||||
# Download and Install Apache Maven
|
||||
Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
|
||||
Write-Verbose "Downloading from: $distributionUrl"
|
||||
Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
|
||||
|
||||
$webclient = New-Object System.Net.WebClient
|
||||
if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
|
||||
$webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
|
||||
}
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
|
||||
|
||||
# If specified, validate the SHA-256 sum of the Maven distribution zip file
|
||||
$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
|
||||
if ($distributionSha256Sum) {
|
||||
if ($USE_MVND) {
|
||||
Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
|
||||
}
|
||||
Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
|
||||
if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
|
||||
Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
|
||||
}
|
||||
}
|
||||
|
||||
# unzip and move
|
||||
Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
|
||||
|
||||
# Find the actual extracted directory name (handles snapshots where filename != directory name)
|
||||
$actualDistributionDir = ""
|
||||
|
||||
# First try the expected directory name (for regular distributions)
|
||||
$expectedPath = Join-Path "$TMP_DOWNLOAD_DIR" "$distributionUrlNameMain"
|
||||
$expectedMvnPath = Join-Path "$expectedPath" "bin/$MVN_CMD"
|
||||
if ((Test-Path -Path $expectedPath -PathType Container) -and (Test-Path -Path $expectedMvnPath -PathType Leaf)) {
|
||||
$actualDistributionDir = $distributionUrlNameMain
|
||||
}
|
||||
|
||||
# If not found, search for any directory with the Maven executable (for snapshots)
|
||||
if (!$actualDistributionDir) {
|
||||
Get-ChildItem -Path "$TMP_DOWNLOAD_DIR" -Directory | ForEach-Object {
|
||||
$testPath = Join-Path $_.FullName "bin/$MVN_CMD"
|
||||
if (Test-Path -Path $testPath -PathType Leaf) {
|
||||
$actualDistributionDir = $_.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$actualDistributionDir) {
|
||||
Write-Error "Could not find Maven distribution directory in extracted archive"
|
||||
}
|
||||
|
||||
Write-Verbose "Found extracted Maven distribution directory: $actualDistributionDir"
|
||||
Rename-Item -Path "$TMP_DOWNLOAD_DIR/$actualDistributionDir" -NewName $MAVEN_HOME_NAME | Out-Null
|
||||
try {
|
||||
Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
|
||||
} catch {
|
||||
if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
|
||||
Write-Error "fail to move MAVEN_HOME"
|
||||
}
|
||||
} finally {
|
||||
try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
|
||||
catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
|
||||
}
|
||||
|
||||
Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
|
||||
|
|
21
pom.xml
21
pom.xml
|
@ -3,7 +3,7 @@
|
|||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<modules>
|
||||
|
@ -13,6 +13,7 @@
|
|||
<module>quarkus-json-service</module>
|
||||
<module>quarkus-message-digest-service</module>
|
||||
<module>quarkus-random-number-generator</module>
|
||||
<module>quarkus-table-generator</module>
|
||||
<module>quarkus-tracing-service</module>
|
||||
<module>quarkus-uuid-generator</module>
|
||||
</modules>
|
||||
|
@ -21,15 +22,15 @@
|
|||
<!-- Quarkus properties -->
|
||||
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
|
||||
<quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
|
||||
<quarkus.platform.version>3.25.0</quarkus.platform.version>
|
||||
<quarkus.platform.version>3.28.4</quarkus.platform.version>
|
||||
|
||||
<!-- Plugin versions -->
|
||||
<compiler-plugin.version>3.14.0</compiler-plugin.version>
|
||||
<surefire-plugin.version>3.5.3</surefire-plugin.version>
|
||||
<spotless-plugin.version>2.46.1</spotless-plugin.version>
|
||||
<compiler-plugin.version>3.14.1</compiler-plugin.version>
|
||||
<surefire-plugin.version>3.5.4</surefire-plugin.version>
|
||||
<spotless-plugin.version>3.0.0</spotless-plugin.version>
|
||||
<palantir-java-format.version>2.72.0</palantir-java-format.version>
|
||||
<jacoco-plugin.version>0.8.13</jacoco-plugin.version> <!-- Match with version from Quarkus BOM -->
|
||||
<jandex-plugin.version>3.4.0</jandex-plugin.version>
|
||||
<jacoco-plugin.version>0.8.14</jacoco-plugin.version> <!-- Match with version from Quarkus BOM -->
|
||||
<jandex-plugin.version>3.5.0</jandex-plugin.version>
|
||||
<release-plugin.version>3.1.1</release-plugin.version>
|
||||
<source-plugin.version>3.3.1</source-plugin.version>
|
||||
|
||||
|
@ -40,10 +41,10 @@
|
|||
<skipITs>true</skipITs>
|
||||
|
||||
<!-- Dependencies -->
|
||||
<java-uuid-generator.version>5.1.0</java-uuid-generator.version>
|
||||
<java-uuid-generator.version>5.1.1</java-uuid-generator.version>
|
||||
|
||||
<!-- Test dependencies -->
|
||||
<assertj-core.version>3.27.3</assertj-core.version>
|
||||
<assertj-core.version>3.27.6</assertj-core.version>
|
||||
</properties>
|
||||
|
||||
<distributionManagement>
|
||||
|
@ -73,7 +74,7 @@
|
|||
<connection>scm:git:ssh://git@git-ssh.kvant.cloud:2222/phoenix-oss/quarkus-commons.git</connection>
|
||||
<developerConnection>scm:git:ssh://git@git-ssh.kvant.cloud:2222/phoenix-oss/quarkus-commons.git</developerConnection>
|
||||
<url>https://git.kvant.cloud/phoenix-oss/quarkus-commons.git</url>
|
||||
<tag>1.0.8</tag>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
|
||||
<dependencies>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-audit-tools</artifactId>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-client-logger</artifactId>
|
||||
|
|
|
@ -6,7 +6,7 @@ import jakarta.ws.rs.core.HttpHeaders;
|
|||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@ConfigMapping(prefix = "phoenix.client-logger")
|
||||
@ConfigMapping(prefix = "phoenix-oss.client-logger")
|
||||
public interface RedactingClientLoggerConfiguration {
|
||||
|
||||
Headers headers();
|
||||
|
|
|
@ -12,7 +12,7 @@ quarkus:
|
|||
"ch.phoenix.oss.quarkus.commons.client.logger":
|
||||
level: DEBUG
|
||||
|
||||
phoenix:
|
||||
phoenix-oss:
|
||||
client-logger:
|
||||
headers:
|
||||
redact:
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-clock-service</artifactId>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-json-service</artifactId>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-message-digest-service</artifactId>
|
||||
|
|
|
@ -3,7 +3,7 @@ package ch.phoenix.oss.quarkus.commons.digest;
|
|||
import io.smallrye.config.ConfigMapping;
|
||||
import io.smallrye.config.WithDefault;
|
||||
|
||||
@ConfigMapping(prefix = "phoenix.message-digest")
|
||||
@ConfigMapping(prefix = "phoenix-oss.message-digest")
|
||||
public interface MessageDigestConfiguration {
|
||||
|
||||
@WithDefault("SHA-256")
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-random-number-generator</artifactId>
|
||||
|
|
47
quarkus-table-generator/pom.xml
Normal file
47
quarkus-table-generator/pom.xml
Normal file
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-table-generator</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.jacoco</groupId>
|
||||
<artifactId>jacoco-maven-plugin</artifactId>
|
||||
<version>${jacoco-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>jacoco-check</id>
|
||||
<goals>
|
||||
<goal>check</goal>
|
||||
</goals>
|
||||
<phase>test</phase>
|
||||
<configuration>
|
||||
<dataFile>${project.build.directory}/jacoco-quarkus.exec</dataFile>
|
||||
<rules>
|
||||
<rule>
|
||||
<element>BUNDLE</element>
|
||||
<limits>
|
||||
<limit>
|
||||
<counter>INSTRUCTION</counter>
|
||||
<value>COVEREDRATIO</value>
|
||||
<minimum>1</minimum>
|
||||
</limit>
|
||||
</limits>
|
||||
</rule>
|
||||
</rules>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,20 @@
|
|||
package ch.phoenix.oss.quarkus.commons.table;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface TableGenerator {
|
||||
|
||||
/**
|
||||
* Generates a Jira-style table from a list of records.
|
||||
* Refer to <a href="https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all">notation</a>
|
||||
*
|
||||
* @param records List of records to generate the table from
|
||||
* @param headers Optional custom headers, list must match record field order and count.
|
||||
* If null, field names are used as headers.
|
||||
* @return String representing the records as a table in Jira notation
|
||||
* @throws IllegalArgumentException If records are null or empty, if the type is not a Record.
|
||||
* Also throws if custom headers are provided but the size does not match the record's field count
|
||||
* @throws IllegalStateException if an error occurs while invoking a record's accessor
|
||||
*/
|
||||
String generateJiraTable(List<?> records, List<String> headers);
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
package ch.phoenix.oss.quarkus.commons.table;
|
||||
|
||||
import jakarta.enterprise.context.ApplicationScoped;
|
||||
import java.lang.reflect.RecordComponent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@ApplicationScoped
|
||||
class TableGeneratorImpl implements TableGenerator {
|
||||
|
||||
@Override
|
||||
public String generateJiraTable(List<?> records, List<String> headers) {
|
||||
if (records == null || records.isEmpty()) {
|
||||
throw new IllegalArgumentException("Records can't be null or empty");
|
||||
}
|
||||
|
||||
Class<?> recordClass = records.getFirst().getClass();
|
||||
if (!recordClass.isRecord()) {
|
||||
throw new IllegalArgumentException("Only records are supported at the moment");
|
||||
}
|
||||
|
||||
var components = recordClass.getRecordComponents();
|
||||
var columns = components.length;
|
||||
|
||||
List<String> headerRow;
|
||||
if (headers == null) {
|
||||
headerRow = Arrays.stream(components).map(RecordComponent::getName).toList();
|
||||
} else if (headers.size() == columns) {
|
||||
headerRow = headers;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Custom header count [%s] does not match actual number of columns [%s]"
|
||||
.formatted(headers.size(), columns));
|
||||
}
|
||||
|
||||
var dataRows = new ArrayList<List<String>>();
|
||||
for (var record : records) {
|
||||
var row = new ArrayList<String>(columns);
|
||||
for (var component : components) {
|
||||
try {
|
||||
var val = component.getAccessor().invoke(record);
|
||||
row.add(val == null ? "" : val.toString());
|
||||
} catch (Exception e) {
|
||||
throw new IllegalStateException(
|
||||
"Unable to invoke accessor for component [%s] of class [%s]"
|
||||
.formatted(component.getName(), recordClass.getName()),
|
||||
e);
|
||||
}
|
||||
}
|
||||
dataRows.add(row);
|
||||
}
|
||||
|
||||
var sb = new StringBuilder("||");
|
||||
headerRow.forEach(header -> sb.append(" ").append(header).append(" ||"));
|
||||
sb.append("\n");
|
||||
for (var row : dataRows) {
|
||||
sb.append("|");
|
||||
for (String cell : row) {
|
||||
sb.append(" ").append(cell).append(" |");
|
||||
}
|
||||
sb.append("\n");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
package ch.phoenix.oss.quarkus.commons.table;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.junit.jupiter.params.provider.Arguments.arguments;
|
||||
|
||||
import io.quarkus.test.junit.QuarkusTest;
|
||||
import jakarta.inject.Inject;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
@QuarkusTest
|
||||
class TableGeneratorImplTest {
|
||||
|
||||
@Inject
|
||||
TableGenerator tableGenerator;
|
||||
|
||||
public record TestDto(String what, Instant instant, Double number) {}
|
||||
|
||||
static Stream<Arguments> generateJiraTable() {
|
||||
var dtos = List.of(
|
||||
new TestDto("What", Instant.ofEpochMilli(123).truncatedTo(ChronoUnit.MILLIS), 2.0d),
|
||||
new TestDto("SupDog", Instant.ofEpochMilli(124313425).truncatedTo(ChronoUnit.MILLIS), null),
|
||||
new TestDto(null, null, 214534.134d),
|
||||
new TestDto(null, null, null));
|
||||
return Stream.of(
|
||||
arguments(
|
||||
dtos,
|
||||
List.of("What", "Instant", "SomeNumber"),
|
||||
"""
|
||||
|| What || Instant || SomeNumber ||
|
||||
| What | 1970-01-01T00:00:00.123Z | 2.0 |
|
||||
| SupDog | 1970-01-02T10:31:53.425Z | |
|
||||
| | | 214534.134 |
|
||||
| | | |
|
||||
"""),
|
||||
arguments(
|
||||
dtos,
|
||||
null,
|
||||
"""
|
||||
|| what || instant || number ||
|
||||
| What | 1970-01-01T00:00:00.123Z | 2.0 |
|
||||
| SupDog | 1970-01-02T10:31:53.425Z | |
|
||||
| | | 214534.134 |
|
||||
| | | |
|
||||
"""));
|
||||
}
|
||||
|
||||
@MethodSource
|
||||
@ParameterizedTest
|
||||
void generateJiraTable(List<TestDto> testDtos, List<String> headers, String expected) {
|
||||
var actual = tableGenerator.generateJiraTable(testDtos, headers);
|
||||
assertThat(actual).as("Generated table should match expected value").isEqualTo(expected);
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateJiraTableWhenRecordsIsNull() {
|
||||
assertThatThrownBy(() -> tableGenerator.generateJiraTable(null, null))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Records can't be null or empty");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateJiraTableWhenRecordsIsEmpty() {
|
||||
assertThatThrownBy(() -> tableGenerator.generateJiraTable(List.of(), null))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Records can't be null or empty");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateJiraTableWhenNotRecord() {
|
||||
var notARecord = List.of("just a string");
|
||||
assertThatThrownBy(() -> tableGenerator.generateJiraTable(notARecord, null))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Only records are supported");
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateJiraTableWhenCustomHeaderWrongSize() {
|
||||
var dtos = List.of(new TestDto("foo", Instant.now(), 1.2d));
|
||||
assertThatThrownBy(() -> tableGenerator.generateJiraTable(dtos, List.of("One", "Two")))
|
||||
.isInstanceOf(IllegalArgumentException.class)
|
||||
.hasMessageContaining("Custom header count [2] does not match actual number of columns [3]");
|
||||
}
|
||||
|
||||
public record EvilRecord(String value) {
|
||||
@Override
|
||||
public String value() {
|
||||
throw new RuntimeException("Accessor failure!");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void generateJiraTableWhenAccessorThrows() {
|
||||
var list = List.of(new EvilRecord("hi"));
|
||||
assertThatThrownBy(() -> tableGenerator.generateJiraTable(list, null))
|
||||
.isInstanceOf(IllegalStateException.class)
|
||||
.hasMessageContaining("Unable to invoke accessor");
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-tracing-service</artifactId>
|
||||
|
|
|
@ -7,7 +7,7 @@ import jakarta.ws.rs.core.HttpHeaders;
|
|||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@ConfigMapping(prefix = "phoenix.commons.tracing")
|
||||
@ConfigMapping(prefix = "phoenix-oss.tracing")
|
||||
public interface TracingConfiguration {
|
||||
|
||||
RequestFilterConfiguration requestFilter();
|
||||
|
|
|
@ -23,17 +23,16 @@ quarkus:
|
|||
category:
|
||||
"ch.phoenix.oss.quarkus.commons.tracing":
|
||||
level: TRACE
|
||||
phoenix:
|
||||
commons:
|
||||
tracing:
|
||||
request-filter:
|
||||
path:
|
||||
include-raw: true
|
||||
headers:
|
||||
redact:
|
||||
- AUTHORIZATION
|
||||
- X-SOMETHING-ELSE
|
||||
query:
|
||||
include-raw: true
|
||||
redact:
|
||||
- ACCESS_TOKEN
|
||||
phoenix-oss:
|
||||
tracing:
|
||||
request-filter:
|
||||
path:
|
||||
include-raw: true
|
||||
headers:
|
||||
redact:
|
||||
- AUTHORIZATION
|
||||
- X-SOMETHING-ELSE
|
||||
query:
|
||||
include-raw: true
|
||||
redact:
|
||||
- ACCESS_TOKEN
|
|
@ -5,7 +5,7 @@
|
|||
<parent>
|
||||
<groupId>ch.phoenix.oss</groupId>
|
||||
<artifactId>quarkus-commons</artifactId>
|
||||
<version>1.0.8</version>
|
||||
<version>1.1.3-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>quarkus-uuid-generator</artifactId>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue