diff --git a/spring-integration-kotlin-dsl/.gitignore b/spring-integration-kotlin-dsl/.gitignore deleted file mode 100644 index b412f22..0000000 --- a/spring-integration-kotlin-dsl/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -target -.settings -.springBeans -.classpath -.project -/.idea -/.gradle -/build -/*.iml -/*.ipr -/*.iws -/bin/ diff --git a/spring-integration-kotlin-dsl/CODE_OF_CONDUCT.adoc b/spring-integration-kotlin-dsl/CODE_OF_CONDUCT.adoc deleted file mode 100644 index 17783c7..0000000 --- a/spring-integration-kotlin-dsl/CODE_OF_CONDUCT.adoc +++ /dev/null @@ -1,44 +0,0 @@ -= Contributor Code of Conduct - -As contributors and maintainers of this project, and in the interest of fostering an open -and welcoming community, we pledge to respect all people who contribute through reporting -issues, posting feature requests, updating documentation, submitting pull requests or -patches, and other activities. - -We are committed to making participation in this project a harassment-free experience for -everyone, regardless of level of experience, gender, gender identity and expression, -sexual orientation, disability, personal appearance, body size, race, ethnicity, age, -religion, or nationality. - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery -* Personal attacks -* Trolling or insulting/derogatory comments -* Public or private harassment -* Publishing other's private information, such as physical or electronic addresses, - without explicit permission -* Other unethical or unprofessional conduct - -Project maintainers have the right and responsibility to remove, edit, or reject comments, -commits, code, wiki edits, issues, and other contributions that are not aligned to this -Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors -that they deem inappropriate, threatening, offensive, or harmful. - -By adopting this Code of Conduct, project maintainers commit themselves to fairly and -consistently applying these principles to every aspect of managing this project. Project -maintainers who do not follow or enforce the Code of Conduct may be permanently removed -from the project team. - -This Code of Conduct applies both within project spaces and in public spaces when an -individual is representing the project or its community. - -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by -contacting a project maintainer at spring-code-of-conduct@pivotal.io . All complaints will -be reviewed and investigated and will result in a response that is deemed necessary and -appropriate to the circumstances. Maintainers are obligated to maintain confidentiality -with regard to the reporter of an incident. - -This Code of Conduct is adapted from the -https://contributor-covenant.org[Contributor Covenant], version 1.3.0, available at -https://contributor-covenant.org/version/1/3/0/[contributor-covenant.org/version/1/3/0/] diff --git a/spring-integration-kotlin-dsl/build.gradle b/spring-integration-kotlin-dsl/build.gradle deleted file mode 100644 index 8b7c4b9..0000000 --- a/spring-integration-kotlin-dsl/build.gradle +++ /dev/null @@ -1,206 +0,0 @@ -plugins { - id 'java' - id 'eclipse' - id 'idea' - id 'jacoco' - id 'org.sonarqube' version '2.8' - id 'io.spring.dependency-management' version '1.0.9.RELEASE' - id 'org.jetbrains.kotlin.jvm' version "$kotlinVersion" - id 'org.jetbrains.kotlin.plugin.spring' version "$kotlinVersion" - id 'org.jetbrains.dokka' version '0.9.18' -} - -apply from: "${rootProject.projectDir}/publish-maven.gradle" - -description = 'Spring Integration Kotlin DSL' - -group = 'org.springframework.integration' - -repositories { -// mavenLocal() - if (version.endsWith('BUILD-SNAPSHOT')) { - maven { url 'https://repo.spring.io/libs-snapshot' } - } - maven { url 'https://repo.spring.io/libs-milestone' } -// maven { url 'https://repo.spring.io/libs-staging-local' } -} - -ext { - assertkVersion = '0.20' - jacksonVersion = '2.10.1' - junitVersion = '5.6.0' - log4jVersion = '2.13.0' - reactorVersion = 'Dysprosium-SR4' - springIntegrationVersion = '5.2.3.RELEASE' - - idPrefix = 'kotlin-dsl' - - linkHomepage = 'https://github.com/spring-projects/spring-integration-extensions' - linkCi = 'https://build.spring.io/browse/INTEXT' - linkIssue = 'https://github.com/spring-projects/spring-integration-extensions/issues' - linkScmUrl = 'https://github.com/spring-projects/spring-integration-extensions' - linkScmConnection = 'https://github.com/spring-projects/spring-integration-extensions.git' - linkScmDevConnection = 'git@github.com:spring-projects/spring-integration-extensions.git' - -} - -dependencyManagement { - resolutionStrategy { - cacheChangingModulesFor 0, 'seconds' - } - applyMavenExclusions = false - generatedPomCustomization { - enabled = false - } - - imports { - mavenBom "com.fasterxml.jackson:jackson-bom:$jacksonVersion" - mavenBom "org.junit:junit-bom:$junitVersion" - mavenBom "org.springframework.integration:spring-integration-bom:$springIntegrationVersion" - mavenBom "org.apache.logging.log4j:log4j-bom:$log4jVersion" - mavenBom "io.projectreactor:reactor-bom:$reactorVersion" - } - -} - -compileKotlin { - kotlinOptions { - jvmTarget = '1.8' - allWarningsAsErrors = true - } -} -compileTestKotlin { - kotlinOptions { - jvmTarget = '1.8' - } -} - - -eclipse.project.natures += 'org.springframework.ide.eclipse.core.springnature' - - -jacoco { - toolVersion = '0.8.5' -} - -dependencies { - implementation 'org.jetbrains.kotlin:kotlin-reflect' - implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' - implementation 'org.springframework.integration:spring-integration-core' - - testImplementation 'org.springframework.integration:spring-integration-test' - testImplementation 'org.junit.jupiter:junit-jupiter-api' - testImplementation "com.willowtreeapps.assertk:assertk-jvm:$assertkVersion" - testImplementation 'io.projectreactor:reactor-test' - - testRuntime 'com.fasterxml.jackson.module:jackson-module-kotlin' - testRuntime 'org.junit.jupiter:junit-jupiter-engine' - testRuntime 'org.junit.platform:junit-platform-launcher' - testRuntime 'org.apache.logging.log4j:log4j-jcl' - testRuntime 'org.apache.logging.log4j:log4j-core' -} - -test { - // suppress all console output during testing unless running `gradle -i` - logging.captureStandardOutput(LogLevel.INFO) - jacoco { - destinationFile = file("$buildDir/jacoco.exec") - } - useJUnitPlatform() -} - -jacocoTestReport { - reports { - xml.enabled false - csv.enabled false - html.destination file("${buildDir}/reports/jacoco/html") - } -} - -task api(type: org.jetbrains.dokka.gradle.DokkaTask) { - outputFormat = 'html' - outputDirectory = "$buildDir/api" - externalDocumentationLink { - url = new URL("https://docs.spring.io/spring-integration/docs/$springIntegrationVersion/api/") - } - externalDocumentationLink { - url = new URL('https://docs.spring.io/spring-framework/docs/current/javadoc-api/') - } - externalDocumentationLink { - url = new URL('https://projectreactor.io/docs/core/release/api/') - } - externalDocumentationLink { - url = new URL('https://www.reactive-streams.org/reactive-streams-1.0.1-javadoc/') - } -} - -check.dependsOn api -build.dependsOn jacocoTestReport - - -task sourcesJar(type: Jar) { - archiveClassifier = 'sources' - from sourceSets.main.kotlin -} - -task javadocJar(type: Jar) { - archiveClassifier = 'javadoc' - from api -} - -sonarqube { - properties { - property 'sonar.jacoco.reportPath', "${buildDir.name}/jacoco.exec" - property 'sonar.links.homepage', linkHomepage - property 'sonar.links.ci', linkCi - property 'sonar.links.issue', linkIssue - property 'sonar.links.scm', linkScmUrl - property 'sonar.links.scm_dev', linkScmDevConnection - property 'sonar.java.coveragePlugin', 'jacoco' - } -} - -task docsZip(type: Zip) { - group = 'Distribution' - archiveClassifier = 'docs' - from(api) { - into 'api' - } -} - -task distZip(type: Zip, dependsOn: docsZip) { - group = 'Distribution' - archiveClassifier = 'dist' - description = "Builds -${archiveClassifier} archive, containing all jars and docs, " + - "suitable for community download page." - - ext.baseDir = "${project.name}-${project.version}"; - - from('src/dist') { - include 'readme.txt' - include 'license.txt' - into "${baseDir}" - } - - into("${baseDir}/libs") { - from project.jar - from project.sourcesJar - from project.javadocJar - } - - from(zipTree(docsZip.archiveFile)) { - into "${baseDir}/docs" - } -} - -artifacts { - archives sourcesJar - archives javadocJar - archives distZip - archives docsZip -} - -task dist(dependsOn: assemble) { - group = 'Distribution' - description = 'Builds -dist, -docs and -schema distribution archives.' -} diff --git a/spring-integration-kotlin-dsl/gradle.properties b/spring-integration-kotlin-dsl/gradle.properties deleted file mode 100644 index 3e7a656..0000000 --- a/spring-integration-kotlin-dsl/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -version=0.0.3.BUILD-SNAPSHOT -kotlinVersion=1.3.61 diff --git a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar b/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index f3d88b1..0000000 Binary files a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties b/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 1b16c34..0000000 --- a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/spring-integration-kotlin-dsl/gradlew b/spring-integration-kotlin-dsl/gradlew deleted file mode 100755 index 2fe81a7..0000000 --- a/spring-integration-kotlin-dsl/gradlew +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/spring-integration-kotlin-dsl/gradlew.bat b/spring-integration-kotlin-dsl/gradlew.bat deleted file mode 100644 index 9618d8d..0000000 --- a/spring-integration-kotlin-dsl/gradlew.bat +++ /dev/null @@ -1,100 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/spring-integration-kotlin-dsl/publish-maven.gradle b/spring-integration-kotlin-dsl/publish-maven.gradle deleted file mode 100644 index 0800193..0000000 --- a/spring-integration-kotlin-dsl/publish-maven.gradle +++ /dev/null @@ -1,84 +0,0 @@ -apply plugin: 'maven' - -ext.optionalDeps = [] -ext.providedDeps = [] - -ext.optional = { optionalDeps << it } -ext.provided = { providedDeps << it } - -install { - repositories.mavenInstaller { - customizePom(pom, project) - } -} - -def customizePom(pom, gradleProject) { - pom.whenConfigured { generatedPom -> - - // sort to make pom dependencies order consistent to ease comparison of older poms - generatedPom.dependencies = generatedPom.dependencies.sort { dep -> - "$dep.scope:$dep.groupId:$dep.artifactId" - } - - def managedVersions = dependencyManagement.managedVersions - generatedPom.dependencies.findAll{dep -> !dep.version }.each { dep -> - dep.version = managedVersions["${dep.groupId}:${dep.artifactId}"] - } - - // respect 'optional' and 'provided' dependencies - gradleProject.optionalDeps.each { dep -> - generatedPom.dependencies.find { it.artifactId == dep.name }?.optional = true - } - gradleProject.providedDeps.each { dep -> - generatedPom.dependencies.find { it.artifactId == dep.name }?.scope = 'provided' - } - - // eliminate test-scoped dependencies (no need in maven central poms) - generatedPom.dependencies.removeAll { dep -> - dep.scope == 'test' - } - - // add all items necessary for maven central publication - generatedPom.project { - name = gradleProject.description - description = gradleProject.description - url = linkHomepage - organization { - name = 'SpringIO' - url = 'https://spring.io' - } - licenses { - license { - name 'The Apache Software License, Version 2.0' - url 'https://www.apache.org/licenses/LICENSE-2.0.txt' - distribution 'repo' - } - } - - scm { - url = linkScmUrl - connection = "scm:git:$linkScmConnection" - developerConnection = "scm:git:$linkScmDevConnection" - } - - issueManagement { - system = 'GutHub' - url = linkIssue - } - - developers { - developer { - id = 'garyrussell' - name = 'Gary Russell' - email = 'grussell@pivotal.io' - roles = ['project lead'] - } - developer { - id = 'abilan' - name = 'Artem Bilan' - email = 'abilan@pivotal.io' - } - } - } - } -} diff --git a/spring-integration-kotlin-dsl/settings.gradle b/spring-integration-kotlin-dsl/settings.gradle deleted file mode 100644 index efdf962..0000000 --- a/spring-integration-kotlin-dsl/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = 'spring-integration-kotlin-dsl' diff --git a/spring-integration-kotlin-dsl/src/dist/license.txt b/spring-integration-kotlin-dsl/src/dist/license.txt deleted file mode 100644 index 7c50aab..0000000 --- a/spring-integration-kotlin-dsl/src/dist/license.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by testData1) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class testData1 and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [testData1 of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowDsl.kt b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowDsl.kt deleted file mode 100644 index f33dbbb..0000000 --- a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/IntegrationFlowDsl.kt +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2019-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.dsl.kotlin - -import org.reactivestreams.Publisher -import org.springframework.integration.core.MessageSource -import org.springframework.integration.dsl.GatewayProxySpec -import org.springframework.integration.dsl.IntegrationFlow -import org.springframework.integration.dsl.IntegrationFlowBuilder -import org.springframework.integration.dsl.IntegrationFlows -import org.springframework.integration.dsl.MessageProducerSpec -import org.springframework.integration.dsl.MessageSourceSpec -import org.springframework.integration.dsl.MessagingGatewaySpec -import org.springframework.integration.dsl.SourcePollingChannelAdapterSpec -import org.springframework.integration.endpoint.MessageProducerSupport -import org.springframework.integration.gateway.MessagingGatewaySupport -import org.springframework.messaging.Message -import org.springframework.messaging.MessageChannel -import java.util.function.Consumer - -private fun buildIntegrationFlow(flowBuilder: IntegrationFlowBuilder, - flow: (KotlinIntegrationFlowDefinition) -> Unit): IntegrationFlow { - - flow(KotlinIntegrationFlowDefinition(flowBuilder)) - return flowBuilder.get() -} - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlow] lambdas. - * - * @author Artem Bilan - */ -fun integrationFlow(flow: KotlinIntegrationFlowDefinition.() -> Unit) = - IntegrationFlow { - flow(KotlinIntegrationFlowDefinition(it)) - } - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(Class, Consumer)` factory method. - * - * @author Artem Bilan - */ -inline fun integrationFlow( - crossinline gateway: GatewayProxySpec.() -> Unit = {}, - flow: KotlinIntegrationFlowDefinition.() -> Unit): IntegrationFlow { - - val flowBuilder = IntegrationFlows.from(T::class.java) { gateway(it) } - flow(KotlinIntegrationFlowDefinition(flowBuilder)) - return flowBuilder.get() -} - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(String, Boolean)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(channelName: String, fixedSubscriber: Boolean = false, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(channelName, fixedSubscriber), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessageChannel)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(channel: MessageChannel, flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(channel), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessageSource<*>, Consumer)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(messageSource: MessageSource<*>, - options: SourcePollingChannelAdapterSpec.() -> Unit = {}, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(messageSource, Consumer { options(it) }), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessageSourceSpec<*>, Consumer)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(messageSource: MessageSourceSpec<*, out MessageSource<*>>, - options: SourcePollingChannelAdapterSpec.() -> Unit = {}, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(messageSource, options), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(Supplier<*>, Consumer)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(source: () -> Any, - options: SourcePollingChannelAdapterSpec.() -> Unit = {}, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(source, options), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(Publisher>)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(publisher: Publisher>, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(publisher), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessagingGatewaySupport)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(gateway: MessagingGatewaySupport, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(gateway), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessagingGatewaySpec<*, *>)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(gatewaySpec: MessagingGatewaySpec<*, *>, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(gatewaySpec), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessageProducerSupport)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(producer: MessageProducerSupport, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(producer), flow) - -/** - * Functional [IntegrationFlow] definition in Kotlin DSL for [IntegrationFlows.from] - - * `IntegrationFlows.from(MessageProducerSpec<*, *>)` factory method. - * - * @author Artem Bilan - */ -fun integrationFlow(producerSpec: MessageProducerSpec<*, *>, - flow: KotlinIntegrationFlowDefinition.() -> Unit) = - buildIntegrationFlow(IntegrationFlows.from(producerSpec), flow) diff --git a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/KotlinIntegrationFlowDefinition.kt b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/KotlinIntegrationFlowDefinition.kt deleted file mode 100644 index 7415d36..0000000 --- a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/kotlin/KotlinIntegrationFlowDefinition.kt +++ /dev/null @@ -1,1059 +0,0 @@ -/* - * Copyright 2019-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.dsl.kotlin - -import org.reactivestreams.Publisher -import org.springframework.expression.Expression -import org.springframework.integration.aggregator.AggregatingMessageHandler -import org.springframework.integration.channel.FluxMessageChannel -import org.springframework.integration.channel.interceptor.WireTap -import org.springframework.integration.core.MessageSelector -import org.springframework.integration.dsl.AggregatorSpec -import org.springframework.integration.dsl.BarrierSpec -import org.springframework.integration.dsl.Channels -import org.springframework.integration.dsl.DelayerEndpointSpec -import org.springframework.integration.dsl.EnricherSpec -import org.springframework.integration.dsl.FilterEndpointSpec -import org.springframework.integration.dsl.GatewayEndpointSpec -import org.springframework.integration.dsl.GenericEndpointSpec -import org.springframework.integration.dsl.HeaderEnricherSpec -import org.springframework.integration.dsl.IntegrationFlow -import org.springframework.integration.dsl.IntegrationFlowDefinition -import org.springframework.integration.dsl.MessageChannelSpec -import org.springframework.integration.dsl.MessageHandlerSpec -import org.springframework.integration.dsl.MessageProcessorSpec -import org.springframework.integration.dsl.PublishSubscribeSpec -import org.springframework.integration.dsl.RecipientListRouterSpec -import org.springframework.integration.dsl.ResequencerSpec -import org.springframework.integration.dsl.RouterSpec -import org.springframework.integration.dsl.ScatterGatherSpec -import org.springframework.integration.dsl.SplitterEndpointSpec -import org.springframework.integration.dsl.WireTapSpec -import org.springframework.integration.dsl.support.MessageChannelReference -import org.springframework.integration.filter.MessageFilter -import org.springframework.integration.filter.MethodInvokingSelector -import org.springframework.integration.handler.BridgeHandler -import org.springframework.integration.handler.DelayHandler -import org.springframework.integration.handler.GenericHandler -import org.springframework.integration.handler.LoggingHandler -import org.springframework.integration.handler.MessageProcessor -import org.springframework.integration.handler.MessageTriggerAction -import org.springframework.integration.handler.ServiceActivatingHandler -import org.springframework.integration.router.AbstractMessageRouter -import org.springframework.integration.router.ErrorMessageExceptionTypeRouter -import org.springframework.integration.router.ExpressionEvaluatingRouter -import org.springframework.integration.router.MethodInvokingRouter -import org.springframework.integration.router.RecipientListRouter -import org.springframework.integration.scattergather.ScatterGatherHandler -import org.springframework.integration.splitter.AbstractMessageSplitter -import org.springframework.integration.splitter.DefaultMessageSplitter -import org.springframework.integration.splitter.ExpressionEvaluatingSplitter -import org.springframework.integration.splitter.MethodInvokingSplitter -import org.springframework.integration.store.MessageStore -import org.springframework.integration.support.MapBuilder -import org.springframework.integration.transformer.ClaimCheckInTransformer -import org.springframework.integration.transformer.ClaimCheckOutTransformer -import org.springframework.integration.transformer.ExpressionEvaluatingTransformer -import org.springframework.integration.transformer.HeaderFilter -import org.springframework.integration.transformer.MessageTransformingHandler -import org.springframework.integration.transformer.MethodInvokingTransformer -import org.springframework.messaging.Message -import org.springframework.messaging.MessageChannel -import org.springframework.messaging.MessageHandler -import org.springframework.messaging.MessageHeaders -import reactor.core.publisher.Flux -import java.util.concurrent.Executor -import java.util.function.Consumer - -/** - * An [IntegrationFlowDefinition] wrapped for Kotlin DSL. - * - * @property delegate the [IntegrationFlowDefinition] this instance is delegating to. - * - * @author Artem Bilan - */ -class KotlinIntegrationFlowDefinition(@PublishedApi internal val delegate: IntegrationFlowDefinition<*>) { - - /** - * Inline function for [IntegrationFlowDefinition.convert] providing a `convert()` variant - * with reified generic type. - */ - inline fun convert( - crossinline configurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.convert(T::class.java) { configurer(it) } - } - - /** - * Inline function for [IntegrationFlowDefinition.transform] providing a `transform()` variant - * with reified generic type. - */ - inline fun transform(crossinline function: (P) -> Any) { - this.delegate.transform(P::class.java) { function(it) } - } - - /** - * Inline function for [IntegrationFlowDefinition.transform] providing a `transform()` variant - * with reified generic type. - */ - inline fun transform( - crossinline function: (P) -> Any, - crossinline configurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.transform(P::class.java, { function(it) }) { configurer(it) } - } - - /** - * Inline function for [IntegrationFlowDefinition.split] providing a `split()` variant - * with reified generic type. - */ - inline fun split(crossinline function: (P) -> Any) { - this.delegate.split(P::class.java) { function(it) } - } - - - /** - * Inline function for [IntegrationFlowDefinition.split] providing a `split()` variant - * with reified generic type. - */ - inline fun split( - crossinline function: (P) -> Any, - crossinline configurer: SplitterEndpointSpec.() -> Unit) { - - this.delegate.split(P::class.java, { function(it) }) { configurer(it) } - } - - /** - * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant - * with reified generic type. - */ - inline fun filter(crossinline function: (P) -> Boolean) { - this.delegate.filter(P::class.java) { function(it) } - } - - /** - * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant - * with reified generic type. - */ - inline fun filter( - crossinline function: (P) -> Boolean, - crossinline configurer: FilterEndpointSpec.() -> Unit) { - - this.delegate.filter(P::class.java, { function(it) }) { configurer(it) } - } - - - /** - * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant - * with reified generic type. - */ - inline fun route(crossinline function: (P) -> Any?) { - route(function) { } - } - - /** - * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant - * with reified generic type. - */ - inline fun route( - crossinline function: (P) -> T, - crossinline configurer: RouterSpec.() -> Unit) { - - this.delegate.route(P::class.java, { function(it) }) { configurer(it) } - } - - /** - * Populate an [org.springframework.integration.channel.FixedSubscriberChannel] instance - * at the current [IntegrationFlow] chain position. - * The provided `messageChannelName` is used for the bean registration. - */ - fun fixedSubscriberChannel(messageChannelName: String? = null) { - this.delegate.fixedSubscriberChannel(messageChannelName) - } - - /** - * Populate a [MessageChannelReference] instance - * at the current [IntegrationFlow] chain position. - * The provided `messageChannelName` is used for the bean registration - * ([org.springframework.integration.channel.DirectChannel]), if there is no such a bean - * in the application context. Otherwise the existing [MessageChannel] bean is used - * to wire integration endpoints. - */ - fun channel(messageChannelName: String) { - this.delegate.channel(messageChannelName) - } - - /** - * Populate a [MessageChannel] instance - * at the current [IntegrationFlow] chain position using the [MessageChannelSpec] - * fluent API. - */ - fun channel(messageChannelSpec: MessageChannelSpec<*, *>) { - this.delegate.channel(messageChannelSpec) - } - - /** - * Populate the provided [MessageChannel] instance - * at the current [IntegrationFlow] chain position. - * The `messageChannel` can be an existing bean, or fresh instance, in which case - * the [org.springframework.integration.dsl.context.IntegrationFlowBeanPostProcessor] - * will populate it as a bean with a generated name. - */ - fun channel(messageChannel: MessageChannel) { - this.delegate.channel(messageChannel) - } - - /** - * Populate a [MessageChannel] instance - * at the current [IntegrationFlow] chain position using the [Channels] - * factory fluent API. - */ - fun channel(channels: Channels.() -> MessageChannelSpec<*, *>) { - this.delegate.channel(channels) - } - - /** - * The [org.springframework.integration.channel.PublishSubscribeChannel] `channel()` - * method specific implementation to allow the use of the 'subflow' subscriber capability. - */ - fun publishSubscribeChannel(publishSubscribeChannelConfigurer: PublishSubscribeSpec.() -> Unit) { - this.delegate.publishSubscribeChannel(publishSubscribeChannelConfigurer) - } - - /** - * The [org.springframework.integration.channel.PublishSubscribeChannel] `channel()` - * method specific implementation to allow the use of the 'subflow' subscriber capability. - * Use the provided [Executor] for the target subscribers. - */ - fun publishSubscribeChannel(executor: Executor, - publishSubscribeChannelConfigurer: PublishSubscribeSpec.() -> Unit) { - - this.delegate.publishSubscribeChannel(executor, Consumer(publishSubscribeChannelConfigurer)) - } - - /** - * Populate the `Wire Tap` EI Pattern specific - * [org.springframework.messaging.support.ChannelInterceptor] implementation - * to the current channel. - * This method can be used after any `channel()` for explicit [MessageChannel], - * but with the caution do not impact existing [org.springframework.messaging.support.ChannelInterceptor]s. - */ - fun wireTap(flow: KotlinIntegrationFlowDefinition.() -> Unit) { - this.delegate.wireTap(IntegrationFlow { flow(KotlinIntegrationFlowDefinition(it)) }) - } - - /** - * Populate the `Wire Tap` EI Pattern specific - * [org.springframework.messaging.support.ChannelInterceptor] implementation - * to the current channel. - * This method can be used after any `channel()` for explicit [MessageChannel], - * but with the caution do not impact existing [org.springframework.messaging.support.ChannelInterceptor]s. - */ - fun wireTap(wireTapConfigurer: WireTapSpec.() -> Unit, flow: KotlinIntegrationFlowDefinition.() -> Unit) { - this.delegate.wireTap( - IntegrationFlow { flow(KotlinIntegrationFlowDefinition(it)) }, - Consumer(wireTapConfigurer)) - } - - /** - * Populate the `Wire Tap` EI Pattern specific - * [org.springframework.messaging.support.ChannelInterceptor] implementation - * to the current channel. - * This method can be used after any `channel()` for explicit [MessageChannel], - * but with the caution do not impact existing [org.springframework.messaging.support.ChannelInterceptor]s. - */ - fun wireTap(wireTapChannel: String, wireTapConfigurer: WireTapSpec.() -> Unit = {}) { - this.delegate.wireTap(wireTapChannel, wireTapConfigurer) - } - - /** - * Populate the `Wire Tap` EI Pattern specific - * [org.springframework.messaging.support.ChannelInterceptor] implementation - * to the current channel. - * This method can be used after any `channel()` for explicit [MessageChannel], - * but with the caution do not impact existing [org.springframework.messaging.support.ChannelInterceptor]s. - */ - fun wireTap(wireTapChannel: MessageChannel, wireTapConfigurer: WireTapSpec.() -> Unit = {}) { - this.delegate.wireTap(wireTapChannel, Consumer(wireTapConfigurer)) - } - - /** - * Populate the `Wire Tap` EI Pattern specific - * [org.springframework.messaging.support.ChannelInterceptor] implementation - * to the current channel. - * This method can be used after any `channel()` for explicit [MessageChannel], - * but with the caution do not impact existing [org.springframework.messaging.support.ChannelInterceptor]s. - */ - fun wireTap(wireTapSpec: WireTapSpec) { - this.delegate.wireTap(wireTapSpec) - } - - /** - * Populate the `Control Bus` EI Pattern specific [MessageHandler] implementation - * at the current [IntegrationFlow] chain position. - */ - fun controlBus(endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - this.delegate.controlBus(endpointConfigurer) - } - - /** - * Populate the `Transformer` EI Pattern specific [MessageHandler] implementation - * for the SpEL [Expression]. - */ - fun transform(expression: String, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.transform(expression, endpointConfigurer) - } - - /** - * Populate the `MessageTransformingHandler` for the [MethodInvokingTransformer] - * to invoke the service method at runtime. - */ - fun transform(service: Any, methodName: String? = null) { - this.delegate.transform(service, methodName) - } - - /** - * Populate the `MessageTransformingHandler` for the [MethodInvokingTransformer] - * to invoke the service method at runtime. - */ - fun transform(service: Any, methodName: String?, - endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.transform(service, methodName, endpointConfigurer) - } - - /** - * Populate the [MessageTransformingHandler] instance for the - * [org.springframework.integration.handler.MessageProcessor] from provided [MessageProcessorSpec]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun transform(messageProcessorSpec: MessageProcessorSpec<*>, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.transform(messageProcessorSpec, endpointConfigurer) - } - - /** - * Populate a [MessageFilter] with [MessageSelector] for the provided SpEL expression. - * In addition accept options for the integration endpoint using [FilterEndpointSpec]: - */ - fun filter(expression: String, endpointConfigurer: FilterEndpointSpec.() -> Unit = {}) { - this.delegate.filter(expression, endpointConfigurer) - } - - /** - * Populate a [MessageFilter] with [MethodInvokingSelector] for the - * method of the provided service. - */ - fun filter(service: Any, methodName: String? = null) { - this.delegate.filter(service, methodName) - } - - /** - * Populate a [MessageFilter] with [MethodInvokingSelector] for the - * method of the provided service. - */ - fun filter(service: Any, methodName: String?, endpointConfigurer: FilterEndpointSpec.() -> Unit) { - this.delegate.filter(service, methodName, endpointConfigurer) - } - - /** - * Populate a [MessageFilter] with [MethodInvokingSelector] - * for the [MessageProcessor] from - * the provided [MessageProcessorSpec]. - * In addition accept options for the integration endpoint using [FilterEndpointSpec]. - */ - fun filter(messageProcessorSpec: MessageProcessorSpec<*>, endpointConfigurer: FilterEndpointSpec.() -> Unit = {}) { - this.delegate.filter(messageProcessorSpec, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] for the selected protocol specific - * [MessageHandler] implementation from `Namespace Factory`: - */ - fun handle(messageHandlerSpec: MessageHandlerSpec<*, H>) { - this.delegate.handle(messageHandlerSpec) - } - - /** - * Populate a [ServiceActivatingHandler] for the provided - * [MessageHandler] implementation. - */ - fun handle(messageHandler: MessageHandler) { - this.delegate.handle(messageHandler) - } - - /** - * Populate a [ServiceActivatingHandler] for the - * [org.springframework.integration.handler.MethodInvokingMessageProcessor] - * to invoke the `method` for provided `bean` at runtime. - */ - fun handle(beanName: String, methodName: String? = null) { - this.delegate.handle(beanName, methodName) - } - - /** - * Populate a [ServiceActivatingHandler] for the - * [org.springframework.integration.handler.MethodInvokingMessageProcessor] - * to invoke the `method` for provided `bean` at runtime. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(beanName: String, methodName: String?, - endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.handle(beanName, methodName, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] for the - * [org.springframework.integration.handler.MethodInvokingMessageProcessor] - * to invoke the `method` for provided `bean` at runtime. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(service: Any, methodName: String? = null) { - this.delegate.handle(service, methodName) - } - - /** - * Populate a [ServiceActivatingHandler] for the - * [org.springframework.integration.handler.MethodInvokingMessageProcessor] - * to invoke the `method` for provided `bean` at runtime. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(service: Any, methodName: String?, - endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.handle(service, methodName, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] for the - * [org.springframework.integration.handler.MethodInvokingMessageProcessor] - * to invoke the provided [GenericHandler] at runtime. - */ - inline fun handle(crossinline handler: (P, MessageHeaders) -> Any) { - this.delegate.handle(P::class.java) { p, h -> handler(p, h) } - } - - /** - * Populate a [ServiceActivatingHandler] for the - * [org.springframework.integration.handler.MethodInvokingMessageProcessor] - * to invoke the provided [GenericHandler] at runtime. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - inline fun handle( - crossinline handler: (P, MessageHeaders) -> Any, - crossinline endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.handle(P::class.java, { p, h -> handler(p, h) }) { endpointConfigurer(it) } - } - - /** - * Populate a [ServiceActivatingHandler] for the [MessageProcessor] from the provided [MessageProcessorSpec]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(messageProcessorSpec: MessageProcessorSpec<*>, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.handle(messageProcessorSpec, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] for the selected protocol specific - * [MessageHandler] implementation from `Namespace Factory`: - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(messageHandlerSpec: MessageHandlerSpec<*, H>, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.handle(messageHandlerSpec, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] for the provided - * [MessageHandler] lambda. - */ - fun handle(messageHandler: (Message<*>) -> Unit) { - this.delegate.handle(MessageHandler { messageHandler(it) }) - } - - /** - * Populate a [ServiceActivatingHandler] for the provided - * [MessageHandler] lambda. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(messageHandler: (Message<*>) -> Unit, - endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.handle(MessageHandler { messageHandler(it) }, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] for the provided - * [MessageHandler] implementation. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun handle(messageHandler: H, endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - this.delegate.handle(messageHandler, endpointConfigurer) - } - - /** - * Populate a [BridgeHandler] to the current integration flow position. - */ - fun bridge(endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - this.delegate.bridge(endpointConfigurer) - } - - /** - * Populate a [DelayHandler] to the current integration flow position. - */ - fun delay(groupId: String, endpointConfigurer: DelayerEndpointSpec.() -> Unit = {}) { - this.delegate.delay(groupId, endpointConfigurer) - } - - /** - * Populate a [org.springframework.integration.transformer.ContentEnricher] - * to the current integration flow position - * with provided options. - */ - fun enrich(enricherConfigurer: EnricherSpec.() -> Unit) { - this.delegate.enrich(enricherConfigurer) - } - - /** - * Populate a [MessageTransformingHandler] for - * a [org.springframework.integration.transformer.HeaderEnricher] - * using header values from provided [MapBuilder]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun enrichHeaders(headers: MapBuilder<*, String, Any>, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.enrichHeaders(headers, endpointConfigurer) - } - - /** - * Accept a [Map] of values to be used for the - * [Message] header enrichment. - * `values` can apply an [Expression] - * to be evaluated against a request [Message]. - */ - fun enrichHeaders(headers: Map, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.enrichHeaders(headers, endpointConfigurer) - } - - /** - * Populate a [MessageTransformingHandler] for - * a [org.springframework.integration.transformer.HeaderEnricher] - * as the result of provided consumer. - */ - fun enrichHeaders(headerEnricherConfigurer: HeaderEnricherSpec.() -> Unit) { - this.delegate.enrichHeaders(headerEnricherConfigurer) - } - - /** - * Populate the [DefaultMessageSplitter] with provided options - * to the current integration flow position. - */ - fun split() { - this.delegate.split() - } - - /** - * Populate the [ExpressionEvaluatingSplitter] with provided - * SpEL expression. - */ - fun split(expression: String, - endpointConfigurer: SplitterEndpointSpec.() -> Unit = {}) { - - this.delegate.split(expression, endpointConfigurer) - } - - /** - * Populate the [MethodInvokingSplitter] to evaluate the provided - * `method` of the `service` at runtime. - */ - fun split(service: Any, methodName: String? = null) { - this.delegate.split(service, methodName) - } - - /** - * Populate the [MethodInvokingSplitter] to evaluate the provided - * `method` of the `bean` at runtime. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun split(service: Any, methodName: String?, - endpointConfigurer: SplitterEndpointSpec.() -> Unit) { - - this.delegate.split(service, methodName, endpointConfigurer) - } - - /** - * Populate the [MethodInvokingSplitter] to evaluate the provided - * `method` of the `bean` at runtime. - */ - fun split(beanName: String, methodName: String? = null) { - this.delegate.split(beanName, methodName) - } - - /** - * Populate the [MethodInvokingSplitter] to evaluate the provided - * `method` of the `bean` at runtime. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun split(beanName: String, methodName: String?, - endpointConfigurer: SplitterEndpointSpec.() -> Unit) { - - this.delegate.split(beanName, methodName, endpointConfigurer) - } - - /** - * Populate the [MethodInvokingSplitter] to evaluate the - * [MessageProcessor] at runtime - * from provided [MessageProcessorSpec]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun split(messageProcessorSpec: MessageProcessorSpec<*>, - endpointConfigurer: SplitterEndpointSpec.() -> Unit = {}) { - - this.delegate.split(messageProcessorSpec, endpointConfigurer) - } - - /** - * Populate the provided [AbstractMessageSplitter] to the current integration flow position. - */ - fun split(splitterMessageHandlerSpec: MessageHandlerSpec<*, S>, - endpointConfigurer: SplitterEndpointSpec.() -> Unit = {}) { - - this.delegate.split(splitterMessageHandlerSpec, endpointConfigurer) - } - - /** - * Populate the provided [AbstractMessageSplitter] to the current integration - * flow position. - */ - fun split(splitter: S, - endpointConfigurer: SplitterEndpointSpec.() -> Unit = {}) { - - this.delegate.split(splitter, endpointConfigurer) - } - - /** - * Provide the [HeaderFilter] to the current [IntegrationFlow]. - */ - fun headerFilter(headersToRemove: String, patternMatch: Boolean = true) { - this.delegate.headerFilter(headersToRemove, patternMatch) - } - - /** - * Populate the provided [MessageTransformingHandler] for the provided - * [HeaderFilter]. - */ - fun headerFilter(headerFilter: HeaderFilter, - endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.headerFilter(headerFilter, endpointConfigurer) - } - - /** - * Populate the [MessageTransformingHandler] for the [ClaimCheckInTransformer] - * with provided [MessageStore]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun claimCheckIn(messageStore: MessageStore, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.claimCheckIn(messageStore, endpointConfigurer) - } - - /** - * Populate the [MessageTransformingHandler] for the [ClaimCheckOutTransformer] - * with provided [MessageStore] and `removeMessage` flag. - */ - fun claimCheckOut(messageStore: MessageStore, removeMessage: Boolean = false) { - this.delegate.claimCheckOut(messageStore, removeMessage) - } - - /** - * Populate the [MessageTransformingHandler] for the [ClaimCheckOutTransformer] - * with provided [MessageStore] and `removeMessage` flag. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun claimCheckOut(messageStore: MessageStore, removeMessage: Boolean, - endpointConfigurer: GenericEndpointSpec.() -> Unit) { - - this.delegate.claimCheckOut(messageStore, removeMessage, endpointConfigurer) - } - - /** - * Populate the - * [org.springframework.integration.aggregator.ResequencingMessageHandler] with - * provided options from [ResequencerSpec]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun resequence(resequencer: ResequencerSpec.() -> Unit = {}) { - this.delegate.resequence(resequencer) - } - - /** - * Populate the [AggregatingMessageHandler] with provided options from [AggregatorSpec]. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun aggregate(aggregator: AggregatorSpec.() -> Unit = {}) { - this.delegate.aggregate(aggregator) - } - - /** - * Populate the [MethodInvokingRouter] for provided bean and its method - * with default options. - */ - fun route(beanName: String, method: String? = null) { - this.delegate.route(beanName, method) - } - - /** - * Populate the [MethodInvokingRouter] for provided bean and its method - * with provided options from [RouterSpec]. - */ - fun route(beanName: String, method: String?, routerConfigurer: RouterSpec.() -> Unit) { - this.delegate.route(beanName, method, routerConfigurer) - } - - /** - * Populate the [MethodInvokingRouter] for the method - * of the provided service and its method with default options. - */ - fun route(service: Any, methodName: String? = null) { - this.delegate.route(service, methodName) - } - - /** - * Populate the [MethodInvokingRouter] for the method - * of the provided service and its method with provided options from [RouterSpec]. - */ - fun route(service: Any, methodName: String?, routerConfigurer: RouterSpec.() -> Unit) { - this.delegate.route(service, methodName, routerConfigurer) - } - - /** - * Populate the [ExpressionEvaluatingRouter] for provided SpEL expression - * with provided options from [RouterSpec]. - */ - fun route(expression: String, routerConfigurer: RouterSpec.() -> Unit = {}) { - this.delegate.route(expression, routerConfigurer) - } - - /** - * Populate the [MethodInvokingRouter] for the - * [MessageProcessor] - * from the provided [MessageProcessorSpec] with default options. - */ - fun route(messageProcessorSpec: MessageProcessorSpec<*>, - routerConfigurer: RouterSpec.() -> Unit = {}) { - - this.delegate.route(messageProcessorSpec, routerConfigurer) - } - - /** - * Populate the [RecipientListRouter] with options from the [RecipientListRouterSpec]. - */ - fun routeToRecipients(routerConfigurer: RecipientListRouterSpec.() -> Unit) { - this.delegate.routeToRecipients(routerConfigurer) - } - - /** - * Populate the [ErrorMessageExceptionTypeRouter] with options from the [RouterSpec]. - */ - fun routeByException( - routerConfigurer: RouterSpec, ErrorMessageExceptionTypeRouter>.() -> Unit) { - - this.delegate.routeByException(routerConfigurer) - } - - /** - * Populate the provided [AbstractMessageRouter] implementation to the - * current integration flow position. - * In addition accept options for the integration endpoint using [GenericEndpointSpec]. - */ - fun route(router: R, endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - this.delegate.route(router, endpointConfigurer) - } - - /** - * Populate the "artificial" - * [org.springframework.integration.gateway.GatewayMessageHandler] for the - * provided `requestChannel` to send a request with options from - * [GatewayEndpointSpec]. Uses - * [org.springframework.integration.gateway.RequestReplyExchanger] Proxy on the - * background. - */ - fun gateway(requestChannel: String, endpointConfigurer: GatewayEndpointSpec.() -> Unit = {}) { - this.delegate.gateway(requestChannel, endpointConfigurer) - } - - /** - * Populate the "artificial" - * [org.springframework.integration.gateway.GatewayMessageHandler] for the - * provided `requestChannel` to send a request with options from - * [GatewayEndpointSpec]. Uses - * [org.springframework.integration.gateway.RequestReplyExchanger] Proxy on the - * background. - */ - fun gateway(requestChannel: MessageChannel, endpointConfigurer: GatewayEndpointSpec.() -> Unit = {}) { - this.delegate.gateway(requestChannel, Consumer(endpointConfigurer)) - } - - /** - * Populate the "artificial" - * [org.springframework.integration.gateway.GatewayMessageHandler] for the - * provided `subflow` with options from [GatewayEndpointSpec]. - */ - fun gateway(flow: KotlinIntegrationFlowDefinition.() -> Unit) { - this.delegate.gateway(IntegrationFlow { flow(KotlinIntegrationFlowDefinition(it)) }) - } - - /** - * Populate the "artificial" - * [org.springframework.integration.gateway.GatewayMessageHandler] for the - * provided `subflow` with options from [GatewayEndpointSpec]. - */ - fun gateway(endpointConfigurer: GatewayEndpointSpec.() -> Unit, - flow: KotlinIntegrationFlowDefinition.() -> Unit) { - - this.delegate.gateway( - IntegrationFlow { flow(KotlinIntegrationFlowDefinition(it)) }, - Consumer(endpointConfigurer)) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the `INFO` - * logging level and `org.springframework.integration.handler.LoggingHandler` - * as a default logging category. - */ - fun log() { - this.delegate.log() - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for provided [LoggingHandler.Level] - * logging level and `org.springframework.integration.handler.LoggingHandler` - * as a default logging category. - */ - fun log(level: LoggingHandler.Level, category: String? = null) { - this.delegate.log(level, category) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided logging category - * and `INFO` logging level. - */ - fun log(category: String) { - this.delegate.log(category) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided - * [LoggingHandler.Level] logging level, logging category - * and SpEL expression for the log message. - */ - fun log(level: LoggingHandler.Level, category: String, logExpression: String) { - this.delegate.log(level, category, logExpression) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the `INFO` logging level, - * the `org.springframework.integration.handler.LoggingHandler` - * as a default logging category and function for the log message. - */ - fun

log(function: (Message

) -> Any) { - this.delegate.log(function) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the `INFO` logging level, - * the `org.springframework.integration.handler.LoggingHandler` - * as a default logging category and SpEL expression to evaluate - * logger message at runtime against the request [Message]. - */ - fun log(logExpression: Expression) { - this.delegate.log(logExpression) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided - * [LoggingHandler.Level] logging level, - * the `org.springframework.integration.handler.LoggingHandler` - * as a default logging category and SpEL expression to evaluate - * logger message at runtime against the request [Message]. - * When this operator is used in the end of flow, it is treated - * as one-way handler without any replies to continue. - */ - fun log(level: LoggingHandler.Level, logExpression: Expression) { - this.delegate.log(level, logExpression) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the `INFO` - * [LoggingHandler.Level] logging level, - * the provided logging category and SpEL expression to evaluate - * logger message at runtime against the request [Message]. - */ - fun log(category: String, logExpression: Expression) { - this.delegate.log(category, logExpression) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided - * [LoggingHandler.Level] logging level, - * the `org.springframework.integration.handler.LoggingHandler` - * as a default logging category and function for the log message. - */ - fun

log(level: LoggingHandler.Level, function: (Message

) -> Any) { - this.delegate.log(level, function) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided - * [LoggingHandler.Level] logging level, - * the provided logging category and function for the log message. - */ - fun

log(category: String, function: (Message

) -> Any) { - this.delegate.log(category, function) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided - * [LoggingHandler.Level] logging level, logging category - * and function for the log message. - */ - fun

log(level: LoggingHandler.Level, category: String, function: (Message

) -> Any) { - this.delegate.log(level, category, function) - } - - /** - * Populate a [WireTap] for the current channel - * with the [LoggingHandler] subscriber for the provided - * [LoggingHandler.Level] logging level, logging category - * and SpEL expression for the log message. - */ - fun log(level: LoggingHandler.Level, category: String, logExpression: Expression) { - this.delegate.log(level, category, logExpression) - } - - /** - * Populate a [ScatterGatherHandler] to the current integration flow position - * based on the provided [MessageChannel] for scattering function - * and [AggregatorSpec] for gathering function. - */ - fun scatterGather(scatterChannel: MessageChannel, gatherer: AggregatorSpec.() -> Unit = {}) { - this.delegate.scatterGather(scatterChannel, Consumer(gatherer)) - } - - /** - * Populate a [ScatterGatherHandler] to the current integration flow position - * based on the provided [MessageChannel] for scattering function - * and [AggregatorSpec] for gathering function. - */ - fun scatterGather(scatterChannel: MessageChannel, gatherer: AggregatorSpec.() -> Unit, - scatterGather: ScatterGatherSpec.() -> Unit) { - - this.delegate.scatterGather(scatterChannel, Consumer(gatherer), Consumer(scatterGather)) - } - - /** - * Populate a [ScatterGatherHandler] to the current integration flow position - * based on the provided [RecipientListRouterSpec] for scattering function - * and default [AggregatorSpec] for gathering function. - */ - fun scatterGather(scatterer: RecipientListRouterSpec.() -> Unit) { - this.delegate.scatterGather(scatterer) - } - - /** - * Populate a [ScatterGatherHandler] to the current integration flow position - * based on the provided [RecipientListRouterSpec] for scattering function - * and [AggregatorSpec] for gathering function. - */ - fun scatterGather(scatterer: RecipientListRouterSpec.() -> Unit, gatherer: AggregatorSpec.() -> Unit) { - this.delegate.scatterGather(scatterer, gatherer) - } - - /** - * Populate a [ScatterGatherHandler] to the current integration flow position - * based on the provided [RecipientListRouterSpec] for scattering function - * and [AggregatorSpec] for gathering function. - */ - fun scatterGather(scatterer: RecipientListRouterSpec.() -> Unit, gatherer: AggregatorSpec.() -> Unit, - scatterGather: ScatterGatherSpec.() -> Unit) { - - this.delegate.scatterGather(scatterer, gatherer, scatterGather) - } - - /** - * Populate a [org.springframework.integration.aggregator.BarrierMessageHandler] - * instance for provided timeout and options from [BarrierSpec] and endpoint - * options from [GenericEndpointSpec]. - */ - fun barrier(timeout: Long, barrierConfigurer: BarrierSpec.() -> Unit = {}) { - this.delegate.barrier(timeout, barrierConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] instance to perform [MessageTriggerAction] - * and endpoint options from [GenericEndpointSpec]. - */ - fun trigger(triggerActionId: String, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.trigger(triggerActionId, endpointConfigurer) - } - - /** - * Populate a [ServiceActivatingHandler] instance to perform [MessageTriggerAction] - * and endpoint options from [GenericEndpointSpec]. - */ - fun trigger(triggerAction: MessageTriggerAction, - endpointConfigurer: GenericEndpointSpec.() -> Unit = {}) { - - this.delegate.trigger(triggerAction, Consumer(endpointConfigurer)) - } - - /** - * Populate a [FluxMessageChannel] to start a reactive processing for upstream data, - * wrap it to a [Flux], apply provided function via [Flux.transform] - * and emit the result to one more [FluxMessageChannel], subscribed in the downstream flow. - */ - fun fluxTransform(fluxFunction: (Flux>) -> Publisher) { - this.delegate.fluxTransform(fluxFunction) - } - -} diff --git a/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt b/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt deleted file mode 100644 index 27856c3..0000000 --- a/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright 2019-2020 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.dsl.kotlin.test - -import assertk.assertThat -import assertk.assertions.isEqualTo -import assertk.assertions.isGreaterThanOrEqualTo -import assertk.assertions.isInstanceOf -import assertk.assertions.isNotNull -import assertk.assertions.size -import org.junit.jupiter.api.Test -import org.springframework.beans.factory.BeanFactory -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.beans.factory.annotation.Qualifier -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration -import org.springframework.integration.channel.FluxMessageChannel -import org.springframework.integration.channel.QueueChannel -import org.springframework.integration.config.EnableIntegration -import org.springframework.integration.core.GenericSelector -import org.springframework.integration.core.MessagingTemplate -import org.springframework.integration.dsl.Pollers -import org.springframework.integration.dsl.context.IntegrationFlowContext -import org.springframework.integration.dsl.kotlin.integrationFlow -import org.springframework.integration.endpoint.MessageProcessorMessageSource -import org.springframework.integration.handler.LoggingHandler -import org.springframework.integration.scheduling.PollerMetadata -import org.springframework.integration.support.MessageBuilder -import org.springframework.integration.test.util.OnlyOnceTrigger -import org.springframework.messaging.Message -import org.springframework.messaging.MessageChannel -import org.springframework.messaging.MessageHeaders -import org.springframework.messaging.PollableChannel -import org.springframework.messaging.support.GenericMessage -import org.springframework.test.annotation.DirtiesContext -import org.springframework.test.context.junit.jupiter.SpringJUnitConfig -import reactor.core.publisher.Flux -import reactor.test.StepVerifier -import java.util.* -import java.util.function.Function - -/** - * @author Artem Bilan - */ -@SpringJUnitConfig -@DirtiesContext -class KotlinDslTests { - - @Autowired - private lateinit var beanFactory: BeanFactory - - @Autowired - private lateinit var integrationFlowContext: IntegrationFlowContext - - @Autowired - private lateinit var convertFlowInput: MessageChannel - - @Test - fun `convert extension`() { - assertThat(this.beanFactory.containsBean("kotlinConverter")) - - val replyChannel = QueueChannel() - val date = Date() - val testMessage = - MessageBuilder.withPayload("{\"name\": \"Test\",\"date\": " + date.time + "}") - .setHeader(MessageHeaders.CONTENT_TYPE, "application/json") - .setReplyChannel(replyChannel) - .build() - this.convertFlowInput.send(testMessage) - - assertThat(replyChannel.receive(10000)?.payload) - .isNotNull() - .isInstanceOf(TestPojo::class.java) - .isEqualTo(TestPojo("Test", date)) - } - - @Autowired - @Qualifier("functionGateway") - private lateinit var upperCaseFunction: Function - - @Test - fun `uppercase function`() { - assertThat(this.upperCaseFunction.apply("test")).isEqualTo("TEST") - } - - @Autowired - private lateinit var fromSupplierQueue: PollableChannel - - @Test - fun `message source flow`() { - assertThat(this.fromSupplierQueue.receive(10_000)?.payload).isNotNull().isEqualTo("testSource") - } - - @Autowired - @Qualifier("functionFlow2.gateway") - private lateinit var lowerCaseFunction: Function - - @Test - fun `lowercase function`() { - assertThat(this.lowerCaseFunction.apply("TEST2")).isEqualTo("test2") - } - - @Autowired - private lateinit var fixedSubscriberInput: MessageChannel - - @Test - fun `fixed subscriber channel`() { - assertThat(MessagingTemplate().convertSendAndReceive(this.fixedSubscriberInput, "test", String::class.java)) - .isEqualTo("test") - } - - @Autowired - private lateinit var fromSupplierQueue2: PollableChannel - - @Test - fun `message source flow2`() { - assertThat(this.fromSupplierQueue2.receive(10_000)?.payload).isNotNull().isEqualTo("testSource2") - } - - @Autowired - private lateinit var testSupplierResult: PollableChannel - - @Test - fun `supplier flow1`() { - assertThat(this.testSupplierResult.receive(10_000)?.payload).isNotNull().isEqualTo("testSupplier") - } - - @Autowired - private lateinit var testSupplierResult2: PollableChannel - - @Test - fun `supplier flow2`() { - assertThat(this.testSupplierResult2.receive(10_000)?.payload).isNotNull().isEqualTo("testSupplier2") - } - - @Test - fun `reactive publisher flow`() { - val fluxChannel = FluxMessageChannel() - - val verifyLater = - StepVerifier - .create(Flux.from(fluxChannel).map { it.payload }.cast(Integer::class.java)) - .expectNext(Integer(4), Integer(6)) - .thenCancel() - .verifyLater() - - val publisher = Flux.just(2, 3).map { GenericMessage(it) } - - val integrationFlow = - integrationFlow(publisher) { - transform>({ it.payload * 2 }) { id("foo") } - channel(fluxChannel) - } - - val registration = this.integrationFlowContext.registration(integrationFlow).register() - - verifyLater.verify() - - registration.destroy() - } - - @Autowired - @Qualifier("flowLambda.input") - private lateinit var flowLambdaInput: MessageChannel - - @Autowired - private lateinit var wireTapChannel: PollableChannel - - @Test - fun `flow from lambda`() { - val replyChannel = QueueChannel() - val message = MessageBuilder.withPayload("test").setReplyChannel(replyChannel).build() - - this.flowLambdaInput.send(message) - - assertThat(replyChannel.receive(10_000)?.payload).isNotNull().isEqualTo("TEST") - assertThat(this.wireTapChannel.receive(10_000)?.payload).isNotNull().isEqualTo("test") - } - - @Autowired - @Qualifier("scatterGatherFlow.input") - private lateinit var scatterGatherFlowInput: MessageChannel - - @Test - fun `Scatter-Gather`() { - val replyChannel = QueueChannel() - val request = - MessageBuilder.withPayload("foo") - .setReplyChannel(replyChannel) - .build() - this.scatterGatherFlowInput.send(request) - val bestQuoteMessage = replyChannel.receive(10000) - assertThat(bestQuoteMessage).isNotNull() - val payload = bestQuoteMessage!!.payload - assertThat(payload).isInstanceOf(List::class.java).size().isGreaterThanOrEqualTo(1) - } - - @Configuration - @EnableIntegration - class Config { - - @Bean(PollerMetadata.DEFAULT_POLLER) - fun defaultPoller() = - Pollers.fixedDelay(100).maxMessagesPerPoll(1).get() - - @Bean - fun convertFlow() = - integrationFlow("convertFlowInput") { - convert() - convert { id("kotlinConverter") } - handle { m -> (m.headers[MessageHeaders.REPLY_CHANNEL] as MessageChannel).send(m) } - } - - @Bean - fun functionFlow() = - integrationFlow>({ beanName("functionGateway") }) { - transform { it.toUpperCase() } - split> { it.payload } - split({ it }) { id("splitterEndpoint") } - resequence() - aggregate { - id("aggregator") - outputProcessor { it.one } - } - } - - @Bean - fun functionFlow2() = - integrationFlow> { - transform { it.toLowerCase() } - route, Any?>({ null }) { defaultOutputToParentFlow() } - route> { m -> m.headers.replyChannel } - } - - @Bean - fun messageSourceFlow() = - integrationFlow(MessageProcessorMessageSource { "testSource" }, - { poller { it.trigger(OnlyOnceTrigger()) } }) { - channel { queue("fromSupplierQueue") } - } - - @Bean - fun messageSourceFlow2() = - integrationFlow(MessageProcessorMessageSource { "testSource2" }) { - channel { queue("fromSupplierQueue2") } - } - - @Bean - fun fixedSubscriberFlow() = - integrationFlow("fixedSubscriberInput", true) { - log(LoggingHandler.Level.WARN) { it.payload } - transform("payload") { id("spelTransformer") } - } - - @Bean - fun flowFromSupplier() = - integrationFlow({ "testSupplier" }) { - channel { queue("testSupplierResult") } - } - - @Bean - fun flowFromSupplier2() = - integrationFlow({ "testSupplier2" }, - { poller { it.trigger(OnlyOnceTrigger()) } }) { - filter> { m -> m.payload is String } - channel { queue("testSupplierResult2") } - } - - @Bean - fun flowLambda() = - integrationFlow { - filter({ it === "test" }) { id("filterEndpoint") } - wireTap { - channel { queue("wireTapChannel") } - } - delay("delayGroup") { defaultDelay(100) } - transform { it.toUpperCase() } - } - - - /* - A Java variant for the flow below - @Bean - public IntegrationFlow scatterGatherFlow() { - return f -> f - .scatterGather(scatterer -> scatterer - .applySequence(true) - .recipientFlow(m -> true, sf -> sf.handle((p, h) -> Math.random() * 10)) - .recipientFlow(m -> true, sf -> sf.handle((p, h) -> Math.random() * 10)) - .recipientFlow(m -> true, sf -> sf.handle((p, h) -> Math.random() * 10)), - gatherer -> gatherer - .releaseStrategy(group -> - group.size() == 3 || - group.getMessages() - .stream() - .anyMatch(m -> (Double) m.getPayload() > 5)), - scatterGather -> scatterGather - .gatherTimeout(10_000)); - }*/ - @Bean - fun scatterGatherFlow() = - integrationFlow { - scatterGather( - { - applySequence(true) - recipientFlow(GenericSelector { true }, integrationFlow { handle { _, _ -> Math.random() * 10 } }) - recipientFlow(GenericSelector { true }, integrationFlow { handle { _, _ -> Math.random() * 10 } }) - recipientFlow(GenericSelector { true }, integrationFlow { handle { _, _ -> Math.random() * 10 } }) - }, - { - releaseStrategy { - it.size() == 3 || it.messages.stream().anyMatch { it.payload as Double > 5 } - } - }) - { - gatherTimeout(10_000) - } - } - } - - data class TestPojo(val name: String?, val date: Date?) - -} diff --git a/spring-integration-kotlin-dsl/src/test/resources/log4j2-test.xml b/spring-integration-kotlin-dsl/src/test/resources/log4j2-test.xml deleted file mode 100644 index b3d7c55..0000000 --- a/spring-integration-kotlin-dsl/src/test/resources/log4j2-test.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - -