From b2c1adc9571f2afba1d9fbc5177ea1e1aa175aa4 Mon Sep 17 00:00:00 2001 From: Pekka Helenius Date: Tue, 1 Sep 2020 11:43:07 +0300 Subject: [PATCH] Exercise: add chapter 1 --- exercises/chapter_1/chapter1_httprequest.zip | Bin 0 -> 106034 bytes .../chapter_1/chapter1_httprequest/.gitignore | 33 ++ .../.mvn/wrapper/MavenWrapperDownloader.java | 117 +++++++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 50710 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 + exercises/chapter_1/chapter1_httprequest/mvnw | 310 ++++++++++++++++++ .../chapter_1/chapter1_httprequest/mvnw.cmd | 182 ++++++++++ .../chapter_1/chapter1_httprequest/pom.xml | 55 ++++ .../Chapter1HttprequestApplication.java | 15 + .../web/HttpExceptionHandler.java | 44 +++ .../web/HttpRequestHandler.java | 144 ++++++++ .../web/HttpServerLogger.java | 50 +++ .../chapter1_httprequest/web/PageMapper.java | 18 + .../src/main/resources/application.properties | 38 +++ .../Chapter1HttprequestApplicationTests.java | 13 + 15 files changed, 1021 insertions(+) create mode 100644 exercises/chapter_1/chapter1_httprequest.zip create mode 100644 exercises/chapter_1/chapter1_httprequest/.gitignore create mode 100644 exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/MavenWrapperDownloader.java create mode 100644 exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.jar create mode 100644 exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.properties create mode 100755 exercises/chapter_1/chapter1_httprequest/mvnw create mode 100644 exercises/chapter_1/chapter1_httprequest/mvnw.cmd create mode 100644 exercises/chapter_1/chapter1_httprequest/pom.xml create mode 100644 exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplication.java create mode 100644 exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpExceptionHandler.java create mode 100644 exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpRequestHandler.java create mode 100644 exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpServerLogger.java create mode 100644 exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/PageMapper.java create mode 100644 exercises/chapter_1/chapter1_httprequest/src/main/resources/application.properties create mode 100644 exercises/chapter_1/chapter1_httprequest/src/test/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplicationTests.java diff --git a/exercises/chapter_1/chapter1_httprequest.zip b/exercises/chapter_1/chapter1_httprequest.zip new file mode 100644 index 0000000000000000000000000000000000000000..d67799b91207aa6da1d6f959b0743b4a09e018a0 GIT binary patch literal 106034 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

