This repo just to test if the D387 is working properly in the fedora vm

This commit is contained in:
2026-02-05 16:44:41 -05:00
commit 799cb51a1b
160 changed files with 25364 additions and 0 deletions
+33
View File
@@ -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/
BIN
View File
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
+9
View File
@@ -0,0 +1,9 @@
FROM eclipse-temurin:17-jdk-jammy
WORKDIR /app
COPY target/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
+29
View File
@@ -0,0 +1,29 @@
<strong> **DO NOT DISTRIBUTE OR PUBLICLY POST SOLUTIONS TO THESE LABS. MAKE ALL FORKS OF THIS REPOSITORY WITH SOLUTION CODE PRIVATE. PLEASE REFER TO THE STUDENT CODE OF CONDUCT AND ETHICAL EXPECTATIONS FOR COLLEGE OF INFORMATION TECHNOLOGY STUDENTS FOR SPECIFICS. ** </strong>
# WESTERN GOVERNORS UNIVERSITY
## D387 ADVANCED JAVA
Welcome to Advanced Java! This is an opportunity for students to write multithreaded object-oriented code using Java frameworks and determine how to deploy software applications using cloud services.
FOR SPECIFIC TASK INSTRUCTIONS AND REQUIREMENTS FOR THIS ASSESSMENT, PLEASE REFER TO THE COURSE PAGE.
## BASIC INSTRUCTIONS
For this assessment, you will modify a Spring application with a Java back end and an Angular front end to include multithreaded language translation, a message at different time zones, and currency exchange. Then, build a Docker image of the current multithreaded Spring application and containerize it using the supporting documents provided in this task.
## SUPPLEMENTAL RESOURCES
1. How to clone a project to IntelliJ using Git?
> Ensure that you have Git installed on your system and that IntelliJ is installed using [Toolbox](https://www.jetbrains.com/toolbox-app/). Make sure that you are using version 2022.3.2. Once this has been confirmed, click the clone button and use the 'IntelliJ IDEA (HTTPS)' button. This will open IntelliJ with a prompt to clone the proejct. Save it in a safe location for the directory and press clone. IntelliJ will prompt you for your credentials. Enter in your WGU Credentials and the project will be cloned onto your local machine.
2. How to create a branch and start Development?
- GitLab method
> Press the '+' button located near your branch name. In the dropdown list, press the 'New branch' button. This will allow you to create a name for your branch. Once the branch has been named, you can select 'Create Branch' to push the branch to your repository.
- IntelliJ method
> In IntelliJ, Go to the 'Git' button on the top toolbar. Select the new branch option and create a name for the branch. Make sure checkout branch is selected and press create. You can now add a commit message and push the new branch to the local repo.
## SUPPORT
If you need additional support, please navigate to the course page and reach out to your course instructor.
## FUTURE USE
Take this opportunity to create or add to a simple resume portfolio to highlight and showcase your work for future use in career search, experience, and education!
Vendored Executable
+316
View File
@@ -0,0 +1,316 @@
#!/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 /usr/local/etc/mavenrc ] ; then
. /usr/local/etc/mavenrc
fi
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="`\\unset -f command; \\command -v 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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.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" || rm -f "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$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 \
$MAVEN_DEBUG_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" \
"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
Vendored
+188
View File
@@ -0,0 +1,188 @@
@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 "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
FOR /F "usebackq 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%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.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 "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\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%
cmd /C exit /B %ERROR_CODE%
+124
View File
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>edu.wgu</groupId>
<artifactId>D387_sample_code</artifactId>
<version>0.0.2-SNAPSHOT</version>
<packaging>jar</packaging>
<name>D387 sample code</name>
<description>D387 sample code</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.13.4</version>
</dependency>
-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<build>
<plugins> <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>ng</executable>
<workingDirectory>src/main/UI</workingDirectory>
<arguments>
<argument>build</argument>
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${project.parent.version}</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
+16
View File
@@ -0,0 +1,16 @@
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# For the full list of supported browsers by the Angular framework, please see:
# https://angular.io/guide/browser-support
# You can see what browsers were selected by your queries by running:
# npx browserslist
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major versions
last 2 iOS major versions
Firefox ESR
+16
View File
@@ -0,0 +1,16 @@
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
[*.md]
max_line_length = off
trim_trailing_whitespace = false
+42
View File
@@ -0,0 +1,42 @@
# See http://help.github.com/ignore-files/ for more about ignoring files.
# Compiled output
/dist
/tmp
/out-tsc
/bazel-out
# Node
/node_modules
npm-debug.log
yarn-error.log
# IDEs and editors
.idea/
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# Visual Studio Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# Miscellaneous
/.angular/cache
.sass-cache/
/connect.lock
/coverage
/libpeerconnection.log
testem.log
/typings
# System files
.DS_Store
Thumbs.db
+27
View File
@@ -0,0 +1,27 @@
# LandonHotelApp
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.1.3.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
+104
View File
@@ -0,0 +1,104 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"LandonHotelApp": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "../resources/static",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"budgets": [
{
"type": "initial",
"maximumWarning": "4mb",
"maximumError": "1mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "14kb",
"maximumError": "14kb"
}
],
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"outputHashing": "all"
},
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
}
},
"defaultConfiguration": "production"
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"configurations": {
"production": {
"browserTarget": "LandonHotelApp:build:production"
},
"development": {
"browserTarget": "LandonHotelApp:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "LandonHotelApp:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
}
}
}
},
"cli": {
"analytics": false
}
}
+44
View File
@@ -0,0 +1,44 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true // removes the duplicated traces
},
coverageReporter: {
dir: require('path').join(__dirname, './coverage/landon-hotel-app'),
subdir: '.',
reporters: [
{ type: 'html' },
{ type: 'text-summary' }
]
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};
+21320
View File
File diff suppressed because it is too large Load Diff
+44
View File
@@ -0,0 +1,44 @@
{
"name": "landon-hotel-app",
"version": "1.2.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"watch": "ng build --watch --configuration development",
"test": "ng test"
},
"private": true,
"dependencies": {
"@angular/animations": "^14.1.0",
"@angular/common": "^14.1.0",
"@angular/compiler": "^14.1.0",
"@angular/core": "^14.1.0",
"@angular/forms": "^14.1.0",
"@angular/platform-browser": "^14.1.0",
"@angular/platform-browser-dynamic": "^14.1.0",
"@angular/router": "^14.1.0",
"node": "^18.10.0",
"rxjs": "~7.5.0",
"rxjs-compat": "^6.6.7",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "^14.1.3",
"@angular/cli": "~14.1.3",
"@angular/compiler-cli": "^14.1.0",
"@types/jasmine": "~4.0.0",
"jasmine-core": "~4.2.0",
"karma": "~6.4.0",
"karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.2.0",
"karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~2.0.0",
"typescript": "~4.7.2"
},
"description": "This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.1.3.",
"main": "karma.conf.js",
"author": "",
"license": "ISC"
}
+10
View File
@@ -0,0 +1,10 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
+943
View File
@@ -0,0 +1,943 @@
@import url(http://fonts.googleapis.com/css?family=Exo+2:400,200,600,800);
/* line 5, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font: inherit;
font-size: 100%;
vertical-align: baseline;
}
/* line 22, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
html {
line-height: 1;
}
/* line 24, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
ol, ul {
list-style: none;
}
/* line 26, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
table {
border-collapse: collapse;
border-spacing: 0;
}
/* line 28, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
caption, th, td {
text-align: left;
font-weight: normal;
vertical-align: middle;
}
/* line 30, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
q, blockquote {
quotes: none;
}
/* line 103, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
q:before, q:after, blockquote:before, blockquote:after {
content: "";
content: none;
}
/* line 32, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
a img {
border: none;
}
/* line 116, ../../../../../.rvm/gems/ruby-2.1.2/gems/compass-core-1.0.0.rc.1/stylesheets/compass/reset/_utilities.scss */
article, aside, details, figcaption, figure, footer, header, main, menu, nav, section, summary {
display: block;
}
/* line 14, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_box-sizing.scss */
*, *:before, *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
/* line 1, ../../../components/sass/_base.scss */
body {
font: 200 1em/1.5em "Exo 2", "Helvetica Neue", Helvetica, Arial, sans-serif;
background: #FFFFFF;
color: #000000;
}
/* line 7, ../../../components/sass/_base.scss */
h1, h2, h3, h4, h5, h6 {
font: 200 1.5em/1.5em "Exo 2", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #0e83a0;
font-weight: 600;
}
/* line 13, ../../../components/sass/_base.scss */
strong {
font-weight: 600;
}
/* line 17, ../../../components/sass/_base.scss */
p {
font-weight: 200;
padding-bottom: 10px;
}
/* line 1, ../../../components/sass/_layout.scss */
body {
position: absolute;
width: 100%;
height: 100%;
}
/* line 7, ../../../components/sass/_layout.scss */
.scene {
position: relative;
padding: 20px 0;
}
/* line 11, ../../../components/sass/_layout.scss */
.scene article {
max-width: 95%;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
.scene article:after {
content: " ";
display: block;
clear: both;
}
@media (min-width: 1200px) {
/* line 7, ../../../components/sass/_layout.scss */
.scene {
padding: 40px 0;
}
}
@media (min-width: 960px) {
/* line 20, ../../../components/sass/_layout.scss */
.scene article {
max-width: 60em;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
.scene article:after {
content: " ";
display: block;
clear: both;
}
}
/* line 2, ../../../components/sass/modules/_intro.scss */
header .fullheight {
background: linear-gradient(to bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0)), url("images/hotel/splash_hotelphoto.jpg");
background-repeat: no-repeat;
background-position: center center;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
-webkit-justify-content: center;
justify-content: center;
}
/* line 9, ../../../components/sass/modules/_intro.scss */
header .fullheight .hgroup {
padding: 100px 0;
}
/* line 12, ../../../components/sass/modules/_intro.scss */
header .fullheight .hgroup h1 {
color: #FFFFFF;
font-size: 5em;
font-weight: 800;
line-height: .8em;
text-shadow: #000000 0 0 20px;
text-align: center;
}
/* line 21, ../../../components/sass/modules/_intro.scss */
header .fullheight .hgroup h2 {
display: block;
color: #FFFFFF;
width: 60%;
max-width: 200px;
text-align: center;
border: 1px solid #FFFFFF;
margin: 15px auto 0;
padding: 10px;
background: rgba(0, 0, 0, 0.5);
font-size: 1.3em;
}
/* line 35, ../../../components/sass/modules/_intro.scss */
header .fullheight .hgroup p {
text-align: center;
}
/* line 37, ../../../components/sass/modules/_intro.scss */
header .fullheight .hgroup p img {
padding-top: 50px;
max-width: 50px;
}
/* line 1, ../../../components/sass/modules/_nav.scss */
header #nav {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzBhNWM3MSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA2MzY0MiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -moz-linear-gradient(top, #0a5c71, #063642);
background-image: -webkit-linear-gradient(top, #0a5c71, #063642);
background-image: linear-gradient(to bottom, #0a5c71, #063642);
width: 100%;
z-index: 100;
}
/* line 22, ../../../components/sass/_mixins.scss */
header #nav:before, header #nav:after {
content: '';
display: table;
}
/* line 27, ../../../components/sass/_mixins.scss */
header #nav:after {
clear: both;
}
/* line 7, ../../../components/sass/modules/_nav.scss */
header #nav .navbar {
max-width: 60em;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
header #nav .navbar:after {
content: " ";
display: block;
clear: both;
}
/* line 9, ../../../components/sass/modules/_nav.scss */
header #nav .navbar .brand {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 33.33333%;
float: left;
padding-left: 0.83333%;
padding-right: 0.83333%;
float: left;
font-weight: 600;
text-align: center;
text-transform: uppercase;
background: #DF4848;
}
/* line 17, ../../../components/sass/modules/_nav.scss */
header #nav .navbar .brand a {
color: #FFFFFF;
text-decoration: none;
text-align: center;
display: inline-block;
padding: 10px;
font-size: 1.5em;
}
@media (max-width: 650px) {
/* line 17, ../../../components/sass/modules/_nav.scss */
header #nav .navbar .brand a {
font-size: 1.2em;
}
/* line 27, ../../../components/sass/modules/_nav.scss */
header #nav .navbar .brand a span {
display: none;
}
}
/* line 32, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 66.66667%;
float: left;
padding-left: 0.83333%;
padding-right: 0.83333%;
}
/* line 34, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li {
float: left;
}
/* line 36, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a {
color: #FFFFFF;
font: 200 1em/1.5em "Exo 2", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 1em;
display: inline-block;
padding: 10px 10px 10px 45px;
text-decoration: none;
background-size: 35px;
background: no-repeat 2px;
}
/* line 55, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a:hover {
background-color: #EFC94C;
color: #063642;
}
@media (min-width: 0) and (max-width: 650px) {
/* line 36, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a {
padding: 10px 18px;
}
/* line 62, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a::after {
content: '\000a0';
display: block;
}
/* line 66, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a span {
display: none;
}
}
@media (min-width: 650px) and (max-width: 960px) {
/* line 36, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a {
padding-left: 10px;
}
/* line 72, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a.icon {
background-image: none;
}
}
/* line 75, ../../../components/sass/modules/_nav.scss */
header #nav .navbar ul li a.active {
background-color: #DF4848;
color: #FFFFFF;
}
/* line 1, ../../../components/sass/modules/_welcome.scss */
#welcome {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VmYzk0YyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2UyN2EzZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -moz-linear-gradient(top, #efc94c, #e27a3f);
background-image: -webkit-linear-gradient(top, #efc94c, #e27a3f);
background-image: linear-gradient(to bottom, #efc94c, #e27a3f);
}
/* line 4, ../../../components/sass/modules/_welcome.scss */
#welcome article {
text-align: center;
max-width: 70%;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#welcome article:after {
content: " ";
display: block;
clear: both;
}
@media (min-width: 650px) {
/* line 4, ../../../components/sass/modules/_welcome.scss */
#welcome article {
max-width: 33em;
margin-left: auto;
margin-right: auto;
padding: 60px 0;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#welcome article:after {
content: " ";
display: block;
clear: both;
}
}
/* line 13, ../../../components/sass/modules/_welcome.scss */
#welcome h1 {
font-weight: normal;
line-height: 100%;
color: #a24a19;
padding: 10px 0;
}
/* line 22, ../../../components/sass/_mixins.scss */
#welcome .gallery:before, #welcome .gallery:after {
content: '';
display: table;
}
/* line 27, ../../../components/sass/_mixins.scss */
#welcome .gallery:after {
clear: both;
}
/* line 22, ../../../components/sass/modules/_welcome.scss */
#welcome .gallery img {
-moz-border-radius: 20%;
-webkit-border-radius: 20%;
border-radius: 20%;
display: none;
}
@media (min-width: 650px) {
/* line 22, ../../../components/sass/modules/_welcome.scss */
#welcome .gallery img {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 25%;
float: left;
padding-left: 2.5%;
padding-right: 2.5%;
display: inline;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(4n + 1) {
margin-left: 0;
margin-right: -100%;
clear: both;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(4n + 2) {
margin-left: 25%;
margin-right: -100%;
clear: none;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(4n + 3) {
margin-left: 50%;
margin-right: -100%;
clear: none;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(4n + 4) {
margin-left: 75%;
margin-right: -100%;
clear: none;
}
/* line 29, ../../../components/sass/modules/_welcome.scss */
#welcome .gallery img.hidesm {
display: none;
}
}
@media (min-width: 960px) {
/* line 22, ../../../components/sass/modules/_welcome.scss */
#welcome .gallery img {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 20%;
float: left;
padding-left: 2%;
padding-right: 2%;
display: inline;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(5n + 1) {
margin-left: 0;
margin-right: -100%;
clear: both;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(5n + 2) {
margin-left: 20%;
margin-right: -100%;
clear: none;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(5n + 3) {
margin-left: 40%;
margin-right: -100%;
clear: none;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(5n + 4) {
margin-left: 60%;
margin-right: -100%;
clear: none;
}
/* line 66, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/language/susy/_gallery.scss */
#welcome .gallery img:nth-child(5n + 5) {
margin-left: 80%;
margin-right: -100%;
clear: none;
}
/* line 35, ../../../components/sass/modules/_welcome.scss */
#welcome .gallery img.hidesm {
display: inline;
}
}
/* line 1, ../../../components/sass/modules/_events.scss */
#events {
padding: 0;
}
/* line 22, ../../../components/sass/_mixins.scss */
#events:before, #events:after {
content: '';
display: table;
}
/* line 27, ../../../components/sass/_mixins.scss */
#events:after {
clear: both;
}
/* line 5, ../../../components/sass/modules/_events.scss */
#events .event {
position: relative;
max-width: 100%;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#events .event:after {
content: " ";
display: block;
clear: both;
}
@media (min-width: 650px) {
/* line 5, ../../../components/sass/modules/_events.scss */
#events .event {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 50%;
float: left;
}
}
/* line 12, ../../../components/sass/modules/_events.scss */
#events .event .content {
position: absolute;
bottom: 0;
background: rgba(0, 0, 0, 0.7);
padding: 30px;
color: #FFFFFF;
font-weight: 200;
line-height: 130%;
}
/* line 21, ../../../components/sass/modules/_events.scss */
#events .event .content h2 {
color: #FFFFFF;
line-height: 1em;
}
/* line 26, ../../../components/sass/modules/_events.scss */
#events .event .content p {
padding: 5px 0;
}
/* line 3, ../../../components/sass/modules/_dining.scss */
#dining h1, #dining h2 {
color: #DF4848;
padding: 10px 0;
}
/* line 8, ../../../components/sass/modules/_dining.scss */
#dining img {
width: 100%;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
@media (min-width: 650px) {
/* line 14, ../../../components/sass/modules/_dining.scss */
#dining #areadining {
margin-bottom: 30px;
}
/* line 17, ../../../components/sass/modules/_dining.scss */
#dining #areadining h1 {
font-weight: 200;
font-size: 2.5em;
}
/* line 21, ../../../components/sass/modules/_dining.scss */
#dining #areadining p {
font-size: 1.5em;
line-height: 140%;
}
/* line 27, ../../../components/sass/modules/_dining.scss */
#dining section {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 33.33333%;
float: left;
padding-left: 0.83333%;
padding-right: 0.83333%;
}
/* line 30, ../../../components/sass/modules/_dining.scss */
#dining section h2 {
font-size: 1.2em;
line-height: 120%;
color: #CD0069;
}
/* line 35, ../../../components/sass/modules/_dining.scss */
#dining section p {
padding-top: 10px;
font-size: 1em;
line-height: 130%;
}
}
/* line 43, ../../../components/sass/modules/_dining.scss */
#dining #roomservice {
margin-top: 20px;
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZlZmFmMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -moz-linear-gradient(top, #ffffff, #fefaf0);
background-image: -webkit-linear-gradient(top, #ffffff, #fefaf0);
background-image: linear-gradient(to bottom, #ffffff, #fefaf0);
padding-left: 9.16667%;
padding-right: 9.16667%;
text-align: center;
border-top: 1px solid #DF4848;
border-bottom: 1px solid #DF4848;
}
/* line 1, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzNhM2Y5MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzQ1YjI5ZCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
background-image: -moz-linear-gradient(top, #3a3f90, #45b29d);
background-image: -webkit-linear-gradient(top, #3a3f90, #45b29d);
background-image: linear-gradient(to bottom, #3a3f90, #45b29d);
color: #FFFFFF;
}
/* line 5, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo h1, #hotelinfo h2, #hotelinfo h3, #hotelinfo h4, #hotelinfo h5, #hotelinfo h6 {
color: #FFFFFF;
}
/* line 10, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo .heading h1 {
font-size: 3em;
font-weight: 200;
}
/* line 22, ../../../components/sass/_mixins.scss */
#hotelinfo #usefulinfo:before, #hotelinfo #usefulinfo:after {
content: '';
display: table;
}
/* line 27, ../../../components/sass/_mixins.scss */
#hotelinfo #usefulinfo:after {
clear: both;
}
@media (min-width: 650px) {
/* line 18, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 33.33333%;
float: left;
padding-left: 3.33333%;
padding-right: 3.33333%;
}
}
@media (min-width: 450px) and (max-width: 650px) {
/* line 23, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section.checklist {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 50%;
float: left;
padding-left: 5%;
padding-right: 5%;
}
}
/* line 28, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section h2 {
color: #b5b7e1;
font-size: 1.3em;
line-height: 110%;
padding: 10px 0;
}
/* line 35, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section p {
font-size: 1em;
line-height: 130%;
}
/* line 41, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section ul li {
list-style: square;
margin-left: 10%;
line-height: 115%;
margin-bottom: 5px;
}
/* line 51, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section#arrivalinfo ul {
margin: 0;
}
/* line 53, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section#arrivalinfo ul li {
list-style: none;
border-top: 1px solid #FFFFFF;
padding: 15px 0;
margin-left: 0;
}
/* line 58, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section#arrivalinfo ul li strong {
color: #EFC94C;
}
/* line 62, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #usefulinfo section#arrivalinfo ul li:first-child {
border-top: none;
}
/* line 70, ../../../components/sass/modules/_hotelinfo.scss */
#hotelinfo #greenprogram {
background-color: rgba(26, 68, 60, 0.5);
margin-top: 20px;
border: 1px solid #FFFFFF;
padding: 20px;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
border-radius: 20px;
}
/* line 2, ../../../components/sass/modules/_rooms.scss */
#rooms header {
margin-bottom: 20px;
max-width: 90%;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#rooms header:after {
content: " ";
display: block;
clear: both;
}
@media (min-width: 960px) {
/* line 2, ../../../components/sass/modules/_rooms.scss */
#rooms header {
max-width: 60em;
margin-left: auto;
margin-right: auto;
padding-left: 9.16667%;
padding-right: 9.16667%;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#rooms header:after {
content: " ";
display: block;
clear: both;
}
}
/* line 11, ../../../components/sass/modules/_rooms.scss */
#rooms .room {
max-width: 100%;
margin-left: auto;
margin-right: auto;
display: -webkit-flex;
display: flex;
-webkit-align-items: center;
align-items: center;
-webkit-justify-content: center;
justify-content: center;
padding: 200px 0;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#rooms .room:after {
content: " ";
display: block;
clear: both;
}
@media (min-width: 650px) {
/* line 11, ../../../components/sass/modules/_rooms.scss */
#rooms .room {
padding-left: 59.16667%;
padding-right: 9.16667%;
}
}
/* line 24, ../../../components/sass/modules/_rooms.scss */
#rooms .room .content {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.8);
padding: 20px;
}
/* line 29, ../../../components/sass/modules/_rooms.scss */
#rooms .room .content h1 {
color: #DF4848;
}
/* line 22, ../../../components/sass/_mixins.scss */
#attractions:before, #attractions:after {
content: '';
display: table;
}
/* line 27, ../../../components/sass/_mixins.scss */
#attractions:after {
clear: both;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#attractions:after {
content: " ";
display: block;
clear: both;
}
/* line 11, ../../../components/sass/modules/_attractions.scss */
#attractions article {
max-width: 80%;
padding: 20px;
margin: 200px auto;
background: rgba(255, 255, 255, 0.8);
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#attractions article:after {
content: " ";
display: block;
clear: both;
}
@media (min-width: 960px) {
/* line 11, ../../../components/sass/modules/_attractions.scss */
#attractions article {
max-width: 50%;
margin-left: auto;
margin-right: auto;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
#attractions article:after {
content: " ";
display: block;
clear: both;
}
}
/* line 1, ../../../components/sass/modules/_footer.scss */
footer {
max-width: 100%;
margin-left: auto;
margin-right: auto;
background: #333333;
padding: 30px 0;
}
/* line 12, ../../../../../.rvm/gems/ruby-2.1.2/gems/susy-2.1.3/sass/susy/output/support/_clearfix.scss */
footer:after {
content: " ";
display: block;
clear: both;
}
/* line 5, ../../../components/sass/modules/_footer.scss */
footer #socialmedia {
text-align: center;
}
/* line 7, ../../../components/sass/modules/_footer.scss */
footer #socialmedia ul {
list-style: none;
}
/* line 9, ../../../components/sass/modules/_footer.scss */
footer #socialmedia ul li {
display: inline-block;
padding: 0 10px;
}
/* line 12, ../../../components/sass/modules/_footer.scss */
footer #socialmedia ul li img {
width: 30px;
-moz-border-radius: 50%;
-webkit-border-radius: 50%;
border-radius: 50%;
}
.live-presentation {
max-width: 400px;
margin: 0 auto;
text-align: center;
}
/*# sourceMappingURL=style.css.map */
+233
View File
@@ -0,0 +1,233 @@
<header id="intro" style="display: block;">
<article class="fullheight" style="height: 568px;">
<div class="hgroup">
<h1>Landon Hotel</h1>
<h2>London, Ontario</h2>
<!-- Let's display the message-->
<h2>{{ welcomeMSGen$ | async }}</h2>
<h2>{{ welcomeMSGfr$ | async }}</h2>
<p><a href="/#welcome"><img src="assets/images/arrow.png" alt="down arrow"></a></p>
</div>
</article>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<div class="scrollmagic-pin-spacer"
style="display: block; top: auto; left: auto; bottom: auto; right: auto; position: relative; margin: 0 auto auto; box-sizing: content-box; width: 100%; min-height: 44px; height: auto; padding-top: 0; padding-bottom: 0;">
<nav id="nav" style="position: relative; top: 0; left: 0; bottom: auto; right: auto; width: 100%;">
<div class="navbar">
<div class="brand"><a href="/#welcome">Landon <span>Hotel</span></a></div>
</div><!-- navbar -->
</nav>
</div>
</header>
<main id="wrapper">
<div class="scene" id="welcome">
<article class="content">
<div class="live-presentation mt-4 p-3 border rounded bg-light shadow-sm">
<h3 class="fw-bold">Online Live Presentation:</h3>
<p class="lead">{{ livePresentation$ | async }}</p>
</div>
<br>
<div class="row">
<div class=""col-12>
<div class="gallery">
<img src="assets/images/intro_room.jpg" alt="Intro Gallery Room Sample Pictures">
<img src="assets/images/intro_pool.jpg" alt="Intro Gallery Pool Sample Pictures">
<img src="assets/images/intro_dining.jpg" alt="Intro Gallery Dining Sample Pictures">
<img src="assets/images/intro_attractions.jpg" alt="Intro Gallery Attractions Sample Pictures">
<img class="hidesm" src="assets/images/intro_wedding.jpg" alt="Intro Gallery Dining Sample Pictures">
</div>
<h1>Book a Room</h1>
<form class="form-horizontal" [formGroup]="roomsearch"
(ngSubmit)="onSubmit(roomsearch)">
<div class="form-group">
<label for="checkin" class="col-4">Check-In:</label>
<div class="col-12">
<input id="checkin" type="date" class="form-control" formControlName="checkin">
</div>
</div>
<div class="form-group">
<label for="checkout" class="col-4">Check-Out:</label>
<div class="col-12">
<input id="checkout" type="date" class="form-control" formControlName="checkout">
</div>
</div>
<div class="form-group">
<div class="col-offset-2 col-12">
<button type="submit" class="btn btn-primary btn-lg"> Submit</button>
</div>
</div>
</form>
</div>
</div>
<h1>Available Rooms</h1>
<div class="row" *ngIf="rooms">
<div class="col-12">
<div class="table-responsive">
<table class="table">
<tbody>
<tr *ngFor="let room of rooms">
<td>
<img src="assets/images/intro_room.jpg" alt="Intro Gallery Room Sample Pictures">
</td>
<td>
<strong>Room #: {{room.roomNumber}}</strong><br/>
<strong>Price:</strong><br/>
<strong>${{room.price}}(USD)</strong><br/>
<strong>${{room.prixCad}}(CAD)</strong><br/>
<strong>€{{room.prixEuro}}(EUR)</strong>
</td>
<td>
<button type="submit" class="btn btn-primary" (click)="reserveRoom(room.id)">Reserve</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</article>
</div><!-- welcome -->
<div class="scene" id="hotelinfo">
<article class="heading">
<h1>Essential Info</h1>
</article>
<article id="usefulinfo">
<section id="arrivalinfo">
<h2>Arrival Information</h2>
<ul>
<li><strong>Check-in:</strong> 3:00 PM</li>
<li><strong>Check-out:</strong> 11:00 AM</li>
<li><strong>Parking:</strong> Self-parking in the underground garage is CA$15 per day and valet-parking is CA$50
per day.
</li>
<li><strong>Airport Shuttle:</strong> Our complimentary airport shuttles leave every hour on the hour, and
make trips to London International Airport. Shuttles to Toronto Pearson are available twice a day for CA$50.
</li>
<li><strong>Trains:</strong> The nearest train station is at London Station, which is a major interchange for Via Rail trains running from Toronto west to Sarnia and Windsor.</li>
<li><strong>Pet Policy:</strong> Pets of all sizes and types are allowed in designated pet rooms, and the
specified common areas. Service animals are allowed everywhere.
</li>
</ul>
</section>
<section class="checklist" id="services">
<h2>Services and Amenities</h2>
<p>Our services and amenities are designed to make your travel easy, your stay comfortable, and your experience
one-of-a-kind.</p>
<ul>
<li>Indoor pool</li>
<li>24-hour fitness center</li>
<li>Massage therapy</li>
<li>Full service spa</li>
<li>In-room jacuzzi tubs</li>
<li>Rooftop café &amp; smoothie bar</li>
<li>Coffee bar &amp; pastry shop</li>
<li>Traditional continental breakfast</li>
<li>24-hour concierge service</li>
<li>Business center</li>
<li>Complimentary wireless service</li>
<li>Laundry &amp; dry cleaning service</li>
<li>Daily paper</li>
<li>Certified "green" hotel</li>
<li>Pet-friendly rooms &amp; common areas</li>
</ul>
</section>
<section class="checklist" id="accessibility">
<h2>Accessibility</h2>
<p>We're committed to maintaining the same quality of service for every individual. We offer the following
facilities for those with special needs:</p>
<ul>
<li>Grab bars on tub walls</li>
<li>Shower chairs</li>
<li>Hand held shower sprayers</li>
<li>Higher toilets &amp; toilet modifiers</li>
<li>Lower sink faucet handles</li>
<li>Wheelchair clearance under sinks &amp; vanity</li>
<li>Lower racks in closet</li>
<li>TDD machines</li>
<li>Telephone light signalers &amp; smoke alarms</li>
<li>Telephone amplification handsets</li>
<li>Closed captioned television converters</li>
<li>Vibrating alarm clocks</li>
<li>Telephones with volume control</li>
</ul>
</section>
</article>
<article id="greenprogram">
<h2>Landon Green Program</h2>
<p><strong>The Landon Hotel - London</strong> was recently renovated, and we considered the impact on the earth
the entire way. From green building materials, to solar power, to energy-friendly lighting and appliances
throughout the hotel - were saving energy in every socket, outlet, and switch. Weve also initiated a recycling
and composting program that reduces the load to local landfills, while providing valuable raw material for use
in new products, or in the case of compost, for use in local gardens and landscapes.</p>
</article>
</div><!-- hotelinfo -->
<div class="scene" id="dining">
<article id="areadining">
<h1>Dining in the Area</h1>
<p>London, Ontario is a foodies paradise, and the Landon Hotel is in the center of it all. With options for
traditional English, Italian, Indian, American, Chinese, and French cuisines, all within two blocks of the
hotel, and a variety of tasty culinary delights from many other countries, within a half-mile radius, the only
trouble youll have is choosing! </p>
</article>
<article id="inhotel">
<section id="rooftopcafe">
<h2>Rooftop Café</h2>
<img src="assets/images/dining_rooftop.jpg" alt="Dining">
<p>Landon Rooftop Café is the destination for five star dining. Our master chefs are trained to meet special
dietary needs, and we offer a range of vegetarian/vegan, kosher, gluten, and dairy free selections to
accommodate our guests. Whether youre in the mood for our award winning roast beef, fresh select salads,
appetizing lunch entrees, or delectable desserts, we have you covered.</p>
</section>
<section id="smoothiebar">
<h2>Smoothie Bar</h2>
<img src="assets/images/dining_smoothiebar.jpg" alt="Dining">
<p>The Rooftop Smoothie Bar gives you panoramic views of the city, where you can have one of our specialty
smoothies while you wait for your table. Our top mixologists are constantly bringing new and unique offerings
to our smoothie menu. We have a wide range of locally grown, fresh fruit and vegetable choices to make you
custom blended drinks. We also have seasonal selections that you wont find anywhere else.</p>
</section>
<section id="coffeebar">
<h2>Breakfast &amp; Coffee Bar</h2>
<img src="assets/images/dining_lattes.jpg" alt="Dining">
<p>Our traditional breakfast and coffee bar, located adjacent to our lounge, are the perfect way to start your
morning. We offer a wide selection of seasonal fresh fruit, a variety of cereals, croissants, crusty sourdough
bread, cook-to-order eggs and omelettes, fresh juice, coffee, and teas. Breakfast is served from 7:00 am to
10:00 am daily. Our coffee bar is open until 6:30 pm daily.</p>
</section>
</article><!-- inhotel -->
<article id="roomservice">
<h1>Room Service</h1>
<p>If youd rather stay in your room and enjoy a quiet evening in, or a relaxing breakfast in bed, room service
options are available for all of our dining choices.</p>
</article>
</div><!-- dining -->
</main>
<footer class="scene">
<article class="content">
<div id="socialmedia">
<ul class="group">
<li><a href="https://twitter.com/"><img class="icon" src="assets/images/twitter.png"
alt="icon for twitter"></a></li>
<li><a href="http://www.facebook.com/"><img class="icon" src="assets/images/facebook.png"
alt="icon for facebook"></a></li>
<li><a href="http://www.youtube.com/"><img class="icon" src="assets/images/youtube.png" alt="icon for youtube"></a>
</li>
</ul>
</div>
</article>
</footer>
<script src="src/app/images/script.js"></script>
+35
View File
@@ -0,0 +1,35 @@
import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
describe('AppComponent', () => {
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [
AppComponent
],
}).compileComponents();
});
it('should create the app', () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app).toBeTruthy();
});
/* it(`should have as title 'LandonHotelApp'`, () => {
const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance;
expect(app.title).toEqual('LandonHotelApp');
});
it('should render title', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.nativeElement as HTMLElement;
expect(compiled.querySelector('.content span')?.textContent).toContain('LandonHotelApp app is running!');
});*/
});
+171
View File
@@ -0,0 +1,171 @@
import { Component, OnInit } from '@angular/core';
import {FormControl, FormGroup} from '@angular/forms';
import {HttpClient, HttpResponse,HttpHeaders} from "@angular/common/http";
import { Observable } from 'rxjs';
import {map} from "rxjs/operators";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
// Observables connected to backend endpoints for welcome messages
welcomeMSGen$!: Observable<string>
welcomeMSGfr$!: Observable<string>
livePresentation$!: Observable<string>
constructor(private httpClient:HttpClient){}
private baseURL:string='http://localhost:8080';
private getUrl:string = this.baseURL + '/room/reservation/v1/';
private postUrl:string = this.baseURL + '/room/reservation/v1';
public submitted!:boolean;
roomsearch! : FormGroup;
rooms! : Room[];
request!:ReserveRoomRequest;
currentCheckInVal!:string;
currentCheckOutVal!:string;
ngOnInit(){
// Retrieve the English (Canada) welcome message
this.welcomeMSGen$ = this.httpClient.get(
this.baseURL + "/welcome/?lang=en-US",
{ responseType: "text" }
);
// Retrieve the French (Canada) welcome message
this.welcomeMSGfr$ = this.httpClient.get(
this.baseURL + "/welcome/?lang=fr-CA",
{ responseType: "text" }
);
//Live presentation times
this.livePresentation$ = this.httpClient.get(this.baseURL + "/live", {responseType: "text"})
this.roomsearch= new FormGroup({
checkin: new FormControl(' '),
checkout: new FormControl(' ')
});
// this.rooms=ROOMS;
const roomsearchValueChanges$ = this.roomsearch.valueChanges;
// subscribe to the stream
roomsearchValueChanges$.subscribe(x => {
this.currentCheckInVal = x.checkin;
this.currentCheckOutVal = x.checkout;
});
}
onSubmit({value,valid}:{value:Roomsearch,valid:boolean}){
this.getAll().subscribe(
rooms => { this.rooms = <Room[]>Object.values(rooms)[0];
// these numbers may change by the time they are being evaluated
const cadRates = 1.37;
const eurRates = 0.85;
this.rooms.forEach(room => {
room.prixCad = (parseFloat(room.price) * cadRates).toFixed(2);
room.prixEuro = (parseFloat(room.price) * eurRates).toFixed(2);
});
},
error => {
console.error('Error', error);
}
);
}
reserveRoom(value:string){
this.request = new ReserveRoomRequest(value, this.currentCheckInVal, this.currentCheckOutVal);
this.createReservation(this.request);
}
createReservation(body:ReserveRoomRequest) {
let bodyString = JSON.stringify(body); // Stringify payload
let headers = new Headers({'Content-Type': 'application/json'}); // ... Set content type to JSON
// let options = new RequestOptions({headers: headers}); // Create a request option
const options = {
headers: new HttpHeaders().append('key', 'value'),
}
this.httpClient.post(this.postUrl, body, options)
.subscribe(res => console.log(res));
}
/*mapRoom(response:HttpResponse<any>): Room[]{
return response.body;
}*/
getAll(): Observable<any> {
return this.httpClient.get(this.baseURL + '/room/reservation/v1?checkin='+ this.currentCheckInVal + '&checkout='+this.currentCheckOutVal, {responseType: 'json'});
}
}
export interface Roomsearch{
checkin:string;
checkout:string;
}
export interface Room{
id:string;
roomNumber:string;
price:string;
links:string;
prixCad:string;
prixEuro:string;
}
export class ReserveRoomRequest {
roomId:string;
checkin:string;
checkout:string;
constructor(roomId:string,
checkin:string,
checkout:string) {
this.roomId = roomId;
this.checkin = checkin;
this.checkout = checkout;
}
}
/*
var ROOMS: Room[]=[
{
"id": "13932123",
"roomNumber" : "409",
"price" :"20",
"links" : ""
},
{
"id": "139324444",
"roomNumber" : "509",
"price" :"30",
"links" : ""
},
{
"id": "139324888",
"roomNumber" : "609",
"price" :"40",
"links" : ""
}
] */
+26
View File
@@ -0,0 +1,26 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule} from '@angular/common/http';
import {HashLocationStrategy, LocationStrategy} from "@angular/common";
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule,
ReactiveFormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
+74
View File
@@ -0,0 +1,74 @@
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { HttpErrorResponse, HttpResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
export interface Config {
id:string;
roomNumber:string;
price:string;
links:string;
}
@Injectable()
export class ConfigService {
configUrl = 'assets/config.json';
constructor(private http: HttpClient) { }
getConfig() {
return this.http.get<Config>(this.configUrl)
.pipe(
retry(3), // retry a failed request up to 3 times
catchError(this.handleError) // then handle the error
);
}
getConfig_1() {
return this.http.get<Config>(this.configUrl);
}
getConfig_2() {
// now returns an Observable of Config
return this.http.get<Config>(this.configUrl);
}
getConfig_3() {
return this.http.get<Config>(this.configUrl)
.pipe(
catchError(this.handleError)
);
}
getConfigResponse(): Observable<HttpResponse<Config>> {
return this.http.get<Config>(
this.configUrl, { observe: 'response' });
}
private handleError(error: HttpErrorResponse) {
if (error.status === 0) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong.
console.error(
`Backend returned code ${error.status}, body was: `, error.error);
}
// Return an observable with a user-facing error message.
return throwError(() => new Error('Something bad happened; please try again later.'));
}
makeIntentionalError() {
return this.http.get('not/a/real/url')
.pipe(
catchError(this.handleError)
);
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File
+7
View File
@@ -0,0 +1,7 @@
{
"id": "13932123",
"roomNumber" : "409",
"price" :"20",
"links" : ""
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,3 @@
export const environment = {
production: true
};
@@ -0,0 +1,16 @@
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.
export const environment = {
production: false
};
/*
* For easier debugging in development mode, you can import the following file
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
*
* This import should be commented out in production mode because it will have a negative impact
* on performance if an error is thrown.
*/
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

+13
View File
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>LandonHotelApp</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
</body>
</html>
+12
View File
@@ -0,0 +1,12 @@
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err));
+53
View File
@@ -0,0 +1,53 @@
/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.
*
* This file is divided into 2 sections:
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
* file.
*
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
* automatically update themselves. This includes recent versions of Safari, Chrome (including
* Opera), Edge on the desktop, and iOS and Chrome on mobile.
*
* Learn more in https://angular.io/guide/browser-support
*/
/***************************************************************************************************
* BROWSER POLYFILLS
*/
/**
* By default, zone.js will patch all possible macroTask and DomEvents
* user can disable parts of macroTask/DomEvents patch by setting following flags
* because those flags need to be set before `zone.js` being loaded, and webpack
* will put import in the top of bundle, so user need to create a separate file
* in this directory (for example: zone-flags.ts), and put the following flags
* into that file, and then add the following code before importing zone.js.
* import './zone-flags';
*
* The flags allowed in zone-flags.ts are listed here.
*
* The following flags will work for all browsers.
*
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
*
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
* with the following flag, it will bypass `zone.js` patch for IE/Edge
*
* (window as any).__Zone_enable_cross_context_check = true;
*
*/
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
import 'zone.js'; // Included with Angular CLI.
/***************************************************************************************************
* APPLICATION IMPORTS
*/
+1
View File
@@ -0,0 +1 @@
/* You can add global styles to this file, and also import other style files */
+26
View File
@@ -0,0 +1,26 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(path: string, deep?: boolean, filter?: RegExp): {
<T>(id: string): T;
keys(): string[];
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(),
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().forEach(context);
+15
View File
@@ -0,0 +1,15 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": []
},
"files": [
"src/main.ts",
"src/polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}
+32
View File
@@ -0,0 +1,32 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"compileOnSave": false,
"compilerOptions": {
"baseUrl": "./",
"outDir": "./dist/out-tsc",
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
"noPropertyAccessFromIndexSignature": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"sourceMap": true,
"declaration": false,
"downlevelIteration": true,
"experimentalDecorators": true,
"moduleResolution": "node",
"importHelpers": true,
"target": "es2020",
"module": "es2020",
"lib": [
"es2020",
"dom"
]
},
"angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false,
"strictInjectionParameters": true,
"strictInputAccessModifiers": true,
"strictTemplates": true
}
}
+18
View File
@@ -0,0 +1,18 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts",
"src/polyfills.ts"
],
"include": [
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
}
@@ -0,0 +1,27 @@
package edu.wgu.d387_sample_code;
import edu.wgu.d387_sample_code.Messages.WelcomeMessage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.Locale;
@SpringBootApplication
public class D387SampleCodeApplication {
public static void main(String[] args) {
SpringApplication.run(D387SampleCodeApplication.class, args);
//Let's create threads for each welcome MESSAGE!
//English Message
WelcomeMessage englishMessage = new WelcomeMessage(Locale.US);
Thread englishThread = new Thread(englishMessage);
englishThread.start();
//French Message
WelcomeMessage frenchMessage = new WelcomeMessage(Locale.CANADA_FRENCH);
Thread frenchThread = new Thread(frenchMessage);
frenchThread.start();
}
}
@@ -0,0 +1,46 @@
package edu.wgu.d387_sample_code;
import edu.wgu.d387_sample_code.entity.RoomEntity;
import edu.wgu.d387_sample_code.repository.RoomRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
@Component
public class H2Bootstrap implements CommandLineRunner {
@Autowired
RoomRepository roomRepository;
@Override
public void run(String... args) throws Exception {
// TODO Auto-generated method stub
System.out.println("Bootstrapping data: ");
RoomEntity room1= new RoomEntity(405, "200");
room1.setId(1L);
roomRepository.save(room1);
RoomEntity room2= new RoomEntity(406, "220");
room2.setId(2L);
roomRepository.save(room2);
RoomEntity room3= new RoomEntity(407, "260");
room3.setId(3L);
roomRepository.save(room3);
Iterable<RoomEntity> itr = roomRepository.findAll();
System.out.println("Printing out data: ");
for(RoomEntity room : itr) {
System.out.println(room.getRoomNumber());
}
}
}
@@ -0,0 +1,22 @@
package edu.wgu.d387_sample_code.Messages;
import java.util.Locale;
import java.util.ResourceBundle;
public class WelcomeMessage implements Runnable {
private Locale locale;
public WelcomeMessage (Locale locale){
this.locale = locale;
}
public String getWelcomeMessage(){
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);
return bundle.getString("welcomeMessage");
}
@Override
public void run(){
System.out.println(getWelcomeMessage());
}
}
@@ -0,0 +1,22 @@
package edu.wgu.d387_sample_code.Messages;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Locale;
@CrossOrigin(origins = "http://localhost:4200")
@RestController
public class WelcomeMessageController {
@GetMapping("/welcome")
public ResponseEntity<String> displayWelcomeMessage(@RequestParam("lang") String lang){
Locale locale = Locale.forLanguageTag(lang);
WelcomeMessage message = new WelcomeMessage(locale);
return new ResponseEntity<String>(message.getWelcomeMessage(), HttpStatus.OK);
}
}
@@ -0,0 +1,13 @@
package edu.wgu.d387_sample_code;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(D387SampleCodeApplication.class);
}
}
@@ -0,0 +1,31 @@
package edu.wgu.d387_sample_code.Timezones;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class TimeConverter {
public static String getTime(){
//Let's get the current time
ZonedDateTime now = ZonedDateTime.now();
//Now let us covert to NY, UTC and MT
//Easter Time
ZonedDateTime et = now.withZoneSameInstant(ZoneId.of("America/New_York"));
//Mountain Time
ZonedDateTime mt = now.withZoneSameInstant(ZoneId.of("America/Denver"));
// UTC time
ZonedDateTime utc = now.withZoneSameInstant(ZoneId.of("UTC"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm a");
// We are going to display this
String displayTimes = et.format(formatter) + " ET / " + mt.format(formatter) + " MT / " + utc.format(formatter) + " UTC";
return displayTimes;
}
}
@@ -0,0 +1,18 @@
package edu.wgu.d387_sample_code.Timezones;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@CrossOrigin(origins = "http://localhost:4200")
@RestController
public class TimeZoneController {
@GetMapping("/live")
public ResponseEntity<String> livePresentation() {
String times = "Please join us LIVE for an online presentation starting: " + TimeConverter.getTime();
return new ResponseEntity<String>(times, HttpStatus.OK);
}
}
@@ -0,0 +1,37 @@
package edu.wgu.d387_sample_code.config;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class ApiConfig implements WebMvcConfigurer{
//Not needing the object member is a change in recent versions of spring.
// @Bean
// public ObjectMapper objectMapper() {
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// objectMapper.registerModule(new JavaTimeModule());
//
//
// return new ObjectMapper();
// }
//
// @Bean
// public ObjectWriter objectWriter(ObjectMapper objectMapper) {
// return objectMapper.writerWithDefaultPrettyPrinter();
// }
}
@@ -0,0 +1,39 @@
package edu.wgu.d387_sample_code.config;
import edu.wgu.d387_sample_code.convertor.ReservationEntityToReservationResponseConverter;
import edu.wgu.d387_sample_code.convertor.ReservationRequestToReservationEntityConverter;
import edu.wgu.d387_sample_code.convertor.RoomEntityToReservableRoomResponseConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ConversionServiceFactoryBean;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.convert.converter.Converter;
import java.util.HashSet;
import java.util.Set;
@Configuration public class ConversionConfig {
@Autowired
ApplicationContext context;
private Set<Converter> getConverters() {
Set<Converter> converters = new HashSet<Converter>();
converters.add(new RoomEntityToReservableRoomResponseConverter());
converters.add(new ReservationRequestToReservationEntityConverter(context));
converters.add(new ReservationEntityToReservationResponseConverter());
return converters;
}
@Bean public ConversionService conversionService() {
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
bean.setConverters(getConverters());
bean.afterPropertiesSet();
return bean.getObject();
}
}
@@ -0,0 +1,10 @@
package edu.wgu.d387_sample_code.config;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableJpaRepositories("com.linkedin.learning.repository")
@EnableTransactionManagement
public class DatabaseConfig {
}

Some files were not shown because too many files have changed in this diff Show More