diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index ba5b292..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,19 +0,0 @@
-# .editorconfig
-# http://editorconfig.org
-
-root = true
-
-[*]
-charset = utf-8
-indent_size = 2
-end_of_line = lf
-indent_style = space
-max_line_length = 120
-trim_trailing_whitespace = true
-
-[*.md]
-max_line_length = 80
-trim_trailing_whitespace = false
-
-[Makefile]
-indent_style = tab
diff --git a/.github/workflows/broken_links_checker.yml b/.github/workflows/broken_links_checker.yml
index 6a69306..c268e21 100644
--- a/.github/workflows/broken_links_checker.yml
+++ b/.github/workflows/broken_links_checker.yml
@@ -4,13 +4,21 @@ on:
schedule:
- cron: "0 5 * * *"
push:
+ branches:
+ - main
+ pull_request:
jobs:
linkChecker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
+ - name: Configure broken links checker
+ run: |
+ mkdir -p ./target
+ echo '{ "aliveStatusCodes": [429, 200] }' > ./target/broken_links_checker.json
- uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
use-quiet-mode: 'yes'
- use-verbose-mode: 'yes'
\ No newline at end of file
+ use-verbose-mode: 'yes'
+ config-file: ./target/broken_links_checker.json
\ No newline at end of file
diff --git a/.github/workflows/ci-build-next-java.yml b/.github/workflows/ci-build-next-java.yml
new file mode 100644
index 0000000..2abe7cb
--- /dev/null
+++ b/.github/workflows/ci-build-next-java.yml
@@ -0,0 +1,37 @@
+name: CI Build next Java
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+jobs:
+ java-17-compatibility:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Set up JDK 17
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'temurin'
+ java-version: 17
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Run tests and build with Maven
+ run: |
+ mvn --batch-mode --update-snapshots clean package -DtrimStackTrace=false \
+ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+ - name: Publish Test Report
+ uses: scacap/action-surefire-report@v1
+ if: ${{ always() && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' }}
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml
index ad822f5..b669a0a 100644
--- a/.github/workflows/ci-build.yml
+++ b/.github/workflows/ci-build.yml
@@ -1,72 +1,71 @@
name: CI Build
on:
- - push
+ push:
+ branches:
+ - main
+ pull_request:
jobs:
build:
- name: Building with Scala ${{ matrix.scala }}
+ name: Building with Scala ${{ matrix.scala-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
- scala: [ 2.12.15, 2.13.6 ]
-
+ include:
+ - { scala-version: 'scala2.12', project-keeper-skip: true }
+ - { scala-version: 'scala2.13', project-keeper-skip: false }
steps:
- - name: Checkout the Repository
+ - name: Checkout the repository
uses: actions/checkout@v2
with:
fetch-depth: 0
-
- - name: Setup Java and Scala with JDK 11
- uses: olafurpg/setup-scala@v10
+ - name: Set up JDK 11
+ uses: actions/setup-java@v2
with:
+ distribution: 'temurin'
java-version: 11
-
- - name: Cache Local SBT Dependencies
+ - name: Cache local Maven repository
uses: actions/cache@v2
with:
- path: |
- ~/.sbt
- ~/.ivy2/cache
- ~/.coursier/cache/v1
- ~/.cache/coursier/v1
- key: ${{ runner.os }}-sbt-cache-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
- ${{ runner.os }}-sbt-cache-
-
- - name: Check Formatting
- run: sbt ++${{ matrix.scala }} scalafmtSbtCheck scalafmtCheckAll
-
- - name: Run CI
- run: ./scripts/ci.sh
- env:
- SCALA_VERSION: ${{ matrix.scala }}
-
- - name: Upload Coverage Results to Coveralls
- run: sbt ++${{ matrix.scala }} coveralls
- env:
- COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- # This required because of the sonarcloud-github-action docker volume mapping.
- - name: Prepare for Sonar Cloud Scan
- if: startsWith(matrix.scala, '2.13')
+ ${{ runner.os }}-maven-
+ - name: Cache SonarCloud packages
+ uses: actions/cache@v2
+ with:
+ path: ~/.sonar/cache
+ key: ${{ runner.os }}-sonar
+ restore-keys: ${{ runner.os }}-sonar
+ - name: Run scalafix linting
run: |
- find . -name scoverage.xml -exec sed -i \
- 's#/home/runner/work/import-export-udf-common-scala/import-export-udf-common-scala#/github/workspace#g' {} +
-
- - name: Sonar Cloud Scan
- if: startsWith(matrix.scala, '2.13')
- uses: sonarsource/sonarcloud-github-action@master
+ mvn --batch-mode clean compile test scalafix:scalafix \
+ -P${{ matrix.scala-version }} \
+ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
+ -DtrimStackTrace=false
+ - name: Run tests and build with Maven
+ run: |
+ mvn --batch-mode verify \
+ -P${{ matrix.scala-version }} \
+ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
+ -DtrimStackTrace=false \
+ -Dproject-keeper.skip=${{ matrix.project-keeper-skip }}
+ - name: Publish Test Report
+ uses: scacap/action-surefire-report@v1
+ if: ${{ always() && github.event.pull_request.head.repo.full_name == github.repository && github.actor != 'dependabot[bot]' && startsWith(matrix.scala-version, 'scala2.13') }}
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Sonar analysis
+ if: ${{ env.SONAR_TOKEN != null && startsWith(matrix.scala-version, 'scala2.13') }}
+ run: |
+ mvn --batch-mode scoverage:report sonar:sonar \
+ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
+ -DtrimStackTrace=false \
+ -Dsonar.organization=exasol \
+ -Dsonar.host.url=https://sonarcloud.io \
+ -Dsonar.login=$SONAR_TOKEN
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
-
- - name: Cleanup
- run: |
- rm -rf "$HOME/.ivy2/local" || true
- find $HOME/Library/Caches/Coursier/v1 -name "ivydata-*.properties" -delete || true
- find $HOME/.ivy2/cache -name "ivydata-*.properties" -delete || true
- find $HOME/.cache/coursier/v1 -name "ivydata-*.properties" -delete || true
- find $HOME/.coursier/cache -name "*.lock" -delete || true
- find $HOME/.sbt -name "*.lock" -delete || true
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
\ No newline at end of file
diff --git a/.github/workflows/dependencies_check.yml b/.github/workflows/dependencies_check.yml
new file mode 100644
index 0000000..d28c0b4
--- /dev/null
+++ b/.github/workflows/dependencies_check.yml
@@ -0,0 +1,26 @@
+name: Dependencies Check
+
+on:
+ schedule:
+ - cron: "0 2 * * *"
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Set up JDK 11
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'temurin'
+ java-version: 11
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Checking dependencies for vulnerabilities
+ run: mvn org.sonatype.ossindex.maven:ossindex-maven-plugin:audit -f pom.xml
\ No newline at end of file
diff --git a/.github/workflows/release_droid_prepare_original_checksum.yml b/.github/workflows/release_droid_prepare_original_checksum.yml
new file mode 100644
index 0000000..1ce35e5
--- /dev/null
+++ b/.github/workflows/release_droid_prepare_original_checksum.yml
@@ -0,0 +1,44 @@
+name: Release Droid - Prepare Original Checksum
+
+on:
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - { scala-version: 'scala2.12', project-keeper-skip: true }
+ - { scala-version: 'scala2.13', project-keeper-skip: false }
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Set up JDK 11
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'temurin'
+ java-version: 11
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Run tests and build with Maven for ${{ matrix.scala-version }}
+ run: |
+ mvn --batch-mode clean verify --file pom.xml \
+ -P${{ matrix.scala-version }} \
+ -Dproject-keeper.skip=${{ matrix.project-keeper-skip }}
+ - name: Prepare checksum
+ run: find target -maxdepth 1 -name *.jar -exec sha256sum "{}" + > original_checksum
+ - name: Upload checksum to the artifactory
+ uses: actions/upload-artifact@v2
+ with:
+ name: original_checksum
+ retention-days: 5
+ path: original_checksum
\ No newline at end of file
diff --git a/.github/workflows/release_droid_print_quick_checksum.yml b/.github/workflows/release_droid_print_quick_checksum.yml
new file mode 100644
index 0000000..9eb5c00
--- /dev/null
+++ b/.github/workflows/release_droid_print_quick_checksum.yml
@@ -0,0 +1,39 @@
+name: Release Droid - Print Quick Checksum
+
+on:
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - { scala-version: 'scala2.12', project-keeper-skip: true }
+ - { scala-version: 'scala2.13', project-keeper-skip: false }
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Set up JDK 11
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'temurin'
+ java-version: 11
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Build with Maven skipping tests for ${{ matrix.scala-version }}
+ run: |
+ mvn --batch-mode clean verify \
+ -P${{ matrix.scala-version }} \
+ -DskipTests \
+ -Dproject-keeper.skip=${{ matrix.project-keeper-skip }}
+ - name: Print checksum
+ run: echo 'checksum_start==';find target -maxdepth 1 -name *.jar -exec sha256sum "{}" + | xargs;echo '==checksum_end'
diff --git a/.github/workflows/release_droid_release_on_maven_central.yml b/.github/workflows/release_droid_release_on_maven_central.yml
new file mode 100644
index 0000000..4e05e8f
--- /dev/null
+++ b/.github/workflows/release_droid_release_on_maven_central.yml
@@ -0,0 +1,47 @@
+name: Release Droid - Release On Maven Central
+
+on:
+ workflow_dispatch:
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - { scala-version: 'scala2.12', project-keeper-skip: true }
+ - { scala-version: 'scala2.13', project-keeper-skip: false }
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Set up Maven Central Repository
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'temurin'
+ java-version: 11
+ server-id: ossrh
+ server-username: MAVEN_USERNAME
+ server-password: MAVEN_PASSWORD
+ - name: Import GPG Key
+ run: gpg --import --batch <(echo "${{ secrets.OSSRH_GPG_SECRET_KEY }}")
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Publish to Central Repository for ${{ matrix.scala-version }}
+ run: |
+ mvn clean deploy \
+ -P${{ matrix.scala-version }} \
+ -Dgpg.skip=false \
+ -Dgpg.passphrase=${{ secrets.OSSRH_GPG_SECRET_KEY_PASSWORD }} \
+ -DskipTests \
+ -Dproject-keeper.skip=${{ matrix.project-keeper-skip }}
+ env:
+ MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
+ MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
diff --git a/.github/workflows/release_droid_upload_github_release_assets.yml b/.github/workflows/release_droid_upload_github_release_assets.yml
new file mode 100644
index 0000000..c76a142
--- /dev/null
+++ b/.github/workflows/release_droid_upload_github_release_assets.yml
@@ -0,0 +1,58 @@
+name: Release Droid - Upload GitHub Release Assets
+
+on:
+ workflow_dispatch:
+ inputs:
+ upload_url:
+ description: 'Assets upload URL'
+ required: true
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - { scala-version: 'scala2.12', project-keeper-skip: true }
+ - { scala-version: 'scala2.13', project-keeper-skip: false }
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+ - name: Set up JDK 11
+ uses: actions/setup-java@v2
+ with:
+ distribution: 'temurin'
+ java-version: 11
+ - name: Cache local Maven repository
+ uses: actions/cache@v2
+ with:
+ path: ~/.m2/repository
+ key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
+ restore-keys: |
+ ${{ runner.os }}-maven-
+ - name: Build with Maven skipping tests for ${{ matrix.scala-version }}
+ run: |
+ mvn --batch-mode clean verify \
+ -P${{ matrix.scala-version }} \
+ -DskipTests \
+ -Dproject-keeper.skip=${{ matrix.project-keeper-skip }}
+ - name: Generate sha256sum files
+ run: find target -maxdepth 1 -name *.jar -exec bash -c 'sha256sum {} > {}.sha256' \;
+ - name: Upload assets to the GitHub release draft
+ uses: shogo82148/actions-upload-release-asset@v1
+ with:
+ upload_url: ${{ github.event.inputs.upload_url }}
+ asset_path: target/*.jar
+ - name: Upload sha256sum files
+ uses: shogo82148/actions-upload-release-asset@v1
+ with:
+ upload_url: ${{ github.event.inputs.upload_url }}
+ asset_path: target/*.sha256
+ - name: Upload error-code-report
+ uses: shogo82148/actions-upload-release-asset@v1
+ with:
+ upload_url: ${{ github.event.inputs.upload_url }}
+ asset_path: target/error_code_report.json
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 257cc15..2ee6f23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,8 +4,8 @@
project/.gnupg/local*
# sbt
+target
project/target
-target/
.history
.bsp
.bloop
@@ -14,25 +14,39 @@ metals.sbt
# Java
*.class
+dependency-reduced-pom.xml
+pom.xml.versionsBackup
+.dbeaver*
+.directory
+local
+
+# Python
+venv/
# Logs
+~*
*.log
+**/*.log
log/
logs/
+*.lock
+*.orig
# Temporary files
*~
*.bak
*.old
+*.swp
*.tmp
nohup.out
-tmp/
+tmp
+*.md.html
# vim
.*.sw[a-z]
# IntelliJ
-.idea/
+.idea
.idea_modules/
*.iml
*.ipr
@@ -43,7 +57,6 @@ tmp/
.classpath
.project
.scala_dependencies
-.settings/
*.sc
# Ensime
diff --git a/.scalafix.conf b/.scalafix.conf
new file mode 100644
index 0000000..6093ef3
--- /dev/null
+++ b/.scalafix.conf
@@ -0,0 +1,44 @@
+rules = [
+ ExplicitResultTypes
+ Disable
+ DisableSyntax
+ LeakingImplicitClassVal
+ MissingFinal
+ NoAutoTupling
+ NoValInForComprehension
+ ProcedureSyntax
+ OrganizeImports
+ RemoveUnused
+]
+
+Disable {
+ ifSynthetic = [
+ "scala/Option.option2Iterable"
+ "scala/Predef.any2stringadd"
+ ]
+}
+
+DisableSyntax {
+ noFinalize = true
+ noImplicitConversion = true
+ noImplicitObject = true
+ noSemicolons = true
+ noTabs = true
+ noValPatterns = true
+ noXml = true
+}
+
+ExplicitResultTypes {
+ fatalWarnings = true
+ skipSimpleDefinitions = false
+}
+
+OrganizeImports {
+ groups = ["re:javax?\\.", "scala.", "com.exasol.", "*"]
+ groupExplicitlyImportedImplicitsSeparately = true
+}
+
+RemoveUnused {
+ // handled by OrganizeImports
+ imports = false
+}
diff --git a/.scalafmt.conf b/.scalafmt.conf
index b07d2f4..0a70cfe 100644
--- a/.scalafmt.conf
+++ b/.scalafmt.conf
@@ -1,5 +1,6 @@
-version = 3.0.1
+version = 3.1.2
project.git = true
+runner.dialect = scala213
maxColumn = 120
docstrings.style = Asterisk
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8b5a9aa
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,502 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=ignore
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.processAnnotations=enabled
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=11
+org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns=false
+org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647
+org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns=false
+org.eclipse.jdt.core.formatter.align_with_spaces=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package=49
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter=0
+org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type=49
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_assertion_message=0
+org.eclipse.jdt.core.formatter.alignment_for_assignment=0
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
+org.eclipse.jdt.core.formatter.alignment_for_compact_loops=16
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
+org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain=0
+org.eclipse.jdt.core.formatter.alignment_for_enum_constants=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
+org.eclipse.jdt.core.formatter.alignment_for_module_statements=16
+org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
+org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_record_components=16
+org.eclipse.jdt.core.formatter.alignment_for_relational_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
+org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_shift_operator=0
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
+org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
+org.eclipse.jdt.core.formatter.alignment_for_type_annotations=0
+org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0
+org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0
+org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
+org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_after_package=1
+org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_field=0
+org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
+org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
+org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
+org.eclipse.jdt.core.formatter.blank_lines_before_method=1
+org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
+org.eclipse.jdt.core.formatter.blank_lines_before_package=0
+org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
+org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch=0
+org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
+org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_constructor=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_record_declaration=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
+org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
+org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped=true
+org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
+org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
+org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position=false
+org.eclipse.jdt.core.formatter.comment.format_block_comments=true
+org.eclipse.jdt.core.formatter.comment.format_header=false
+org.eclipse.jdt.core.formatter.comment.format_html=true
+org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
+org.eclipse.jdt.core.formatter.comment.format_line_comments=true
+org.eclipse.jdt.core.formatter.comment.format_source_code=true
+org.eclipse.jdt.core.formatter.comment.indent_parameter_description=false
+org.eclipse.jdt.core.formatter.comment.indent_root_tags=false
+org.eclipse.jdt.core.formatter.comment.indent_tag_description=false
+org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags=do not insert
+org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
+org.eclipse.jdt.core.formatter.comment.line_length=120
+org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
+org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
+org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false
+org.eclipse.jdt.core.formatter.compact_else_if=true
+org.eclipse.jdt.core.formatter.continuation_indentation=2
+org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
+org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
+org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
+org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
+org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header=true
+org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
+org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_empty_lines=false
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
+org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
+org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
+org.eclipse.jdt.core.formatter.indentation.size=4
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
+org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
+org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
+org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_not_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case=insert
+org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default=insert
+org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
+org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
+org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
+org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
+org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
+org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
+org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
+org.eclipse.jdt.core.formatter.join_lines_in_comments=true
+org.eclipse.jdt.core.formatter.join_wrapped_lines=true
+org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_code_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_method_body_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line=false
+org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
+org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line=one_line_never
+org.eclipse.jdt.core.formatter.lineSplit=120
+org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
+org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body=0
+org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block=0
+org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
+org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines
+org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines
+org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true
+org.eclipse.jdt.core.formatter.tabulation.char=space
+org.eclipse.jdt.core.formatter.tabulation.size=4
+org.eclipse.jdt.core.formatter.text_block_indentation=0
+org.eclipse.jdt.core.formatter.use_on_off_tags=false
+org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_relational_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_shift_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
+org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
+org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter
diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..1add06a
--- /dev/null
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,205 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=true
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=true
+cleanup.convert_to_enhanced_for_loop=true
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=true
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=true
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=true
+cleanup.remove_redundant_type_arguments=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=true
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=true
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_Exasol
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+formatter_profile=_Exasol
+formatter_settings_version=21
+org.eclipse.jdt.ui.ignorelowercasenames=true
+org.eclipse.jdt.ui.importorder=java;javax;org;com;
+org.eclipse.jdt.ui.ondemandthreshold=3
+org.eclipse.jdt.ui.staticondemandthreshold=3
+sp_cleanup.add_all=false
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=true
+sp_cleanup.always_use_this_for_non_static_field_access=true
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.array_with_curly=false
+sp_cleanup.arrays_fill=false
+sp_cleanup.bitwise_conditional_expression=false
+sp_cleanup.boolean_literal=false
+sp_cleanup.boolean_value_rather_than_comparison=false
+sp_cleanup.break_loop=false
+sp_cleanup.collection_cloning=false
+sp_cleanup.comparing_on_criteria=false
+sp_cleanup.comparison_statement=false
+sp_cleanup.controlflow_merge=false
+sp_cleanup.convert_functional_interfaces=true
+sp_cleanup.convert_to_enhanced_for_loop=true
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.convert_to_switch_expressions=false
+sp_cleanup.correct_indentation=true
+sp_cleanup.do_while_rather_than_while=false
+sp_cleanup.double_negation=false
+sp_cleanup.else_if=false
+sp_cleanup.embedded_if=false
+sp_cleanup.evaluate_nullable=false
+sp_cleanup.extract_increment=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.hash=false
+sp_cleanup.if_condition=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.instanceof=false
+sp_cleanup.instanceof_keyword=false
+sp_cleanup.invert_equals=false
+sp_cleanup.join=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=true
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.map_cloning=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.multi_catch=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=false
+sp_cleanup.no_string_creation=false
+sp_cleanup.no_super=false
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=false
+sp_cleanup.operand_factorization=false
+sp_cleanup.organize_imports=true
+sp_cleanup.overridden_assignment=false
+sp_cleanup.plain_replacement=false
+sp_cleanup.precompile_regex=false
+sp_cleanup.primitive_comparison=false
+sp_cleanup.primitive_parsing=false
+sp_cleanup.primitive_rather_than_wrapper=false
+sp_cleanup.primitive_serialization=false
+sp_cleanup.pull_out_if_from_if_else=false
+sp_cleanup.pull_up_assignment=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.reduce_indentation=false
+sp_cleanup.redundant_comparator=false
+sp_cleanup.redundant_falling_through_block_end=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=true
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=true
+sp_cleanup.remove_unused_imports=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.return_expression=false
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.single_used_field=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.standard_comparison=false
+sp_cleanup.static_inner_class=false
+sp_cleanup.strictly_equal_or_different=false
+sp_cleanup.stringbuffer_to_stringbuilder=false
+sp_cleanup.stringbuilder=false
+sp_cleanup.stringbuilder_for_local_vars=false
+sp_cleanup.substring=false
+sp_cleanup.switch=false
+sp_cleanup.system_property=false
+sp_cleanup.system_property_boolean=false
+sp_cleanup.system_property_file_encoding=false
+sp_cleanup.system_property_file_separator=false
+sp_cleanup.system_property_line_separator=false
+sp_cleanup.system_property_path_separator=false
+sp_cleanup.ternary_operator=false
+sp_cleanup.try_with_resource=false
+sp_cleanup.unlooped_while=false
+sp_cleanup.unreachable_block=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=true
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=true
+sp_cleanup.use_string_is_blank=false
+sp_cleanup.use_this_for_non_static_field_access=true
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
+sp_cleanup.useless_continue=false
+sp_cleanup.useless_return=false
+sp_cleanup.valueof_rather_than_instantiation=false
diff --git a/README.md b/README.md
index 0c8de55..0a299d0 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,7 @@
# Import Export UDF Common Scala
[](https://github.com/exasol/import-export-udf-common-scala/actions/workflows/ci-build.yml)
-[](https://coveralls.io/github/exasol/import-export-udf-common-scala)
-[](https://search.maven.org/artifact/com.exasol/import-export-udf-common-scala_2.13)
+[](https://search.maven.org/artifact/com.exasol/import-export-udf-common-scala_2.13)
[](https://sonarcloud.io/dashboard?id=com.exasol%3Aimport-export-udf-common-scala)
@@ -16,8 +15,7 @@
[](https://sonarcloud.io/dashboard?id=com.exasol%3Aimport-export-udf-common-scala)
[](https://sonarcloud.io/dashboard?id=com.exasol%3Aimport-export-udf-common-scala)
-Common libraries for Exasol IMPORT and EXPORT user defined functions in Scala
-programming language.
+Common libraries for Exasol IMPORT and EXPORT user defined functions in Scala programming language.
## Features
@@ -27,69 +25,8 @@ programming language.
## Information for Users
- [Changelog](doc/changes/changelog.md)
+- [Dependencies](dependencies.md)
## Information for Contributors
-* [Developer Guide](doc/development/developer_guide.md)
-
-## Dependencies
-
-### Runtime Dependencies
-
-| Dependency | Purpose | License |
-|---------------------------------------------|-----------------------------------------------------------------|--------------------|
-| [Exasol Script API][exasol-script-api-link] | Accessing Exasol IMPORT / EXPORT API | MIT License |
-| [Apache Avro][apache-avro-link] | Integration support for Avro format | Apache License 2.0 |
-| [Scala Logging Library][scala-logging-link] | Scala logging library wrapping SLF4J | Apache License 2.0 |
-
-### Test Dependencies
-
-| Dependency | Purpose | License |
-|---------------------------------------------|-----------------------------------------------------------------|--------------------|
-| [Scalatest][scalatest-link] | Testing tool for Scala and Java developers | Apache License 2.0 |
-| [Scalatest Plus][scalatestplus-link] | Integration support between Scalatest and Mockito | Apache License 2.0 |
-| [Mockito Core][mockitocore-link] | Mocking framework for unit tests | MIT License |
-
-### Compiler Plugin Dependencies
-
-These plugins help with project development.
-
-| Plugin Name | Purpose | License |
-|---------------------------------------------|-----------------------------------------------------------------|----------------------|
-| [SBT Coursier][sbt-coursier-link] | Pure Scala artifact fetching | Apache License 2.0 |
-| [SBT Wartremover][sbt-wartremover-link] | Flexible Scala code linting tool | Apache License 2.0 |
-| [SBT Wartremover Contrib][sbt-wcontrib-link]| Community managed additional warts for wartremover | Apache License 2.0 |
-| [SBT Assembly][sbt-assembly-link] | Create fat jars with all project dependencies | MIT License |
-| [SBT API Mappings][sbt-apimapping-link] | A plugin that fetches API mappings for common Scala libraries | Apache License 2.0 |
-| [SBT Scoverage][sbt-scoverage-link] | Integrates the scoverage code coverage library | Apache License 2.0 |
-| [SBT Coveralls][sbt-coveralls-link] | Uploads scala code coverage results to https://coveralls.io | Apache License 2.0 |
-| [SBT Updates][sbt-updates-link] | Checks Maven and Ivy repositories for dependency updates | BSD 3-Clause License |
-| [SBT Scalafmt][sbt-scalafmt-link] | A plugin for https://scalameta.org/scalafmt/ formatting | Apache License 2.0 |
-| [SBT Scalastyle][sbt-style-link] | A plugin for http://www.scalastyle.org/ Scala style checker | Apache License 2.0 |
-| [SBT Dependency Graph][sbt-depgraph-link] | A plugin for visualizing dependency graph of your project | Apache License 2.0 |
-| [SBT Explicit Dependencies][sbt-expdep-link]| Checks which direct libraries required to compile your code | Apache License 2.0 |
-| [SBT Sonatype][sbt-sonatype-link] | Sbt plugin for publishing Scala projects to the Maven central | Apache License 2.0 |
-| [SBT PGP][sbt-pgp-link] | PGP plugin for `sbt` | BSD 3-Clause License |
-| [SBT Git][sbt-git-link] | A plugin for Git integration, used to version the release jars | BSD 2-Clause License |
-
-[apache-avro-link]: https://avro.apache.org/
-[scala-logging-link]: https://github.com/lightbend/scala-logging
-[exasol-script-api-link]: https://docs.exasol.com/database_concepts/udf_scripts.htm
-[scalatest-link]: http://www.scalatest.org/
-[scalatestplus-link]: https://github.com/scalatest/scalatestplus-mockito
-[mockitocore-link]: https://site.mockito.org/
-[sbt-coursier-link]: https://github.com/coursier/coursier
-[sbt-wartremover-link]: http://github.com/puffnfresh/wartremover
-[sbt-wcontrib-link]: http://github.com/wartremover/wartremover-contrib
-[sbt-assembly-link]: https://github.com/sbt/sbt-assembly
-[sbt-apimapping-link]: https://github.com/ThoughtWorksInc/sbt-api-mappings
-[sbt-scoverage-link]: http://github.com/scoverage/sbt-scoverage
-[sbt-coveralls-link]: https://github.com/scoverage/sbt-coveralls
-[sbt-updates-link]: http://github.com/rtimush/sbt-updates
-[sbt-scalafmt-link]: https://github.com/lucidsoftware/neo-sbt-scalafmt
-[sbt-style-link]: https://github.com/scalastyle/scalastyle-sbt-plugin
-[sbt-depgraph-link]: https://github.com/jrudolph/sbt-dependency-graph
-[sbt-sonatype-link]: https://github.com/xerial/sbt-sonatype
-[sbt-pgp-link]: https://github.com/xerial/sbt-sonatype
-[sbt-git-link]: https://github.com/sbt/sbt-git
-[sbt-expdep-link]: https://github.com/cb372/sbt-explicit-dependencies
+- [Developer Guide](doc/development/developer_guide.md)
diff --git a/build.sbt b/build.sbt
deleted file mode 100644
index 5fa086c..0000000
--- a/build.sbt
+++ /dev/null
@@ -1,29 +0,0 @@
-import com.exasol.common.sbt.Dependencies
-import com.exasol.common.sbt.Settings
-
-lazy val orgSettings = Seq(
- name := "import-export-udf-common-scala",
- description := "Common Import Export Libraries used in Exasol User Defined Functions",
- organization := "com.exasol",
- organizationHomepage := Some(url("http://www.exasol.com"))
-)
-
-lazy val buildSettings = Seq(
- scalaVersion := "2.13.6",
- crossScalaVersions := Seq("2.12.15", "2.13.6")
-)
-
-lazy val root =
- project
- .in(file("."))
- .settings(moduleName := "import-export-udf-common-scala")
- .settings(orgSettings)
- .settings(buildSettings)
- .settings(Settings.projectSettings(scalaVersion))
- .settings(
- resolvers ++= Dependencies.ExasolResolvers,
- libraryDependencies ++= Dependencies.AllDependencies
- )
- .enablePlugins(GitVersioning)
-
-addCommandAlias("pluginUpdates", ";reload plugins;dependencyUpdates;reload return")
diff --git a/dependencies.md b/dependencies.md
new file mode 100644
index 0000000..058e5da
--- /dev/null
+++ b/dependencies.md
@@ -0,0 +1,105 @@
+
+# Dependencies
+
+## Compile Dependencies
+
+| Dependency | License |
+| -------------------------------------- | --------------------------------------------- |
+| [Scala Library][0] | [Apache-2.0][1] |
+| [Java Interface for EXASOL Scripts][2] | [MIT License][3] |
+| [error-reporting-java][4] | [MIT][5] |
+| [Apache Avro][6] | [Apache License, Version 2.0][7] |
+| [jackson-databind][8] | [The Apache Software License, Version 2.0][9] |
+| [jackson-module-scala][10] | [The Apache Software License, Version 2.0][7] |
+| [SLF4J Simple Binding][12] | [MIT License][13] |
+| [scala-logging][14] | [Apache 2.0 License][15] |
+
+## Test Dependencies
+
+| Dependency | License |
+| --------------------------- | ----------------------------------------- |
+| [scalatest][16] | [the Apache License, ASL Version 2.0][17] |
+| [scalatestplus-mockito][18] | [Apache-2.0][17] |
+| [mockito-core][20] | [The MIT License][21] |
+
+## Plugin Dependencies
+
+| Dependency | License |
+| ------------------------------------------------------- | --------------------------------------------- |
+| [scala-maven-plugin][22] | [Public domain (Unlicense)][23] |
+| [Apache Maven Compiler Plugin][24] | [Apache License, Version 2.0][7] |
+| [Maven Surefire Plugin][26] | [Apache License, Version 2.0][7] |
+| [ScalaTest Maven Plugin][28] | [the Apache License, ASL Version 2.0][17] |
+| [Apache Maven Assembly Plugin][30] | [Apache License, Version 2.0][7] |
+| [Versions Maven Plugin][32] | [Apache License, Version 2.0][7] |
+| [org.sonatype.ossindex.maven:ossindex-maven-plugin][34] | [ASL2][9] |
+| [Apache Maven Enforcer Plugin][36] | [Apache License, Version 2.0][7] |
+| [OpenFastTrace Maven Plugin][38] | [GNU General Public License v3.0][39] |
+| [Apache Maven GPG Plugin][40] | [Apache License, Version 2.0][7] |
+| [Apache Maven Deploy Plugin][42] | [Apache License, Version 2.0][7] |
+| [Nexus Staging Maven Plugin][44] | [Eclipse Public License][45] |
+| [Apache Maven Source Plugin][46] | [Apache License, Version 2.0][7] |
+| [Apache Maven Javadoc Plugin][48] | [Apache License, Version 2.0][7] |
+| [Reproducible Build Maven Plugin][50] | [Apache 2.0][9] |
+| [error-code-crawler-maven-plugin][52] | [MIT][5] |
+| [Project keeper maven plugin][54] | [MIT][5] |
+| [SCoverage Maven Plugin][56] | [The Apache Software License, Version 2.0][9] |
+| [Scalastyle Maven Plugin][58] | [Apache 2.0][15] |
+| [spotless-maven-plugin][60] | [The Apache Software License, Version 2.0][7] |
+| [scalafix-maven-plugin][62] | [BSD-3-Clause][63] |
+| [Apache Maven Clean Plugin][64] | [Apache License, Version 2.0][7] |
+| [Apache Maven Resources Plugin][66] | [Apache License, Version 2.0][7] |
+| [Apache Maven JAR Plugin][68] | [Apache License, Version 2.0][7] |
+| [Apache Maven Install Plugin][70] | [Apache License, Version 2.0][9] |
+| [Apache Maven Site Plugin][72] | [Apache License, Version 2.0][7] |
+
+[54]: https://github.com/exasol/project-keeper-maven-plugin
+[56]: https://scoverage.github.io/scoverage-maven-plugin/1.4.1/
+[18]: https://github.com/scalatest/scalatestplus-mockito
+[4]: https://github.com/exasol/error-reporting-java
+[9]: http://www.apache.org/licenses/LICENSE-2.0.txt
+[58]: http://www.scalastyle.org
+[26]: https://maven.apache.org/surefire/maven-surefire-plugin/
+[60]: https://github.com/diffplug/spotless
+[3]: https://mit-license.org/
+[5]: https://opensource.org/licenses/MIT
+[20]: https://github.com/mockito/mockito
+[10]: https://github.com/FasterXML/jackson-module-scala
+[32]: http://www.mojohaus.org/versions-maven-plugin/
+[24]: https://maven.apache.org/plugins/maven-compiler-plugin/
+[66]: https://maven.apache.org/plugins/maven-resources-plugin/
+[38]: https://github.com/itsallcode/openfasttrace-maven-plugin
+[64]: https://maven.apache.org/plugins/maven-clean-plugin/
+[8]: http://github.com/FasterXML/jackson
+[42]: https://maven.apache.org/plugins/maven-deploy-plugin/
+[23]: http://unlicense.org/
+[1]: https://www.apache.org/licenses/LICENSE-2.0
+[28]: https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin
+[21]: https://github.com/mockito/mockito/blob/main/LICENSE
+[50]: http://zlika.github.io/reproducible-build-maven-plugin
+[13]: http://www.opensource.org/licenses/mit-license.php
+[63]: https://opensource.org/licenses/BSD-3-Clause
+[6]: https://avro.apache.org
+[14]: https://github.com/lightbend/scala-logging
+[46]: https://maven.apache.org/plugins/maven-source-plugin/
+[12]: http://www.slf4j.org
+[62]: https://github.com/evis/scalafix-maven-plugin
+[68]: https://maven.apache.org/plugins/maven-jar-plugin/
+[17]: http://www.apache.org/licenses/LICENSE-2.0
+[44]: http://www.sonatype.com/public-parent/nexus-maven-plugins/nexus-staging/nexus-staging-maven-plugin/
+[15]: http://www.apache.org/licenses/LICENSE-2.0.html
+[16]: http://www.scalatest.org
+[0]: https://www.scala-lang.org/
+[45]: http://www.eclipse.org/legal/epl-v10.html
+[72]: https://maven.apache.org/plugins/maven-site-plugin/
+[39]: https://www.gnu.org/licenses/gpl-3.0.html
+[7]: https://www.apache.org/licenses/LICENSE-2.0.txt
+[36]: https://maven.apache.org/enforcer/maven-enforcer-plugin/
+[2]: http://www.exasol.com
+[70]: http://maven.apache.org/plugins/maven-install-plugin/
+[34]: https://sonatype.github.io/ossindex-maven/maven-plugin/
+[40]: https://maven.apache.org/plugins/maven-gpg-plugin/
+[22]: http://github.com/davidB/scala-maven-plugin
+[48]: https://maven.apache.org/plugins/maven-javadoc-plugin/
+[52]: https://github.com/exasol/error-code-crawler-maven-plugin
+[30]: https://maven.apache.org/plugins/maven-assembly-plugin/
diff --git a/doc/changes/changelog.md b/doc/changes/changelog.md
index 1e7d076..d658aa6 100644
--- a/doc/changes/changelog.md
+++ b/doc/changes/changelog.md
@@ -1,5 +1,6 @@
-# Releases
+# Changes
+* [0.4.0](changes_0.4.0.md)
* [0.3.1](changes_0.3.1.md)
* [0.3.0](changes_0.3.0.md)
* [0.2.0](changes_0.2.0.md)
diff --git a/doc/changes/changes_0.4.0.md b/doc/changes/changes_0.4.0.md
new file mode 100644
index 0000000..d73346a
--- /dev/null
+++ b/doc/changes/changes_0.4.0.md
@@ -0,0 +1,55 @@
+# Import Export UDF Common Scala 0.4.0, released 2021-??-??
+
+Code name:
+
+## Features
+
+* #27: Migrated to `maven` based build
+
+## Dependency Updates
+
+### Compile Dependency Updates
+
+* Added `com.exasol:error-reporting-java:0.4.1`
+* Added `com.exasol:exasol-script-api:6.1.7`
+* Added `com.fasterxml.jackson.core:jackson-databind:2.12.5`
+* Added `com.fasterxml.jackson.module:jackson-module-scala_2.13:2.12.5`
+* Added `com.typesafe.scala-logging:scala-logging_2.13:3.9.4`
+* Added `org.apache.avro:avro:1.11.0`
+* Added `org.scala-lang:scala-library:2.13.6`
+* Added `org.slf4j:slf4j-simple:1.7.32`
+
+### Test Dependency Updates
+
+* Added `org.mockito:mockito-core:4.1.0`
+* Added `org.scalatestplus:scalatestplus-mockito_2.13:1.0.0-M2`
+* Added `org.scalatest:scalatest_2.13:3.2.10`
+
+### Plugin Dependency Updates
+
+* Added `com.diffplug.spotless:spotless-maven-plugin:2.17.4`
+* Added `com.exasol:error-code-crawler-maven-plugin:0.7.1`
+* Added `com.exasol:project-keeper-maven-plugin:1.3.4`
+* Added `io.github.evis:scalafix-maven-plugin_2.13:0.1.4_0.9.31`
+* Added `io.github.zlika:reproducible-build-maven-plugin:0.14`
+* Added `net.alchim31.maven:scala-maven-plugin:4.5.4`
+* Added `org.apache.maven.plugins:maven-assembly-plugin:3.3.0`
+* Added `org.apache.maven.plugins:maven-clean-plugin:3.1.0`
+* Added `org.apache.maven.plugins:maven-compiler-plugin:3.8.1`
+* Added `org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1`
+* Added `org.apache.maven.plugins:maven-enforcer-plugin:3.0.0`
+* Added `org.apache.maven.plugins:maven-gpg-plugin:3.0.1`
+* Added `org.apache.maven.plugins:maven-install-plugin:2.5.2`
+* Added `org.apache.maven.plugins:maven-jar-plugin:3.2.0`
+* Added `org.apache.maven.plugins:maven-javadoc-plugin:3.3.1`
+* Added `org.apache.maven.plugins:maven-resources-plugin:3.2.0`
+* Added `org.apache.maven.plugins:maven-site-plugin:3.9.1`
+* Added `org.apache.maven.plugins:maven-source-plugin:3.2.1`
+* Added `org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M4`
+* Added `org.codehaus.mojo:versions-maven-plugin:2.8.1`
+* Added `org.itsallcode:openfasttrace-maven-plugin:1.2.0`
+* Added `org.scalastyle:scalastyle-maven-plugin:1.0.0`
+* Added `org.scalatest:scalatest-maven-plugin:2.0.2`
+* Added `org.scoverage:scoverage-maven-plugin:1.4.1`
+* Added `org.sonatype.ossindex.maven:ossindex-maven-plugin:3.1.0`
+* Added `org.sonatype.plugins:nexus-staging-maven-plugin:1.6.8`
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0b24a6c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,647 @@
+
+
+ 4.0.0
+ com.exasol
+ import-export-udf-common-scala
+ 0.4.0
+ Import Export UDF Common Scala
+ Common import export libraries used in Exasol user defined functions
+ https://github.com/exasol/import-export-udf-common-scala
+
+ UTF-8
+ UTF-8
+ 11
+
+ 6.1.7
+ 0.4.1
+ 1.11.0
+ 2.12.5
+ 3.9.4
+ 1.7.32
+
+ 3.2.10
+ 1.0.0-M2
+ 4.1.0
+ true
+
+
+
+ MIT
+ https://opensource.org/licenses/MIT
+ repo
+
+
+
+
+ Exasol
+ opensource@exasol.com
+ Exasol AG
+ https://www.exasol.com/
+
+
+
+ scm:git:https://github.com/exasol/import-export-udf-common-scala.git
+ scm:git:https://github.com/exasol/import-export-udf-common-scala.git
+ https://github.com/exasol/import-export-udf-common-scala/tree/main
+
+
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+ ossrh
+ https://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
+
+ maven.exasol.com
+ https://maven.exasol.com/artifactory/exasol-releases
+
+ false
+
+
+
+ maven.exasol.com-snapshots
+ https://maven.exasol.com/artifactory/exasol-snapshots
+
+ true
+
+
+
+
+
+ org.scala-lang
+ scala-library
+ ${scala.version}
+
+
+ com.exasol
+ exasol-script-api
+ ${exasol.api.version}
+
+
+ com.exasol
+ error-reporting-java
+ ${exasol.error-reporting.version}
+
+
+ org.apache.avro
+ avro
+ ${avro.version}
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.apache.commons
+ commons-compress
+
+
+ com.fasterxml.jackson.core
+ *
+
+
+ com.fasterxml.jackson.module
+ *
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-scala_${scala.compat.version}
+ ${jackson.version}
+
+
+ org.slf4j
+ slf4j-simple
+ ${slf4j.simple.version}
+
+
+ com.typesafe.scala-logging
+ scala-logging_${scala.compat.version}
+ ${typesafe.logging.version}
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.scala-lang
+ scala-library
+
+
+ org.scala-lang
+ scala-reflect
+
+
+
+
+
+ org.scalatest
+ scalatest_${scala.compat.version}
+ ${scalatest.version}
+ test
+
+
+ org.scalatestplus
+ scalatestplus-mockito_${scala.compat.version}
+ ${scalatestplus.version}
+ test
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+
+ ${project.artifactId}_${scala.compat.version}-${project.version}
+
+
+ net.alchim31.maven
+ scala-maven-plugin
+ 4.5.4
+
+
+ scala-compile-first
+ process-resources
+
+ add-source
+ compile
+
+
+
+ scala-test-compile
+ process-test-resources
+
+ testCompile
+
+
+
+ attach-scaladocs
+ verify
+
+ doc
+ doc-jar
+
+
+
+
+ ${scala.version}
+ ${scala.compat.version}
+ true
+ true
+ incremental
+
+ -unchecked
+ -deprecation
+ -feature
+ -explaintypes
+ -Xcheckinit
+ -Xfatal-warnings
+ -Xlint:_
+ -Ywarn-dead-code
+ -Ywarn-numeric-widen
+ -Ywarn-value-discard
+ -Ywarn-extra-implicit
+ -Ywarn-unused:_
+
+
+ -source
+ ${java.version}
+ -target
+ ${java.version}
+ -deprecation
+ -parameters
+ -Xlint:all
+
+
+ -Xmx2048m
+ -Xss64m
+
+
+
+ org.scalameta
+ semanticdb-scalac_${scala.version}
+ 4.4.30
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ ${java.version}
+ ${java.version}
+
+
+
+ compile
+
+ compile
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 3.0.0-M4
+
+ true
+
+ -Djava.util.logging.config.file=src/test/resources/logging.properties ${argLine}
+
+
+
+ org.scalatest
+ scalatest-maven-plugin
+ 2.0.2
+
+ .
+ TestSuite.txt
+ -Djava.util.logging.config.file=src/test/resources/logging.properties
+ ${project.build.directory}/surefire-reports
+
+
+
+ test
+
+ test
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.3.0
+
+
+ src/assembly/all-dependencies.xml
+
+ false
+
+
+ true
+
+
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+ org.codehaus.mojo
+ versions-maven-plugin
+ 2.8.1
+
+
+ package
+
+ display-plugin-updates
+ display-dependency-updates
+
+
+
+
+ file:///${project.basedir}/versionsMavenPluginRules.xml
+
+
+
+ org.sonatype.ossindex.maven
+ ossindex-maven-plugin
+ 3.1.0
+
+
+ package
+
+ audit
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-enforcer-plugin
+ 3.0.0
+
+
+ enforce-maven
+
+ enforce
+
+
+
+
+ 3.6.3
+
+
+
+
+
+
+
+ org.itsallcode
+ openfasttrace-maven-plugin
+ 1.2.0
+
+
+ trace-requirements
+
+ trace
+
+
+
+
+ html
+ ALL
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.0.1
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+ --pinentry-mode
+ loopback
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 3.0.0-M1
+
+ true
+
+
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ 1.6.8
+
+ true
+ ossrh
+ https://oss.sonatype.org/
+
+
+
+ default-deploy
+ deploy
+
+ deploy
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.2.1
+
+
+ attach-sources
+
+ jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.3.1
+
+
+ attach-javadocs
+
+ jar
+
+
+
+
+ UTF-8
+
+ true
+ true
+ true
+ ${project.basedir}/src/main/java
+
+
+
+ io.github.zlika
+ reproducible-build-maven-plugin
+ 0.14
+
+
+ strip-jar
+ package
+
+ strip-jar
+
+
+
+
+
+ com.exasol
+ error-code-crawler-maven-plugin
+ 0.7.1
+
+
+
+ verify
+
+
+
+
+
+ com.exasol
+ project-keeper-maven-plugin
+ 1.3.4
+
+
+
+ verify
+
+
+
+
+
+ maven_central
+
+
+ org.jacoco:jacoco-maven-plugin
+
+
+ README.md
+ .github/workflows/release_droid*.yml
+
+
+
+ LICENSE-exasol-script-api.txt|https://mit-license.org/
+
+
+ https://github.com/google/guava/guava|https://github.com/google/guava
+
+
+ http://wiki.fasterxml.com/JacksonModuleScala|https://github.com/FasterXML/jackson-module-scala
+
+
+ http://nexus.sonatype.org/oss-repository-hosting.html|https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin
+
+
+ http://nexus.sonatype.org/oss-repository-hosting.html/scalatest-maven-plugin|https://www.scalatest.org/user_guide/using_the_scalatest_maven_plugin
+
+
+
+
+
+ org.scoverage
+ scoverage-maven-plugin
+ 1.4.1
+
+ ${scala.version}
+ true
+ true
+
+
+
+ org.scalastyle
+ scalastyle-maven-plugin
+ 1.0.0
+
+ false
+ true
+ true
+ false
+ ${project.basedir}/src/main/scala
+ ${project.basedir}/src/test/scala
+ ${project.basedir}/scalastyle-config.xml
+ ${project.build.directory}/scalastyle-output.xml
+ UTF-8
+
+
+
+
+ check
+
+
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+ 2.17.4
+
+
+
+ ${project.basedir}/.scalafmt.conf
+
+
+
+
+
+
+ check
+
+
+
+
+
+ io.github.evis
+ scalafix-maven-plugin_${scala.compat.version}
+ 0.1.4_0.9.31
+
+
+ com.github.liancheng
+ organize-imports_${scala.compat.version}
+ 0.6.0
+
+
+ com.github.vovapolu
+ scaluzzi_${scala.compat.version}
+ 0.1.20
+
+
+
+ CHECK
+
+
+
+
+
+
+ maven-clean-plugin
+ 3.1.0
+
+
+ maven-install-plugin
+ 2.5.2
+
+
+ maven-jar-plugin
+ 3.2.0
+
+
+ maven-resources-plugin
+ 3.2.0
+
+
+ maven-site-plugin
+ 3.9.1
+
+
+
+
+
+
+ scala2.13
+
+ true
+
+
+ 2.13.6
+ 2.13
+
+
+
+ scala2.12
+
+ 2.12.15
+ 2.12
+
+
+
+
diff --git a/project/Compilation.scala b/project/Compilation.scala
deleted file mode 100644
index e96cd4e..0000000
--- a/project/Compilation.scala
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.exasol.common.sbt
-
-import sbt._
-import wartremover.Wart
-import wartremover.Warts
-
-/** Compiler related settings (flags, warts, lints) */
-object Compilation {
-
- def compilerFlagsFn(scalaVersion: String): Seq[String] =
- CrossVersion.partialVersion(scalaVersion) match {
- case Some((2, 13)) => CompilerFlags.filter(_ != "-Xfuture")
- case Some((2, 12)) => CompilerFlags ++ Scala12CompilerFlags
- case Some((2, 11)) => CompilerFlags
- case _ => CompilerFlags
- }
-
- def consoleFlagsFn(scalaVersion: String): Seq[String] =
- compilerFlagsFn(scalaVersion).filterNot(
- Set(
- "-Xfatal-warnings",
- "-Ywarn-unused-import",
- "-Ywarn-unused:imports"
- )
- )
-
- // format: off
- /** Compiler flags specific to Scala version 2.12.x */
- private val Scala12CompilerFlags: Seq[String] = Seq(
- "-Xlint:constant", // Evaluation of a constant arithmetic expression results in an error.
- "-Xlint:by-name-right-associative", // By-name parameter of right associative operator.
- "-Xlint:nullary-override", // Warn when non-nullary `def f()' overrides nullary `def f'.
- "-Xlint:unsound-match", // Pattern match may not be typesafe.
- "-Yno-adapted-args", // Do not adapt an argument list (either by inserting () or creating a tuple) to match the receiver.
- "-Ywarn-extra-implicit", // Warn when more than one implicit parameter section is defined.
- "-Ywarn-inaccessible", // Warn about inaccessible types in method signatures.
- "-Ywarn-infer-any", // Warn when a type argument is inferred to be `Any`.
- "-Ywarn-nullary-override", // Warn when non-nullary `def f()' overrides nullary `def f'.
- "-Ywarn-nullary-unit", // Warn when nullary methods return Unit.
- "-Ywarn-unused:implicits", // Warn if an implicit parameter is unused.
- "-Ywarn-unused:imports", // Warn if an import selector is not referenced.
- "-Ywarn-unused:locals", // Warn if a local definition is unused.
- // "-Ywarn-unused:params", // Warn if a value parameter is unused.
- "-Ywarn-unused:patvars", // Warn if a variable bound in a pattern is unused.
- "-Ywarn-unused:privates", // Warn if a private member is unused.
- "-Ypartial-unification" // Enable partial unification in type constructor inference
- )
-
- /**
- * Compiler flags specific to Scala versions 2.10.x and 2.11.x
- *
- * From tpolecat, https://tpolecat.github.io/2017/04/25/scalac-flags.html
- */
- private val CompilerFlags: Seq[String] = Seq(
- "-encoding", "utf-8", // Specify character encoding used by source files.
- "-deprecation", // Emit warning and location for usages of deprecated APIs.
- "-explaintypes", // Explain type errors in more detail.
- "-feature", // Emit warning and location for usages of features that should be imported explicitly.
- "-language:existentials", // Existential types (besides wildcard types) can be written and inferred
- "-language:experimental.macros", // Allow macro definition (besides implementation and application)
- "-language:higherKinds", // Allow higher-kinded types
- "-language:implicitConversions", // Allow definition of implicit functions called views
- "-unchecked", // Enable additional warnings where generated code depends on assumptions.
- "-Xcheckinit", // Wrap field accessors to throw an exception on uninitialized access.
- "-Xfatal-warnings", // Fail the compilation if there are any warnings.
- "-Xfuture", // Turn on future language features.
- "-Xlint:adapted-args", // Warn if an argument list is modified to match the receiver.
- "-Xlint:delayedinit-select", // Selecting member of DelayedInit.
- "-Xlint:doc-detached", // A Scaladoc comment appears to be detached from its element.
- "-Xlint:inaccessible", // Warn about inaccessible types in method signatures.
- "-Xlint:infer-any", // Warn when a type argument is inferred to be `Any`.
- "-Xlint:missing-interpolator", // A string literal appears to be missing an interpolator id.
- "-Xlint:nullary-unit", // Warn when nullary methods return Unit.
- "-Xlint:option-implicit", // Option.apply used implicit view.
- "-Xlint:package-object-classes", // Class or object defined in package object.
- "-Xlint:poly-implicit-overload", // Parameterized overloaded implicit methods are not visible as view bounds.
- "-Xlint:private-shadow", // A private field (or class parameter) shadows a superclass field.
- "-Xlint:stars-align", // Pattern sequence wildcard must align with sequence component.
- "-Xlint:type-parameter-shadow", // A local type parameter shadows a type already in scope.
- "-Ywarn-dead-code", // Warn when dead code is identified.
- "-Ywarn-numeric-widen", // Warn when numerics are widened.
- "-Ywarn-value-discard" // Warn when non-Unit expression results are unused.
- )
- // format: on
-
- val JavacCompilerFlags: Seq[String] = Seq(
- "-encoding",
- "UTF-8",
- "-deprecation",
- "-parameters",
- "-Xlint:all"
- )
-
- private def contribWart(name: String) =
- Wart.custom(s"org.wartremover.contrib.warts.$name")
-
- private val ExtraWartremoverFlags = Seq(
- contribWart("Apply"),
- contribWart("ExposedTuples"),
- contribWart("MissingOverride"),
- contribWart("NoNeedForMonad"),
- contribWart("OldTime"),
- contribWart("SealedCaseClass"),
- contribWart("SomeApply"),
- contribWart("SymbolicName"),
- contribWart("UnintendedLaziness"),
- contribWart("UnsafeInheritance")
- )
-
- val WartremoverFlags: Seq[Wart] = ExtraWartremoverFlags ++ Warts.allBut(
- Wart.Any,
- Wart.AsInstanceOf,
- Wart.Equals,
- Wart.IsInstanceOf,
- Wart.Null,
- Wart.MutableDataStructures,
- Wart.Overloading,
- Wart.Throw,
- Wart.Var,
- Wart.While
- )
-
- val WartremoverTestFlags: Seq[Wart] = ExtraWartremoverFlags ++ Warts.allBut(
- Wart.Any,
- Wart.IsInstanceOf,
- Wart.Overloading,
- Wart.NonUnitStatements,
- Wart.Null,
- Wart.Var
- )
-
-}
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
deleted file mode 100644
index fe36e0c..0000000
--- a/project/Dependencies.scala
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.exasol.common.sbt
-
-import sbt.{ExclusionRule, _}
-
-/** A list of required dependencies */
-object Dependencies {
-
- // Runtime dependencies versions
- private val ExasolVersion = "6.1.7"
- private val AvroVersion = "1.10.2"
- private val JacksonVersion = "2.12.5"
- private val TypesafeLoggingVersion = "3.9.4"
- private val SLF4JSimpleVersion = "1.7.32"
-
- // Test dependencies versions
- private val ScalaTestVersion = "3.2.10"
- private val ScalaTestPlusVersion = "1.0.0-M2"
- private val MockitoCoreVersion = "4.0.0"
-
- val ExasolResolvers: Seq[Resolver] = Seq(
- "Exasol Releases" at "https://maven.exasol.com/artifactory/exasol-releases"
- )
-
- lazy val RuntimeDependencies: Seq[ModuleID] = Seq(
- "com.exasol" % "exasol-script-api" % ExasolVersion,
- "org.slf4j" % "slf4j-simple" % SLF4JSimpleVersion,
- "com.exasol" % "error-reporting-java" % "0.4.0",
- "com.typesafe.scala-logging" %% "scala-logging" % TypesafeLoggingVersion
- exclude ("org.slf4j", "slf4j-api")
- exclude ("org.scala-lang", "scala-library")
- exclude ("org.scala-lang", "scala-reflect"),
- "org.apache.avro" % "avro" % AvroVersion
- exclude ("org.slf4j", "slf4j-api")
- exclude ("org.apache.commons", "commons-compress")
- excludeAll (
- ExclusionRule(organization = "com.fasterxml.jackson.core"),
- ExclusionRule(organization = "com.fasterxml.jackson.module")
- ),
- "com.fasterxml.jackson.core" % "jackson-databind" % JacksonVersion,
- "com.fasterxml.jackson.module" %% "jackson-module-scala" % JacksonVersion
- )
-
- lazy val TestDependencies: Seq[ModuleID] = Seq(
- "org.scalatest" %% "scalatest" % ScalaTestVersion,
- "org.scalatestplus" %% "scalatestplus-mockito" % ScalaTestPlusVersion,
- "org.mockito" % "mockito-core" % MockitoCoreVersion
- ).map(_ % Test)
-
- lazy val AllDependencies: Seq[ModuleID] = RuntimeDependencies ++ TestDependencies
-
-}
diff --git a/project/Publishing.scala b/project/Publishing.scala
deleted file mode 100644
index 2aa1893..0000000
--- a/project/Publishing.scala
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.exasol.common.sbt
-
-import sbt._
-import sbt.Keys._
-import com.typesafe.sbt.SbtGit.git
-import com.jsuereth.sbtpgp.PgpKeys._
-import scala.xml.transform.RewriteRule
-import scala.xml.transform.RuleTransformer
-
-object Publishing {
-
- val VersionRegex = "v([0-9]+.[0-9]+.[0-9]+)-?(.*)?".r
-
- def publishSettings(): Seq[Setting[_]] = Seq(
- homepage := Some(url("https://github.com/exasol/import-export-udf-common-scala")),
- licenses := Seq("MIT" -> url("https://opensource.org/licenses/MIT")),
- publishMavenStyle := true,
- Test / publishArtifact := false,
- pomIncludeRepository := Function.const(false),
- publishTo := {
- val nexus = "https://oss.sonatype.org/"
- if (isSnapshot.value)
- Some("snapshots" at nexus + "content/repositories/snapshots")
- else
- Some("releases" at nexus + "service/local/staging/deploy/maven2")
- },
- scmInfo := Some(
- ScmInfo(
- url("https://github.com/exasol/import-export-udf-common-scala"),
- "scm:git:git@github.com:exasol/import-export-udf-common-scala.git"
- )
- ),
- developers := List(
- Developer(
- id = "exasol",
- name = "Exasol AG",
- email = "opensource@exasol.com",
- url = url("https://github.com/exasol/")
- )
- ),
- // Do not include scoverage & wartremover plugins as a dependency in the pom
- // https://github.com/scoverage/sbt-scoverage/issues/153
- // This code was copied from https://github.com/http4s/http4s
- pomPostProcess := { (node: xml.Node) =>
- val depsToRemove = Set("org.scoverage", "org.wartremover", "org.danielnixon")
- new RuleTransformer(new RewriteRule {
- override def transform(node: xml.Node): Seq[xml.Node] = node match {
- case e: xml.Elem
- if e.label == "dependency" && e.child
- .exists(child => child.label == "groupId" && depsToRemove.contains(child.text)) =>
- Nil
- case _ => Seq(node)
- }
- }).transform(node).head
- },
- // Gnupg related settings
- // Global scope somehow needed here; otherwise publishLocalSigned looks for these credentials
- // in default path of ~/.sbt/gpg/
- Global / useGpg := false,
- Global / pgpPublicRing := baseDirectory.value / "project" / ".gnupg" / "local.pubring.asc",
- Global / pgpSecretRing := baseDirectory.value / "project" / ".gnupg" / "local.secring.asc",
- Global / pgpPassphrase := sys.env.get("PGP_PASSPHRASE").map(_.toArray),
- credentials ++= (for {
- username <- sys.env.get("SONATYPE_USERNAME")
- password <- sys.env.get("SONATYPE_PASSWORD")
- } yield Credentials(
- "Sonatype Nexus Repository Manager",
- "oss.sonatype.org",
- username,
- password
- )).toSeq,
- // git.baseVersion setting represents previously released version
- git.baseVersion := "0.1.0",
- git.gitTagToVersionNumber := {
- case VersionRegex(v, "") => Some(v)
- case VersionRegex(v, "SNAPSHOT") => Some(s"$v-SNAPSHOT")
- case VersionRegex(v, s) => Some(s"$v-$s-SNAPSHOT")
- case _ => None
- },
- git.formattedShaVersion := {
- val suffix = git.makeUncommittedSignifierSuffix(
- git.gitUncommittedChanges.value,
- git.uncommittedSignifier.value
- )
- git.gitHeadCommit.value.map(_.substring(0, 7)).map { sha =>
- git.baseVersion.value + "-" + sha + suffix
- }
- }
- )
-
- def noPublishSettings: Seq[Setting[_]] = Seq(
- publish := {},
- publishLocal := {},
- publishArtifact := false
- )
-
-}
diff --git a/project/Settings.scala b/project/Settings.scala
deleted file mode 100644
index 7da64f9..0000000
--- a/project/Settings.scala
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.exasol.common.sbt
-
-import sbt._
-import sbt.Keys._
-
-import com.typesafe.sbt.SbtGit.git
-import scoverage.ScoverageSbtPlugin.autoImport._
-import org.scalastyle.sbt.ScalastylePlugin.autoImport._
-import wartremover.WartRemover.autoImport.wartremoverErrors
-
-/** A list of (boilerplate) settings for build process */
-object Settings {
-
- def projectSettings(scalaVersion: SettingKey[String]): Seq[Setting[_]] =
- buildSettings(scalaVersion) ++ miscSettings ++ scalaStyleSettings ++ Publishing
- .publishSettings()
-
- def buildSettings(scalaVersion: SettingKey[String]): Seq[Setting[_]] = Seq(
- // Compiler settings
- scalacOptions ++= Compilation.compilerFlagsFn(scalaVersion.value),
- Compile / console / scalacOptions := Compilation.consoleFlagsFn(scalaVersion.value),
- javacOptions ++= Compilation.JavacCompilerFlags,
- Compile / compileOrder := CompileOrder.JavaThenScala
- )
-
- def miscSettings(): Seq[Setting[_]] = Seq(
- // Wartremover settings
- Compile / compile / wartremoverErrors := Compilation.WartremoverFlags,
- Test / compile / wartremoverErrors := Compilation.WartremoverTestFlags,
- // General settings
- Global / cancelable := true,
- // Scoverage settings
- coverageOutputHTML := true,
- coverageOutputXML := true,
- coverageOutputCobertura := true,
- coverageFailOnMinimum := false,
- // Git versioning, use git describe
- git.useGitDescribe := true
- )
-
- /** Creates a Scalastyle tasks that run with unit and integration tests. */
- def scalaStyleSettings(): Seq[Setting[_]] = {
- lazy val mainScalastyle = taskKey[Unit]("mainScalastyle")
- lazy val testScalastyle = taskKey[Unit]("testScalastyle")
- Seq(
- scalastyleFailOnError := true,
- Compile / scalastyleConfig := (ThisBuild / baseDirectory).value / "project" / "scalastyle-config.xml",
- Test / scalastyleConfig := (ThisBuild / baseDirectory).value / "project" / "scalastyle-test-config.xml",
- mainScalastyle := (Compile / scalastyle).toTask("").value,
- testScalastyle := (Compile / scalastyle).toTask("").value,
- Test / test := (Test / test).dependsOn(mainScalastyle).value,
- Test / test := (Test / test).dependsOn(testScalastyle).value
- )
- }
-
-}
diff --git a/project/build.properties b/project/build.properties
deleted file mode 100644
index 10fd9ee..0000000
--- a/project/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-sbt.version=1.5.5
diff --git a/project/plugins.sbt b/project/plugins.sbt
deleted file mode 100644
index 5a62e8a..0000000
--- a/project/plugins.sbt
+++ /dev/null
@@ -1,49 +0,0 @@
-// Adds a `scalafmt` sbt plugin
-// https://github.com/scalameta/sbt-scalafmt
-addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.3")
-
-// Adds a `wartremover` a flexible Scala code linting tool
-// http://github.com/puffnfresh/wartremover
-addSbtPlugin("org.wartremover" % "sbt-wartremover" % "2.4.16")
-
-// Adds Contrib Warts
-// http://github.com/wartremover/wartremover-contrib/
-addSbtPlugin("org.wartremover" % "sbt-wartremover-contrib" % "1.3.12")
-
-// Adds most common doc api mappings
-// https://github.com/ThoughtWorksInc/sbt-api-mappings
-addSbtPlugin("com.thoughtworks.sbt-api-mappings" % "sbt-api-mappings" % "3.0.0")
-
-// Adds Scala Code Coverage (Scoverage) used during unit tests
-// http://github.com/scoverage/sbt-scoverage
-addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.9.1")
-
-// Adds SBT Coveralls plugin for uploading Scala code coverage to
-// https://coveralls.io
-// https://github.com/scoverage/sbt-coveralls
-addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.3.1")
-
-// Adds a `dependencyUpdates` task to check Maven repositories for
-// dependency updates
-// http://github.com/rtimush/sbt-updates
-addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.0")
-
-// Adds `scalastyle` a coding style checker and enforcer
-// https://github.com/scalastyle/scalastyle-sbt-plugin
-addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % "1.0.0")
-
-// Adds a `dependencyUpdates` task to check for dependency updates
-// https://github.com/jrudolph/sbt-dependency-graph
-addSbtPlugin("net.virtual-void" % "sbt-dependency-graph" % "0.10.0-RC1")
-
-// Adds a `sonatype` release tasks
-// https://github.com/xerial/sbt-sonatype
-addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.10")
-
-// Adds a `gnu-pgp` plugin
-// https://github.com/sbt/sbt-pgp
-addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.1.1")
-
-// Adds a `git` plugin
-// https://github.com/sbt/sbt-git
-addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.2")
diff --git a/project/project/plugins.sbt b/project/project/plugins.sbt
deleted file mode 100644
index 353e791..0000000
--- a/project/project/plugins.sbt
+++ /dev/null
@@ -1,3 +0,0 @@
-// Used to get updates for plugins
-// see https://github.com/rtimush/sbt-updates/issues/10
-addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.6.0")
diff --git a/project/scalastyle-test-config.xml b/project/scalastyle-test-config.xml
deleted file mode 100644
index 4818c68..0000000
--- a/project/scalastyle-test-config.xml
+++ /dev/null
@@ -1,479 +0,0 @@
-
-
- Exasol Cloud ETL Scalastyle Configurations (adapted from Spark Scala Style Guide)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- EQUALS, ELSE, TRY, CATCH, FINALLY, LARROW, RARROW
-
-
-
-
-
-
- ARROW, EQUALS, COMMA, COLON, IF, ELSE, DO, WHILE, FOR, MATCH, TRY, CATCH, FINALLY, LARROW, RARROW
-
-
-
-
-
-
-
-
-
-
- ^println$
-
-
-
-
-
-
-
-
- mutable\.SynchronizedBuffer
-
-
-
-
-
-
-
-
- Class\.forName
-
-
-
-
-
-
-
-
- Await\.result
-
-
-
-
-
-
-
-
- Await\.ready
-
-
-
-
-
-
-
-
- JavaConversions
-
-
-
-
-
-
-
-
- org\.apache\.commons\.lang\.
-
-
-
-
-
-
-
-
- extractOpt
-
-
-
-
-
-
-
-
- \)\{
-
-
-
-
-
-
-
-
- (?m)^(\s*)/[*][*].*$(\r|)\n^\1 [*]
-
-
-
-
-
-
-
-
- case[^\n>]*=>\s*\{
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- java,scala,exasol,others
- javax?\..*
- scala\..*
- com\.exasol\..*
- .*
-
-
-
-
-
-
- COMMA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/project/scalastyle-config.xml b/scalastyle-config.xml
similarity index 98%
rename from project/scalastyle-config.xml
rename to scalastyle-config.xml
index ecfc301..fbf88fe 100644
--- a/project/scalastyle-config.xml
+++ b/scalastyle-config.xml
@@ -13,7 +13,7 @@
-->
- Exasol Cloud ETL Scalastyle Configurations (adapted from Spark Scala Style Guide)
+ Exasol Scala Scalastyle Configurations (adapted from Spark Scala Style Guide)
-
+
+
java,scala,exasol,others
javax?\..*
@@ -418,7 +419,7 @@
-
+
diff --git a/scripts/ci.sh b/scripts/ci.sh
deleted file mode 100755
index 5fff77f..0000000
--- a/scripts/ci.sh
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env bash
-
-set -o errtrace -o nounset -o pipefail -o errexit
-
-# Goto parent (base) directory of this script
-BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )"/.. && pwd )"
-cd "$BASE_DIR"
-
-DEFAULT_SCALA_VERSION=2.13.6
-
-if [[ -z "${SCALA_VERSION:-}" ]]; then
- echo "Environment variable SCALA_VERSION is not set"
- echo "Using DEFAULT_SCALA_VERSION: $DEFAULT_SCALA_VERSION"
- SCALA_VERSION=$DEFAULT_SCALA_VERSION
-fi
-
-run_self_check () {
- echo "############################################"
- echo "# #"
- echo "# Self-check #"
- echo "# #"
- echo "############################################"
- # Don't fail here, failing later at the end when all shell scripts are checked anyway.
- shellcheck "$BASE_DIR"/scripts/ci.sh \
- && echo "Self-check succeeded!" || echo "Self-check failed!"
-}
-
-run_cleaning () {
- echo "############################################"
- echo "# #"
- echo "# Cleaning #"
- echo "# #"
- echo "############################################"
- sbt ++$SCALA_VERSION clean
-}
-
-run_unit_tests () {
- echo "############################################"
- echo "# #"
- echo "# Unit testing #"
- echo "# #"
- echo "############################################"
- sbt ++$SCALA_VERSION coverage test
-}
-
-run_coverage_report () {
- echo "############################################"
- echo "# #"
- echo "# Coverage report #"
- echo "# #"
- echo "############################################"
- sbt ++$SCALA_VERSION coverageReport
-}
-
-run_api_doc () {
- echo "############################################"
- echo "# #"
- echo "# Generating API documentaion #"
- echo "# #"
- echo "############################################"
- sbt ++$SCALA_VERSION doc
-}
-
-run_dependency_info () {
- echo "############################################"
- echo "# #"
- echo "# Dependency information #"
- echo "# #"
- echo "############################################"
- sbt ++$SCALA_VERSION dependencyUpdates pluginUpdates dependencyTree
-}
-
-run_shell_check () {
- echo "############################################"
- echo "# #"
- echo "# Shellcheck #"
- echo "# #"
- echo "############################################"
- find . -name "*.sh" -print0 | xargs -n 1 -0 shellcheck
-}
-
-run_clean_worktree_check () {
- echo "############################################"
- echo "# #"
- echo "# Check for clean worktree #"
- echo "# #"
- echo "############################################"
- # To be executed after all other steps, to ensures that there is no uncommitted code and there
- # are no untracked files, which means .gitignore is complete and all code is part of a
- # reviewable commit.
- GIT_STATUS="$(git status --porcelain)"
- if [[ $GIT_STATUS ]]; then
- echo "Your worktree is not clean,"
- echo "there is either uncommitted code or there are untracked files:"
- echo "${GIT_STATUS}"
- exit 1
- fi
-}
-
-run_self_check
-run_cleaning
-run_unit_tests
-run_coverage_report
-run_api_doc
-run_dependency_info
-run_shell_check
-run_clean_worktree_check
diff --git a/sonar-project.properties b/sonar-project.properties
deleted file mode 100644
index dd25f85..0000000
--- a/sonar-project.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-sonar.host.url=https://sonarcloud.io
-sonar.organization=exasol
-sonar.projectKey=com.exasol:import-export-udf-common-scala
-sonar.sources=src/main/scala
-sonar.tests=src/test
-sonar.exclusions=project/Dependencies.scala
-sonar.scala.coverage.reportPaths=target/scala-2.13/scoverage-report/scoverage.xml
-sonar.sourceEncoding=UTF-8
diff --git a/src/assembly/all-dependencies.xml b/src/assembly/all-dependencies.xml
new file mode 100644
index 0000000..efe5abc
--- /dev/null
+++ b/src/assembly/all-dependencies.xml
@@ -0,0 +1,22 @@
+
+ all-dependencies
+
+ jar
+
+ false
+
+
+
+ metaInf-services
+
+
+
+
+ true
+ runtime
+ /
+
+
+
diff --git a/src/main/scala/com/exasol/common/AbstractProperties.scala b/src/main/scala/com/exasol/common/AbstractProperties.scala
index a1434ad..c32e8a9 100644
--- a/src/main/scala/com/exasol/common/AbstractProperties.scala
+++ b/src/main/scala/com/exasol/common/AbstractProperties.scala
@@ -72,7 +72,7 @@ abstract class AbstractProperties(private val properties: Map[String, String]) {
final def parseConnectionInfo(keyForUsername: String, exaMetadata: Option[ExaMetadata]): Map[String, String] = {
val connection = getConnectionInformation(exaMetadata)
val username = connection.getUser()
- val password = connection.getPassword();
+ val password = connection.getPassword()
val map = PropertiesParser(getPropertySeparator(), getKeyValueAssignment()).mapFromString(password)
if (username.isEmpty()) {
map
diff --git a/src/main/scala/com/exasol/common/avro/AvroConverter.scala b/src/main/scala/com/exasol/common/avro/AvroConverter.scala
index 13e8c42..b3dca12 100644
--- a/src/main/scala/com/exasol/common/avro/AvroConverter.scala
+++ b/src/main/scala/com/exasol/common/avro/AvroConverter.scala
@@ -4,8 +4,8 @@ import java.nio.ByteBuffer
import java.sql.Date
import java.sql.Timestamp
import java.time._
-import java.util.{Map => JMap}
import java.util.Collection
+import java.util.{Map => JMap}
import com.exasol.common.json.JsonMapper
import com.exasol.errorreporting.ExaError
@@ -156,9 +156,9 @@ final class AvroConverter {
typesSize match {
case 1 => getAvroValue(value, types.get(0))
case 2 =>
- if (types.get(0).getType() == Schema.Type.NULL) {
+ if (isNullSchemaType(types.get(0).getType())) {
getAvroValue(value, types.get(1))
- } else if (types.get(1).getType() == Schema.Type.NULL) {
+ } else if (isNullSchemaType(types.get(1).getType())) {
getAvroValue(value, types.get(0))
} else {
throw new IllegalArgumentException(getAvroUnionErrorMessage())
@@ -167,6 +167,11 @@ final class AvroConverter {
}
}
+ private[this] def isNullSchemaType(avroType: Schema.Type): Boolean = avroType match {
+ case Schema.Type.NULL => true
+ case _ => false
+ }
+
private[this] def getAvroUnionErrorMessage(): String =
ExaError
.messageBuilder("E-IEUCS-7")
diff --git a/src/test/resources/logging.properties b/src/test/resources/logging.properties
new file mode 100644
index 0000000..8c97abe
--- /dev/null
+++ b/src/test/resources/logging.properties
@@ -0,0 +1,6 @@
+handlers=java.util.logging.ConsoleHandler
+.level=INFO
+java.util.logging.ConsoleHandler.level=ALL
+java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
+java.util.logging.SimpleFormatter.format=%1$tF %1$tT.%1$tL [%4$-7s] %5$s %n
+com.exasol.level=ALL
diff --git a/src/test/scala/com/exasol/common/AbstractPropertiesTest.scala b/src/test/scala/com/exasol/common/AbstractPropertiesTest.scala
index f7f2172..02a28c9 100644
--- a/src/test/scala/com/exasol/common/AbstractPropertiesTest.scala
+++ b/src/test/scala/com/exasol/common/AbstractPropertiesTest.scala
@@ -1,8 +1,11 @@
package com.exasol.common
-import com.exasol.{ExaConnectionInformation, ExaMetadata}
+import com.exasol.ExaConnectionInformation
+import com.exasol.ExaMetadata
-import org.mockito.Mockito.{times, verify, when}
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.when
import org.scalatest.BeforeAndAfterEach
import org.scalatest.funsuite.AnyFunSuite
import org.scalatestplus.mockito.MockitoSugar
@@ -181,33 +184,28 @@ class AbstractPropertiesTest extends AnyFunSuite with BeforeAndAfterEach with Mo
test("parseConnectionInfo returns key value pairs from password") {
properties = Map("CONNECTION_NAME" -> "connection_info")
val expected = Map("a" -> "secret1", "b" -> "secret2")
- assertParseConnectionInfo("", "a=secret1;b=secret2", properties, expected)
+ assertParseConnectionInfo("", "a=secret1;b=secret2", expected)
}
test("parseConnectionInfo returns key value pairs with updated username") {
properties = Map("CONNECTION_NAME" -> "connection_info")
val expected = Map("userKey" -> "John", "a" -> "secret1", "b" -> "secret2")
- assertParseConnectionInfo("John", "a=secret1;b=secret2", properties, expected)
+ assertParseConnectionInfo("John", "a=secret1;b=secret2", expected)
}
test("parseConnectionInfo returns key value pairs with custom separators") {
properties = Map("CONNECTION_NAME" -> "connection_info", "CONNECTION_SEPARATOR" -> "#")
val expected = Map("k1" -> "v1", "k2" -> "v2", "k3" -> "v3;k4=v4")
- assertParseConnectionInfo("", "k1=v1#k2=v2#k3=v3;k4=v4", properties, expected)
+ assertParseConnectionInfo("", "k1=v1#k2=v2#k3=v3;k4=v4", expected)
}
test("parseConnectionInfo returns key value pairs with custom key-value assignment") {
properties = Map("CONNECTION_NAME" -> "connection_info", "CONNECTION_KEYVALUE_ASSIGNMENT" -> "@@")
val expected = Map("k1" -> "v1", "k2" -> "v2", "k3" -> "v3", "k4" -> "v4")
- assertParseConnectionInfo("", "k1@@v1;k2@@v2;k3@@v3;k4@@v4", properties, expected)
+ assertParseConnectionInfo("", "k1@@v1;k2@@v2;k3@@v3;k4@@v4", expected)
}
- private[this] def assertParseConnectionInfo(
- user: String,
- password: String,
- props: Map[String, String],
- expected: Map[String, String]
- ): Unit = {
+ private[this] def assertParseConnectionInfo(user: String, password: String, expected: Map[String, String]): Unit = {
val metadata = mockMetadata(user, password)
val result = BaseProperties(properties).parseConnectionInfo("userKey", Option(metadata))
assert(result === expected)
diff --git a/src/test/scala/com/exasol/common/json/JsonMapperTest.scala b/src/test/scala/com/exasol/common/json/JsonMapperTest.scala
index 57fd5ad..843fee6 100644
--- a/src/test/scala/com/exasol/common/json/JsonMapperTest.scala
+++ b/src/test/scala/com/exasol/common/json/JsonMapperTest.scala
@@ -3,7 +3,6 @@ package com.exasol.common.json
import java.util.LinkedHashMap
import com.fasterxml.jackson.databind.JsonNode
-
import org.scalatest.funsuite.AnyFunSuite
class JsonMapperTest extends AnyFunSuite {
diff --git a/versionsMavenPluginRules.xml b/versionsMavenPluginRules.xml
new file mode 100644
index 0000000..35bd03d
--- /dev/null
+++ b/versionsMavenPluginRules.xml
@@ -0,0 +1,18 @@
+
+
+
+
+ (?i).*Alpha(?:-?[\d.]+)?
+ (?i).*a(?:-?[\d.]+)?
+ (?i).*Beta(?:-?[\d.]+)?
+ (?i).*-B(?:-?[\d.]+)?
+ (?i).*-b(?:-?[\d.]+)?
+ (?i).*RC(?:-?[\d.]+)?
+ (?i).*CR(?:-?[\d.]+)?
+ (?i).*M(?:-?[\d.]+)?
+
+
+
+
\ No newline at end of file