sW 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 literal 0 HcmV?d00001 diff --git a/exercises/chapter_1/chapter1_httprequest/.gitignore b/exercises/chapter_1/chapter1_httprequest/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### 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/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/MavenWrapperDownloader.java b/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..e76d1f3 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,117 @@ +/* + * Copyright 2007-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Properties; + +public class MavenWrapperDownloader { + + private static final String WRAPPER_VERSION = "0.5.6"; + /** + * 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/" + + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".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 directory '" + 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 { + if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { + String username = System.getenv("MVNW_USERNAME"); + char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); + Authenticator.setDefault(new Authenticator() { + @Override + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(username, password); + } + }); + } + 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/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.jar b/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054 GIT binary patch literal 50710 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 EfAhh=DF6Tf literal 0 HcmV?d00001 diff --git a/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.properties b/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..642d572 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/exercises/chapter_1/chapter1_httprequest/mvnw b/exercises/chapter_1/chapter1_httprequest/mvnw new file mode 100755 index 0000000..a16b543 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/mvnw @@ -0,0 +1,310 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# 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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + 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)`" +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 + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + 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 $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + 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 + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +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/exercises/chapter_1/chapter1_httprequest/mvnw.cmd b/exercises/chapter_1/chapter1_httprequest/mvnw.cmd new file mode 100644 index 0000000..c8d4337 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/mvnw.cmd @@ -0,0 +1,182 @@ +@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 Maven 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 keystroke 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 by 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.5.6/maven-wrapper-0.5.6.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% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%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/exercises/chapter_1/chapter1_httprequest/pom.xml b/exercises/chapter_1/chapter1_httprequest/pom.xml new file mode 100644 index 0000000..5555e3a --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.3.3.RELEASE + + + com.fjordtek + chapter1_httprequest + 0.0.1-SNAPSHOT + chapter1_httprequest + Simple HTTP requests with Spring + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.junit.vintage + junit-vintage-engine + + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplication.java b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplication.java new file mode 100644 index 0000000..17cbd74 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplication.java @@ -0,0 +1,15 @@ +// Pekka Helenius , Fjordtek 2020 + +package com.fjordtek.chapter1_httprequest; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Chapter1HttprequestApplication { + + public static void main(String[] args) { + SpringApplication.run(Chapter1HttprequestApplication.class, args); + } + +} diff --git a/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpExceptionHandler.java b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpExceptionHandler.java new file mode 100644 index 0000000..48a4ef7 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpExceptionHandler.java @@ -0,0 +1,44 @@ +// Pekka Helenius , Fjordtek 2020 + +package com.fjordtek.chapter1_httprequest.web; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import javax.servlet.http.HttpServletRequest; + +@ControllerAdvice +public class HttpExceptionHandler { + + private static final String HTTPNOTFOUND = "Invalid request"; + + private HttpServerLogger httpServerLogger = new HttpServerLogger(); + + // HTTP status 404 + @ResponseStatus( + value = HttpStatus.NOT_FOUND, + reason= HTTPNOTFOUND + ) + @ResponseBody + public String httpNotFoundBody() { + return HTTPNOTFOUND + "\n"; + } + // Very simple exception handler (not any sophistication) + @ExceptionHandler(Exception.class) + public ResponseEntity notFoundErrorHandler(HttpServletRequest requestData) { + + httpServerLogger.logMessageError( + requestData, + "HTTPNOTFOUND" + ); + + return ResponseEntity + .status(HttpStatus.NOT_FOUND) + .body(HTTPNOTFOUND + "\n"); + } + +} diff --git a/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpRequestHandler.java b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpRequestHandler.java new file mode 100644 index 0000000..bb6974e --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpRequestHandler.java @@ -0,0 +1,144 @@ +// Pekka Helenius , Fjordtek 2020 + +package com.fjordtek.chapter1_httprequest.web; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +//import com.fjordtek.chapter1_httprequest.web.PageMapper; + +@Controller +@ResponseBody +public class HttpRequestHandler { + + protected static final String indexPageURL = "index"; + protected static final String contactPageURL = "contact"; + protected static final String helloPageURL = "hello"; + + private PageMapper pageMapper = new PageMapper(); + private HttpServerLogger httpServerLogger = new HttpServerLogger(); + private HttpExceptionHandler httpExceptionHandler = new HttpExceptionHandler(); + + private ResponseEntity generateDefaultWebsiteResponse( + String webPageURL, + String HumanReadableName, + HttpServletRequest clientRequestData + ) { + String siteName = pageMapper.mapWebPageNames(webPageURL, HumanReadableName); + httpServerLogger.logMessageNormal( + clientRequestData, + "HTTPOK" + ); + return new ResponseEntity<>( + "This is the " + siteName + " page\n", + HttpStatus.OK + ); + } + + // Assignment 1 - controller and endpoints + @RequestMapping( + value = indexPageURL, + method = RequestMethod.GET + ) + public ResponseEntity generateIndexPage(HttpServletRequest requestData) { + return generateDefaultWebsiteResponse( + indexPageURL, + "main", + requestData + ); + } + + @RequestMapping( + value = contactPageURL, + method = RequestMethod.GET + ) + public ResponseEntity generateContactPage(HttpServletRequest requestData) { + + return generateDefaultWebsiteResponse( + contactPageURL, + "contact", + requestData + ); + } + + // Redirect hard-set root URL / to index subpage + // (~default landing page on many web server configurations (index.php, index.html, ...) ) + @RequestMapping( + value = "/", + method = RequestMethod.GET + ) + @ResponseStatus(HttpStatus.FOUND) + public void redirectToIndex(HttpServletResponse serverResponse) { + serverResponse.setHeader("Location", "/" + indexPageURL); + serverResponse.setStatus(302); + } + /* + Alternatively: + + ResponseEntity redirectToIndex() { + return ResponseEntity.status(HttpStatus.FOUND) + .location(URI.create("/" + indexPageURL)) + .build(); + } + */ + + // Assignment 2 - Request parameters + + /* + * Multiple parameters given (see that 'method' can have multiple values assigned + * Just a brief example/demonstration + * NOTE: MIME type 'x-www-form-urlencoded' works with curl, at least. Change it if needed. + * curl 'http://localhost:8080/index' --data 'location=moon&name=John' + * + */ + @RequestMapping( + value = { helloPageURL }, + method = { RequestMethod.POST }, + produces = { "application/html" }, + consumes = "application/x-www-form-urlencoded", + params = { "location", "name" } + ) + public ResponseEntity getNameAndLocation( + @RequestParam( + value = "location", + required = true, + defaultValue = "" + ) String location, + @RequestParam( + value = "name", + required = true, + defaultValue = "" + ) String name, + HttpServletRequest requestData + ) + { + + if (location == null || + name == null || + location.equals("") || + name.equals("") || + requestData.getParameterMap().size() > 2 + ) { + return httpExceptionHandler.notFoundErrorHandler(requestData); + } + + httpServerLogger.logMessageNormal( + requestData, + "HTTPOK" + ); + + return new ResponseEntity<>( + "Welcome to the " + location + " " + name + "!\n", + HttpStatus.OK + ); + } +} diff --git a/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpServerLogger.java b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpServerLogger.java new file mode 100644 index 0000000..79cd843 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/HttpServerLogger.java @@ -0,0 +1,50 @@ +// Pekka Helenius , Fjordtek 2020 + +package com.fjordtek.chapter1_httprequest.web; + +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; + +public class HttpServerLogger { + + private LocalDateTime logTimeStamp; + + private void setLogTimeStamp() { + this.logTimeStamp = LocalDateTime.now(); + } + + private LocalDateTime getLogTimeStamp() { + return this.logTimeStamp; + } + + public void logMessageNormal( + HttpServletRequest request, + String HttpRawStatusType + ) { + + setLogTimeStamp(); + System.out.printf( + "%s: HTTP request to '%s' from client %s (%s)\n", + getLogTimeStamp(), + request.getRequestURL(), + request.getRemoteAddr(), + HttpRawStatusType + ); + } + + public void logMessageError( + HttpServletRequest request, + String HttpRawStatusType + ) { + + setLogTimeStamp(); + System.err.printf( + "%s: Invalid HTTP request to '%s' from client %s (%s)\n", + getLogTimeStamp(), + request.getRequestURL(), + request.getRemoteAddr(), + HttpRawStatusType + ); + } + +} diff --git a/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/PageMapper.java b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/PageMapper.java new file mode 100644 index 0000000..7ddeed0 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/main/java/com/fjordtek/chapter1_httprequest/web/PageMapper.java @@ -0,0 +1,18 @@ +// Pekka Helenius , Fjordtek 2020 + +package com.fjordtek.chapter1_httprequest.web; + +import java.util.HashMap; +import java.util.Map; + +// NOTE: This is not actually required, will possibly be removed +public class PageMapper { + + private Map webPageNameMap = new HashMap<>(); + + protected String mapWebPageNames(String keyName, String valueName) { + webPageNameMap.put(keyName, valueName); + return webPageNameMap.get(keyName); + } + +} \ No newline at end of file diff --git a/exercises/chapter_1/chapter1_httprequest/src/main/resources/application.properties b/exercises/chapter_1/chapter1_httprequest/src/main/resources/application.properties new file mode 100644 index 0000000..cc31876 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/main/resources/application.properties @@ -0,0 +1,38 @@ +# Default HTTP TCP port number for this server application +# Do not set this value below 1024 as these TCP/UDP ports are privileged, requiring root permissions +# +server.port=8080 + +# Ref: https://docs.spring.io/spring-boot/docs/1.2.0.M2/reference/html/common-application-properties.html + +# # EMBEDDED SERVER CONFIGURATION (ServerProperties) +# server.port=8080 +# server.address= # bind to a specific NIC +# server.session-timeout= # session timeout in seconds +# server.context-path= # the context path, defaults to '/' +# server.servlet-path= # the servlet path, defaults to '/' +# server.ssl.client-auth= # want or need +# server.ssl.key-alias= +# server.ssl.key-password= +# server.ssl.key-store= +# server.ssl.key-store-password= +# server.ssl.key-store-provider= +# server.ssl.key-store-type= +# server.ssl.protocol=TLS +# server.ssl.trust-store= +# server.ssl.trust-store-password= +# server.ssl.trust-store-provider= +# server.ssl.trust-store-type= +# server.tomcat.access-log-pattern= # log pattern of the access log +# server.tomcat.access-log-enabled=false # is access logging enabled +# server.tomcat.internal-proxies=10\.\d{1,3}\.\d{1,3}\.\d{1,3}|\ +# 192\.168\.\d{1,3}\.\d{1,3}|\ +# 169\.254\.\d{1,3}\.\d{1,3}|\ +# 127\.\d{1,3}\.\d{1,3}\.\d{1,3} # regular expression matching trusted IP addresses +# server.tomcat.protocol-header=x-forwarded-proto # front end proxy forward header +# server.tomcat.port-header= # front end proxy port header +# server.tomcat.remote-ip-header=x-forwarded-for +# server.tomcat.basedir=/tmp # base dir (usually not needed, defaults to tmp) +# server.tomcat.background-processor-delay=30; # in seconds +# server.tomcat.max-threads = 0 # number of threads in protocol handler +# server.tomcat.uri-encoding = UTF-8 # character encoding to use for URL decoding \ No newline at end of file diff --git a/exercises/chapter_1/chapter1_httprequest/src/test/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplicationTests.java b/exercises/chapter_1/chapter1_httprequest/src/test/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplicationTests.java new file mode 100644 index 0000000..18a5903 --- /dev/null +++ b/exercises/chapter_1/chapter1_httprequest/src/test/java/com/fjordtek/chapter1_httprequest/Chapter1HttprequestApplicationTests.java @@ -0,0 +1,13 @@ +package com.fjordtek.chapter1_httprequest; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class Chapter1HttprequestApplicationTests { + + @Test + void contextLoads() { + } + +}