From 447a0752a06b88608ecd9a457a1b80afe8b14341 Mon Sep 17 00:00:00 2001 From: Ilayaperumal Gopinathan Date: Tue, 30 Apr 2019 18:06:39 +0530 Subject: [PATCH] Refactor stream samples --- .../usage-cost-logger/.gitignore | 19 +- .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 47610 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../usage-cost-logger}/mvnw | 67 +++- .../usage-cost-logger/mvnw.cmd | 22 +- .../usage-cost-logger/pom.xml | 74 +++++ .../sample/domain/UsageCostDetail.java | 0 .../usagecostlogger/UsageCostLogger.java | 20 ++ .../UsageCostLoggerApplication.java | 3 +- .../src/main/resources/application.properties | 1 + .../UsageCostLoggerApplicationTests.java | 2 +- .../usage-cost-processor}/.gitignore | 19 +- .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 47610 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../usage-cost-processor/mvnw | 67 +++- .../usage-cost-processor}/mvnw.cmd | 22 +- .../usage-cost-processor/pom.xml | 74 +++++ .../sample/domain/UsageCostDetail.java | 2 +- .../dataflow/sample/domain/UsageDetail.java | 0 .../UsageCostProcessor.java | 2 +- .../UsageCostProcessorApplication.java | 3 +- .../src/main/resources/application.properties | 1 + .../UsageCostProcessorApplicationTests.java | 2 +- .../usage-detail-sender}/.gitignore | 19 +- .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 47610 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../usage-detail-sender}/mvnw | 67 +++- .../usage-detail-sender}/mvnw.cmd | 22 +- .../usage-detail-sender/pom.xml | 74 +++++ .../dataflow/sample/domain/UsageDetail.java | 0 .../usagedetailsender}/UsageDetailSender.java | 2 +- .../UsageDetailSenderApplication.java | 3 +- .../src/main/resources/application.properties | 1 + .../UsageDetailSenderApplicationTests.java | 2 +- .../usage-cost-logger/.gitignore | 29 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../usage-cost-logger/mvnw | 286 ++++++++++++++++++ .../usage-cost-logger/mvnw.cmd | 161 ++++++++++ .../usage-cost-logger/pom.xml | 73 +++++ .../sample/domain/UsageCostDetail.java | 40 +++ .../usagecostlogger}/UsageCostLogger.java | 2 +- .../UsageCostLoggerApplication.java | 13 + .../src/main/resources/application.properties | 1 + .../UsageCostLoggerApplicationTests.java | 16 + .../usage-cost-processor/.gitignore | 29 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../usage-cost-processor/mvnw | 286 ++++++++++++++++++ .../usage-cost-processor/mvnw.cmd | 161 ++++++++++ .../usage-cost-processor/pom.xml | 69 +++++ .../sample/domain/UsageCostDetail.java | 40 +++ .../dataflow/sample/domain/UsageDetail.java | 37 +++ .../UsageCostProcessor.java | 27 ++ .../UsageCostProcessorApplication.java | 13 + .../src/main/resources/application.properties | 1 + .../UsageCostProcessorApplicationTests.java | 16 + .../usage-detail-sender/.gitignore | 29 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 114 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + .../usage-detail-sender/mvnw | 286 ++++++++++++++++++ .../usage-detail-sender/mvnw.cmd | 161 ++++++++++ .../usage-detail-sender/pom.xml | 69 +++++ .../dataflow/sample/domain/UsageDetail.java | 37 +++ .../usagedetailsender/UsageDetailSender.java | 32 ++ .../UsageDetailSenderApplication.java | 13 + .../src/main/resources/application.properties | 1 + .../UsageDetailSenderApplicationTests.java | 16 + .../.mvn/wrapper/maven-wrapper.properties | 1 - .../streams/usage-cost-logger/pom.xml | 108 ------- .../src/main/docker/assembly.xml | 15 - .../src/main/resources/application.properties | 2 - .../.mvn/wrapper/maven-wrapper.properties | 1 - .../streams/usage-cost-processor/pom.xml | 108 ------- .../src/main/docker/assembly.xml | 15 - .../src/main/resources/application.properties | 3 - .../.mvn/wrapper/maven-wrapper.properties | 1 - .../streams/usage-detail-sender/pom.xml | 108 ------- .../src/main/docker/assembly.xml | 15 - .../src/main/resources/application.properties | 1 - 86 files changed, 3178 insertions(+), 424 deletions(-) rename dataflow-website/stream-developer-guides/streams/{ => standalone-stream-kafka}/usage-cost-logger/.gitignore (59%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor => standalone-stream-kafka/usage-cost-logger}/.mvn/wrapper/maven-wrapper.jar (72%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties rename dataflow-website/stream-developer-guides/streams/{usage-detail-sender => standalone-stream-kafka/usage-cost-logger}/mvnw (69%) rename dataflow-website/stream-developer-guides/streams/{ => standalone-stream-kafka}/usage-cost-logger/mvnw.cmd (85%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/pom.xml rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor => standalone-stream-kafka/usage-cost-logger}/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java (100%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java rename dataflow-website/stream-developer-guides/streams/{usage-cost-logger/src/main/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger}/UsageCostLoggerApplication.java (85%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/resources/application.properties rename dataflow-website/stream-developer-guides/streams/{usage-cost-logger/src/test/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger}/UsageCostLoggerApplicationTests.java (86%) rename dataflow-website/stream-developer-guides/streams/{usage-detail-sender => standalone-stream-kafka/usage-cost-processor}/.gitignore (59%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java rename dataflow-website/stream-developer-guides/streams/{usage-cost-logger => standalone-stream-kafka/usage-cost-processor}/.mvn/wrapper/maven-wrapper.jar (72%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties rename dataflow-website/stream-developer-guides/streams/{ => standalone-stream-kafka}/usage-cost-processor/mvnw (69%) rename dataflow-website/stream-developer-guides/streams/{usage-detail-sender => standalone-stream-kafka/usage-cost-processor}/mvnw.cmd (85%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/pom.xml rename dataflow-website/stream-developer-guides/streams/{usage-cost-logger => standalone-stream-kafka/usage-cost-processor}/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java (88%) rename dataflow-website/stream-developer-guides/streams/{ => standalone-stream-kafka}/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java (100%) rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor/src/main/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor}/UsageCostProcessor.java (94%) rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor/src/main/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor}/UsageCostProcessorApplication.java (84%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/resources/application.properties rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor/src/test/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor}/UsageCostProcessorApplicationTests.java (85%) rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor => standalone-stream-kafka/usage-detail-sender}/.gitignore (59%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java rename dataflow-website/stream-developer-guides/streams/{ => standalone-stream-kafka}/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar (72%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties rename dataflow-website/stream-developer-guides/streams/{usage-cost-logger => standalone-stream-kafka/usage-detail-sender}/mvnw (69%) rename dataflow-website/stream-developer-guides/streams/{usage-cost-processor => standalone-stream-kafka/usage-detail-sender}/mvnw.cmd (85%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/pom.xml rename dataflow-website/stream-developer-guides/streams/{ => standalone-stream-kafka}/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java (100%) rename dataflow-website/stream-developer-guides/streams/{usage-detail-sender/src/main/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender}/UsageDetailSender.java (94%) rename dataflow-website/stream-developer-guides/streams/{usage-detail-sender/src/main/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender}/UsageDetailSenderApplication.java (84%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/resources/application.properties rename dataflow-website/stream-developer-guides/streams/{usage-detail-sender/src/test/java/io/spring/dataflow/sample => standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender}/UsageDetailSenderApplicationTests.java (85%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.gitignore create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties create mode 100755 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/mvnw create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/mvnw.cmd create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/pom.xml create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java rename dataflow-website/stream-developer-guides/streams/{usage-cost-logger/src/main/java/io/spring/dataflow/sample => standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger}/UsageCostLogger.java (92%) create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/resources/application.properties create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.gitignore create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties create mode 100755 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/mvnw create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/mvnw.cmd create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/pom.xml create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/resources/application.properties create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.gitignore create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties create mode 100755 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/mvnw create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/mvnw.cmd create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/pom.xml create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/resources/application.properties create mode 100644 dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-logger/pom.xml delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/docker/assembly.xml delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/resources/application.properties delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-processor/pom.xml delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/docker/assembly.xml delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/resources/application.properties delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-detail-sender/pom.xml delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/docker/assembly.xml delete mode 100644 dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/resources/application.properties diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/.gitignore b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.gitignore similarity index 59% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/.gitignore rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.gitignore index 2af7cef..153c933 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/.gitignore +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.gitignore @@ -1,4 +1,5 @@ -target/ +HELP.md +/target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### @@ -8,6 +9,7 @@ target/ .project .settings .springBeans +.sts4-cache ### IntelliJ IDEA ### .idea @@ -16,9 +18,12 @@ target/ *.ipr ### NetBeans ### -nbproject/private/ -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ \ No newline at end of file +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + 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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar similarity index 72% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar index 9cc84ea9b4d95453115d0c26488d6a78694e0bc6..01e67997377a393fd672c7dcde9dccbedf0cb1e9 100644 GIT binary patch delta 10107 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 P`1e%9f`Lga`w#s;Q$rWl diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..cd0d451 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/mvnw b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/mvnw similarity index 69% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/mvnw rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/mvnw index 5bf251c..8b9da3b 100755 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/mvnw +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# 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 @@ -108,7 +108,7 @@ if $cygwin ; then CLASSPATH=`cygpath --path --unix "$CLASSPATH"` fi -# For Migwn, ensure paths are in UNIX format before anything is touched +# For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then [ -n "$M2_HOME" ] && M2_HOME="`(cd "$M2_HOME"; pwd)`" @@ -200,8 +200,69 @@ if [ -z "$BASE_DIR" ]; then exit 1; fi +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -echo $MAVEN_PROJECTBASEDIR +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/mvnw.cmd b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/mvnw.cmd similarity index 85% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/mvnw.cmd rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/mvnw.cmd index 019bd74..fef5a8f 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/mvnw.cmd +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an @@ -35,6 +35,8 @@ @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' @echo off +@REM set title of command window +title %0 @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @@ -115,10 +117,26 @@ for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do s :endReadAdditionalConfig SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/pom.xml b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/pom.xml new file mode 100644 index 0000000..7a46028 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + io.spring.dataflow.sample + usage-cost-logger + 0.0.1-SNAPSHOT + usage-cost-logger + Demo project for Spring Boot + + + 1.8 + Greenwich.SR1 + + + + + org.springframework.cloud + spring-cloud-stream + + + org.springframework.cloud + spring-cloud-stream-binder-kafka + + + org.springframework.kafka + spring-kafka + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + org.springframework.kafka + spring-kafka-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java similarity index 100% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java new file mode 100644 index 0000000..2f4c82f --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java @@ -0,0 +1,20 @@ +package io.spring.dataflow.sample.usagecostlogger; + +import io.spring.dataflow.sample.domain.UsageCostDetail; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Sink; + +@EnableBinding(Sink.class) +public class UsageCostLogger { + + private static final Logger logger = LoggerFactory.getLogger(UsageCostLoggerApplication.class); + + @StreamListener(Sink.INPUT) + public void process(UsageCostDetail usageCostDetail) { + logger.info(usageCostDetail.toString()); + } +} \ No newline at end of file diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/UsageCostLoggerApplication.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java similarity index 85% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/UsageCostLoggerApplication.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java index 3ba551a..659200f 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/UsageCostLoggerApplication.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagecostlogger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,4 +9,5 @@ public class UsageCostLoggerApplication { public static void main(String[] args) { SpringApplication.run(UsageCostLoggerApplication.class, args); } + } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/test/java/io/spring/dataflow/sample/UsageCostLoggerApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java similarity index 86% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/test/java/io/spring/dataflow/sample/UsageCostLoggerApplicationTests.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java index b7fe319..7b1a5cb 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/test/java/io/spring/dataflow/sample/UsageCostLoggerApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagecostlogger; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/.gitignore b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.gitignore similarity index 59% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/.gitignore rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.gitignore index 2af7cef..153c933 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/.gitignore +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.gitignore @@ -1,4 +1,5 @@ -target/ +HELP.md +/target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### @@ -8,6 +9,7 @@ target/ .project .settings .springBeans +.sts4-cache ### IntelliJ IDEA ### .idea @@ -16,9 +18,12 @@ target/ *.ipr ### NetBeans ### -nbproject/private/ -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ \ No newline at end of file +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + 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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar similarity index 72% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar index 9cc84ea9b4d95453115d0c26488d6a78694e0bc6..01e67997377a393fd672c7dcde9dccbedf0cb1e9 100644 GIT binary patch delta 10107 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 P`1e%9f`Lga`w#s;Q$rWl diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..cd0d451 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/mvnw b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/mvnw similarity index 69% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/mvnw rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/mvnw index 5bf251c..8b9da3b 100755 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/mvnw +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# 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 @@ -108,7 +108,7 @@ if $cygwin ; then CLASSPATH=`cygpath --path --unix "$CLASSPATH"` fi -# For Migwn, ensure paths are in UNIX format before anything is touched +# For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then [ -n "$M2_HOME" ] && M2_HOME="`(cd "$M2_HOME"; pwd)`" @@ -200,8 +200,69 @@ if [ -z "$BASE_DIR" ]; then exit 1; fi +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -echo $MAVEN_PROJECTBASEDIR +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/mvnw.cmd b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/mvnw.cmd similarity index 85% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/mvnw.cmd rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/mvnw.cmd index 019bd74..fef5a8f 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/mvnw.cmd +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an @@ -35,6 +35,8 @@ @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' @echo off +@REM set title of command window +title %0 @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @@ -115,10 +117,26 @@ for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do s :endReadAdditionalConfig SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/pom.xml b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/pom.xml new file mode 100644 index 0000000..bccef84 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + io.spring.dataflow.sample + usage-cost-processor + 0.0.1-SNAPSHOT + usage-cost-processor + Demo project for Spring Boot + + + 1.8 + Greenwich.SR1 + + + + + org.springframework.cloud + spring-cloud-stream + + + org.springframework.cloud + spring-cloud-stream-binder-kafka + + + org.springframework.kafka + spring-kafka + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + org.springframework.kafka + spring-kafka-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java similarity index 88% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java index 0e0601e..b54eb57 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java @@ -35,6 +35,6 @@ public class UsageCostDetail { } public String toString() { - return "{\"userId\": \""+this.getUserId() + "\", \"callCost\": \""+ this.getCallCost()/100+"\", \"dataCost\": \"" + this.getDataCost()/100+ "\" }"; + return "{\"userId\": \""+this.getUserId() + "\", \"callCost\": \""+ this.getCallCost()+"\", \"dataCost\": \"" + this.getDataCost()+ "\" }"; } } diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java similarity index 100% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/UsageCostProcessor.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java similarity index 94% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/UsageCostProcessor.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java index c50c807..b0248cc 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/UsageCostProcessor.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagecostprocessor; import io.spring.dataflow.sample.domain.UsageCostDetail; import io.spring.dataflow.sample.domain.UsageDetail; diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/UsageCostProcessorApplication.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java similarity index 84% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/UsageCostProcessorApplication.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java index c4dd38e..1657288 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/java/io/spring/dataflow/sample/UsageCostProcessorApplication.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagecostprocessor; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,4 +9,5 @@ public class UsageCostProcessorApplication { public static void main(String[] args) { SpringApplication.run(UsageCostProcessorApplication.class, args); } + } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/test/java/io/spring/dataflow/sample/UsageCostProcessorApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java similarity index 85% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/test/java/io/spring/dataflow/sample/UsageCostProcessorApplicationTests.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java index 778e101..3f3b37b 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/test/java/io/spring/dataflow/sample/UsageCostProcessorApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagecostprocessor; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/.gitignore b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.gitignore similarity index 59% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/.gitignore rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.gitignore index 2af7cef..153c933 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/.gitignore +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.gitignore @@ -1,4 +1,5 @@ -target/ +HELP.md +/target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### @@ -8,6 +9,7 @@ target/ .project .settings .springBeans +.sts4-cache ### IntelliJ IDEA ### .idea @@ -16,9 +18,12 @@ target/ *.ipr ### NetBeans ### -nbproject/private/ -build/ -nbbuild/ -dist/ -nbdist/ -.nb-gradle/ \ No newline at end of file +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + 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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar similarity index 72% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar index 9cc84ea9b4d95453115d0c26488d6a78694e0bc6..01e67997377a393fd672c7dcde9dccbedf0cb1e9 100644 GIT binary patch delta 10107 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 P`1e%9f`Lga`w#s;Q$rWl diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..cd0d451 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/mvnw b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/mvnw similarity index 69% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/mvnw rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/mvnw index 5bf251c..8b9da3b 100755 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/mvnw +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/mvnw @@ -8,7 +8,7 @@ # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# 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 @@ -108,7 +108,7 @@ if $cygwin ; then CLASSPATH=`cygpath --path --unix "$CLASSPATH"` fi -# For Migwn, ensure paths are in UNIX format before anything is touched +# For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then [ -n "$M2_HOME" ] && M2_HOME="`(cd "$M2_HOME"; pwd)`" @@ -200,8 +200,69 @@ if [ -z "$BASE_DIR" ]; then exit 1; fi +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -echo $MAVEN_PROJECTBASEDIR +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/mvnw.cmd b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/mvnw.cmd similarity index 85% rename from dataflow-website/stream-developer-guides/streams/usage-cost-processor/mvnw.cmd rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/mvnw.cmd index 019bd74..fef5a8f 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/mvnw.cmd +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/mvnw.cmd @@ -7,7 +7,7 @@ @REM "License"); you may not use this file except in compliance @REM with the License. You may obtain a copy of the License at @REM -@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM https://www.apache.org/licenses/LICENSE-2.0 @REM @REM Unless required by applicable law or agreed to in writing, @REM software distributed under the License is distributed on an @@ -35,6 +35,8 @@ @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' @echo off +@REM set title of command window +title %0 @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% @@ -115,10 +117,26 @@ for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do s :endReadAdditionalConfig SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* if ERRORLEVEL 1 goto error goto end diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/pom.xml b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/pom.xml new file mode 100644 index 0000000..1aeb5d7 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + io.spring.dataflow.sample + usage-detail-sender + 0.0.1-SNAPSHOT + usage-detail-sender + Demo project for Spring Boot + + + 1.8 + Greenwich.SR1 + + + + + org.springframework.cloud + spring-cloud-stream + + + org.springframework.cloud + spring-cloud-stream-binder-kafka + + + org.springframework.kafka + spring-kafka + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + org.springframework.kafka + spring-kafka-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java similarity index 100% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/UsageDetailSender.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java similarity index 94% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/UsageDetailSender.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java index 94d7782..e3ca95d 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/UsageDetailSender.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagedetailsender; import java.util.Random; diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/UsageDetailSenderApplication.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java similarity index 84% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/UsageDetailSenderApplication.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java index 41e202d..cb84b16 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/java/io/spring/dataflow/sample/UsageDetailSenderApplication.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagedetailsender; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -9,4 +9,5 @@ public class UsageDetailSenderApplication { public static void main(String[] args) { SpringApplication.run(UsageDetailSenderApplication.class, args); } + } diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/test/java/io/spring/dataflow/sample/UsageDetailSenderApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java similarity index 85% rename from dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/test/java/io/spring/dataflow/sample/UsageDetailSenderApplicationTests.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java index 6335299..19ba3ca 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/test/java/io/spring/dataflow/sample/UsageDetailSenderApplicationTests.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-kafka/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagedetailsender; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.gitignore b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.gitignore new file mode 100644 index 0000000..153c933 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.gitignore @@ -0,0 +1,29 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + 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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + 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 + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/mvnw.cmd b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/mvnw.cmd new file mode 100644 index 0000000..fef5a8f --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/pom.xml b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/pom.xml new file mode 100644 index 0000000..1166eda --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/pom.xml @@ -0,0 +1,73 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + io.spring.dataflow.sample + usage-cost-logger + 0.0.1-SNAPSHOT + usage-cost-logger + Demo project for Spring Boot + + + 1.8 + Greenwich.SR1 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-stream + + + org.springframework.cloud + spring-cloud-stream-binder-rabbit + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java new file mode 100644 index 0000000..b54eb57 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java @@ -0,0 +1,40 @@ +package io.spring.dataflow.sample.domain; + +public class UsageCostDetail { + + public UsageCostDetail() { } + + private String userId; + + private double callCost; + + private double dataCost; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public double getCallCost() { + return callCost; + } + + public void setCallCost(double callCost) { + this.callCost = callCost; + } + + public double getDataCost() { + return dataCost; + } + + public void setDataCost(double dataCost) { + this.dataCost = dataCost; + } + + public String toString() { + return "{\"userId\": \""+this.getUserId() + "\", \"callCost\": \""+ this.getCallCost()+"\", \"dataCost\": \"" + this.getDataCost()+ "\" }"; + } +} diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/UsageCostLogger.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java similarity index 92% rename from dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/UsageCostLogger.java rename to dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java index e50c3e2..052aa4c 100644 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/java/io/spring/dataflow/sample/UsageCostLogger.java +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLogger.java @@ -1,4 +1,4 @@ -package io.spring.dataflow.sample; +package io.spring.dataflow.sample.usagecostlogger; import io.spring.dataflow.sample.domain.UsageCostDetail; import org.slf4j.Logger; diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java new file mode 100644 index 0000000..659200f --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplication.java @@ -0,0 +1,13 @@ +package io.spring.dataflow.sample.usagecostlogger; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class UsageCostLoggerApplication { + + public static void main(String[] args) { + SpringApplication.run(UsageCostLoggerApplication.class, args); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java new file mode 100644 index 0000000..7b1a5cb --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-logger/src/test/java/io/spring/dataflow/sample/usagecostlogger/UsageCostLoggerApplicationTests.java @@ -0,0 +1,16 @@ +package io.spring.dataflow.sample.usagecostlogger; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class UsageCostLoggerApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.gitignore b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.gitignore new file mode 100644 index 0000000..153c933 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.gitignore @@ -0,0 +1,29 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + 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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + 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 + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/mvnw.cmd b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/mvnw.cmd new file mode 100644 index 0000000..fef5a8f --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/pom.xml b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/pom.xml new file mode 100644 index 0000000..8702127 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + io.spring.dataflow.sample + usage-cost-processor + 0.0.1-SNAPSHOT + usage-cost-processor + Demo project for Spring Boot + + + 1.8 + Greenwich.SR1 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.cloud + spring-cloud-stream + + + org.springframework.cloud + spring-cloud-stream-binder-rabbit + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java new file mode 100644 index 0000000..b54eb57 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageCostDetail.java @@ -0,0 +1,40 @@ +package io.spring.dataflow.sample.domain; + +public class UsageCostDetail { + + public UsageCostDetail() { } + + private String userId; + + private double callCost; + + private double dataCost; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public double getCallCost() { + return callCost; + } + + public void setCallCost(double callCost) { + this.callCost = callCost; + } + + public double getDataCost() { + return dataCost; + } + + public void setDataCost(double dataCost) { + this.dataCost = dataCost; + } + + public String toString() { + return "{\"userId\": \""+this.getUserId() + "\", \"callCost\": \""+ this.getCallCost()+"\", \"dataCost\": \"" + this.getDataCost()+ "\" }"; + } +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java new file mode 100644 index 0000000..d36cccf --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java @@ -0,0 +1,37 @@ +package io.spring.dataflow.sample.domain; + +public class UsageDetail { + + public UsageDetail() { } + + private String userId; + + private long duration; + + private long data; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public long getData() { + return data; + } + + public void setData(long data) { + this.data = data; + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java new file mode 100644 index 0000000..b0248cc --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessor.java @@ -0,0 +1,27 @@ +package io.spring.dataflow.sample.usagecostprocessor; + +import io.spring.dataflow.sample.domain.UsageCostDetail; +import io.spring.dataflow.sample.domain.UsageDetail; + +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Processor; +import org.springframework.messaging.handler.annotation.SendTo; + +@EnableBinding(Processor.class) +public class UsageCostProcessor { + + private double ratePerSecond = 0.1; + + private double ratePerMB = 0.05; + + @StreamListener(Processor.INPUT) + @SendTo(Processor.OUTPUT) + public UsageCostDetail processUsageCost(UsageDetail usageDetail) { + UsageCostDetail usageCostDetail = new UsageCostDetail(); + usageCostDetail.setUserId(usageDetail.getUserId()); + usageCostDetail.setCallCost(usageDetail.getDuration() * this.ratePerSecond); + usageCostDetail.setDataCost(usageDetail.getData() * this.ratePerMB); + return usageCostDetail; + } +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java new file mode 100644 index 0000000..1657288 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplication.java @@ -0,0 +1,13 @@ +package io.spring.dataflow.sample.usagecostprocessor; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class UsageCostProcessorApplication { + + public static void main(String[] args) { + SpringApplication.run(UsageCostProcessorApplication.class, args); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java new file mode 100644 index 0000000..3f3b37b --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-cost-processor/src/test/java/io/spring/dataflow/sample/usagecostprocessor/UsageCostProcessorApplicationTests.java @@ -0,0 +1,16 @@ +package io.spring.dataflow.sample.usagecostprocessor; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class UsageCostProcessorApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.gitignore b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.gitignore new file mode 100644 index 0000000..153c933 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.gitignore @@ -0,0 +1,29 @@ +HELP.md +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +/build/ + +### VS Code ### +.vscode/ diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..72308aa --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + 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. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.channels.Channels; +import java.nio.channels.ReadableByteChannel; +import java.util.Properties; + +public class MavenWrapperDownloader { + + /** + * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. + */ + private static final String DEFAULT_DOWNLOAD_URL = + "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"; + + /** + * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to + * use instead of the default one. + */ + private static final String MAVEN_WRAPPER_PROPERTIES_PATH = + ".mvn/wrapper/maven-wrapper.properties"; + + /** + * Path where the maven-wrapper.jar will be saved to. + */ + private static final String MAVEN_WRAPPER_JAR_PATH = + ".mvn/wrapper/maven-wrapper.jar"; + + /** + * Name of the property which should be used to override the default download url for the wrapper. + */ + private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; + + public static void main(String args[]) { + System.out.println("- Downloader started"); + File baseDirectory = new File(args[0]); + System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); + + // If the maven-wrapper.properties exists, read it and check if it contains a custom + // wrapperUrl parameter. + File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); + String url = DEFAULT_DOWNLOAD_URL; + if(mavenWrapperPropertyFile.exists()) { + FileInputStream mavenWrapperPropertyFileInputStream = null; + try { + mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); + Properties mavenWrapperProperties = new Properties(); + mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); + url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); + } catch (IOException e) { + System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); + } finally { + try { + if(mavenWrapperPropertyFileInputStream != null) { + mavenWrapperPropertyFileInputStream.close(); + } + } catch (IOException e) { + // Ignore ... + } + } + } + System.out.println("- Downloading from: : " + url); + + File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); + if(!outputFile.getParentFile().exists()) { + if(!outputFile.getParentFile().mkdirs()) { + System.out.println( + "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'"); + } + } + System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); + try { + downloadFileFromURL(url, outputFile); + System.out.println("Done"); + System.exit(0); + } catch (Throwable e) { + System.out.println("- Error downloading"); + e.printStackTrace(); + System.exit(1); + } + } + + private static void downloadFileFromURL(String urlString, File destination) throws Exception { + URL website = new URL(urlString); + ReadableByteChannel rbc; + rbc = Channels.newChannel(website.openStream()); + FileOutputStream fos = new FileOutputStream(destination); + fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); + fos.close(); + rbc.close(); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + 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 + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/mvnw.cmd b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/mvnw.cmd new file mode 100644 index 0000000..fef5a8f --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/pom.xml b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/pom.xml new file mode 100644 index 0000000..2b91f08 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.4.RELEASE + + + io.spring.dataflow.sample + usage-detail-sender + 0.0.1-SNAPSHOT + usage-detail-sender + Demo project for Spring Boot + + + 1.8 + Greenwich.SR1 + + + + + org.springframework.boot + spring-boot-starter-amqp + + + org.springframework.cloud + spring-cloud-stream + + + org.springframework.cloud + spring-cloud-stream-binder-rabbit + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-stream-test-support + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java new file mode 100644 index 0000000..d36cccf --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/domain/UsageDetail.java @@ -0,0 +1,37 @@ +package io.spring.dataflow.sample.domain; + +public class UsageDetail { + + public UsageDetail() { } + + private String userId; + + private long duration; + + private long data; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public long getDuration() { + return duration; + } + + public void setDuration(long duration) { + this.duration = duration; + } + + public long getData() { + return data; + } + + public void setData(long data) { + this.data = data; + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java new file mode 100644 index 0000000..06f943f --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSender.java @@ -0,0 +1,32 @@ +package io.spring.dataflow.sample.usagedetailsender; + +import java.util.Random; + +import io.spring.dataflow.sample.domain.UsageDetail; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Source; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.Scheduled; + +@EnableScheduling +@EnableBinding(Source.class) +public class UsageDetailSender { + + @Autowired + private Source source; + + private String[] users = {"Glenn", "Sabby", "Mark", "Janne", "Ilaya"}; + + @Scheduled(fixedDelay = 1000) + public void sendEvents() { + UsageDetail usageDetail = new UsageDetail(); + usageDetail.setUserId(this.users[new Random().nextInt(5)]); + usageDetail.setDuration(new Random().nextInt(300)); + usageDetail.setData(new Random().nextInt(700)); + this.source.output().send(MessageBuilder.withPayload(usageDetail).build()); + } +} + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java new file mode 100644 index 0000000..cb84b16 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplication.java @@ -0,0 +1,13 @@ +package io.spring.dataflow.sample.usagedetailsender; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class UsageDetailSenderApplication { + + public static void main(String[] args) { + SpringApplication.run(UsageDetailSenderApplication.class, args); + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/resources/application.properties new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java new file mode 100644 index 0000000..19ba3ca --- /dev/null +++ b/dataflow-website/stream-developer-guides/streams/standalone-stream-rabbitmq/usage-detail-sender/src/test/java/io/spring/dataflow/sample/usagedetailsender/UsageDetailSenderApplicationTests.java @@ -0,0 +1,16 @@ +package io.spring.dataflow.sample.usagedetailsender; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class UsageDetailSenderApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties b/dataflow-website/stream-developer-guides/streams/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 9dda3b6..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/pom.xml b/dataflow-website/stream-developer-guides/streams/usage-cost-logger/pom.xml deleted file mode 100644 index f6bd695..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - 4.0.0 - - spring-boot-starter-parent - org.springframework.boot - 2.1.4.RELEASE - - - io.spring.dataflow.sample - usage-cost-logger - 0.0.1-SNAPSHOT - usage-cost-logger - Sample project for Spring Cloud Stream Sink - - - - org.springframework.boot - spring-boot-maven-plugin - - - io.fabric8 - docker-maven-plugin - 0.14.2 - - - - ${docker.image} - - anapsix/alpine-java:8 - - /tmp - - - - java - -jar - /maven/demo.jar - - - - assembly.xml - - - - - - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - - - false - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.cloud - spring-cloud-stream-binder-kafka - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.cloud.stream.app - app-starters-core-dependencies - 2.1.0.RELEASE - pom - import - - - - - ${project.artifactId}-app - UTF-8 - 1.8 - UTF-8 - - diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/docker/assembly.xml b/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/docker/assembly.xml deleted file mode 100644 index a525755..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/docker/assembly.xml +++ /dev/null @@ -1,15 +0,0 @@ - - ${artifactId} - - - - org.springframework.boot:${artifactId} - - . - ${artifactId}.jar - - - diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/resources/application.properties deleted file mode 100644 index 7f3be98..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-logger/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.cloud.stream.bindings.input.destination=usage-cost -server.port=9091 diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties b/dataflow-website/stream-developer-guides/streams/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 9dda3b6..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/pom.xml b/dataflow-website/stream-developer-guides/streams/usage-cost-processor/pom.xml deleted file mode 100644 index fd06700..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - 4.0.0 - - spring-boot-starter-parent - org.springframework.boot - 2.1.4.RELEASE - - - io.spring.dataflow.sample - usage-cost-processor - 0.0.1-SNAPSHOT - usage-cost-processor - Sample project for Spring Cloud Stream Processor - - - - org.springframework.boot - spring-boot-maven-plugin - - - io.fabric8 - docker-maven-plugin - 0.14.2 - - - - ${docker.image} - - anapsix/alpine-java:8 - - /tmp - - - - java - -jar - /maven/demo.jar - - - - assembly.xml - - - - - - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - - - false - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.cloud - spring-cloud-stream-binder-kafka - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.cloud.stream.app - app-starters-core-dependencies - 2.1.0.RELEASE - pom - import - - - - - ${project.artifactId}-app - UTF-8 - 1.8 - UTF-8 - - diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/docker/assembly.xml b/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/docker/assembly.xml deleted file mode 100644 index a525755..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/docker/assembly.xml +++ /dev/null @@ -1,15 +0,0 @@ - - ${artifactId} - - - - org.springframework.boot:${artifactId} - - . - ${artifactId}.jar - - - diff --git a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/resources/application.properties deleted file mode 100644 index 3e472de..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-cost-processor/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -spring.cloud.stream.bindings.input.destination=usage-detail -spring.cloud.stream.bindings.output.destination=usage-cost -server.port=9090 diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties b/dataflow-website/stream-developer-guides/streams/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 9dda3b6..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/pom.xml b/dataflow-website/stream-developer-guides/streams/usage-detail-sender/pom.xml deleted file mode 100644 index 3f1c18c..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/pom.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - 4.0.0 - - spring-boot-starter-parent - org.springframework.boot - 2.1.4.RELEASE - - - io.spring.dataflow.sample - usage-detail-sender - 0.0.1-SNAPSHOT - usage-detail-sender - Sample project for Spring Cloud Stream Source - - - - org.springframework.boot - spring-boot-maven-plugin - - - io.fabric8 - docker-maven-plugin - 0.14.2 - - - - ${docker.image} - - anapsix/alpine-java:8 - - /tmp - - - - java - -jar - /maven/demo.jar - - - - assembly.xml - - - - - - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - - - false - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - - - - org.springframework.boot - spring-boot-starter - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.cloud - spring-cloud-stream-binder-kafka - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.cloud.stream.app - app-starters-core-dependencies - 2.1.0.RELEASE - pom - import - - - - - ${project.artifactId}-app - UTF-8 - 1.8 - UTF-8 - - diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/docker/assembly.xml b/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/docker/assembly.xml deleted file mode 100644 index a525755..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/docker/assembly.xml +++ /dev/null @@ -1,15 +0,0 @@ - - ${artifactId} - - - - org.springframework.boot:${artifactId} - - . - ${artifactId}.jar - - - diff --git a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/resources/application.properties b/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/resources/application.properties deleted file mode 100644 index 98f2de8..0000000 --- a/dataflow-website/stream-developer-guides/streams/usage-detail-sender/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.cloud.stream.bindings.output.destination=usage-detail