Repository: incubator-ignite Updated Branches: refs/heads/ignite-843-play [created] 15f36d21a
# ignite-843 Initial commite for developing Ignite control center on Play2. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/15f36d21 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/15f36d21 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/15f36d21 Branch: refs/heads/ignite-843-play Commit: 15f36d21a91832b34d79b2012819e734e9606085 Parents: d3783a1 Author: AKuznetsov <akuznet...@gridgain.com> Authored: Thu Jul 2 09:49:11 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Thu Jul 2 09:49:11 2015 +0700 ---------------------------------------------------------------------- modules/control-center/.gitignore | 8 + modules/control-center/LICENSE | 8 + modules/control-center/README | 4 + modules/control-center/activator | 334 +++++++++++++++++++ .../control-center/activator-launch-1.3.5.jar | Bin 0 -> 1213544 bytes modules/control-center/activator.bat | 231 +++++++++++++ .../app/controllers/Application.scala | 12 + .../control-center/app/views/index.scala.html | 7 + .../control-center/app/views/main.scala.html | 15 + modules/control-center/build.sbt | 20 ++ modules/control-center/conf/application.conf | 44 +++ modules/control-center/conf/logback.xml | 22 ++ modules/control-center/conf/routes | 9 + modules/control-center/project/build.properties | 4 + modules/control-center/project/plugins.sbt | 16 + .../control-center/public/images/favicon.png | Bin 0 -> 687 bytes .../control-center/public/javascripts/hello.js | 3 + .../control-center/public/stylesheets/main.css | 0 .../control-center/test/ApplicationSpec.scala | 30 ++ .../control-center/test/IntegrationSpec.scala | 24 ++ 20 files changed, 791 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/.gitignore ---------------------------------------------------------------------- diff --git a/modules/control-center/.gitignore b/modules/control-center/.gitignore new file mode 100644 index 0000000..eb372fc --- /dev/null +++ b/modules/control-center/.gitignore @@ -0,0 +1,8 @@ +logs +target +/.idea +/.idea_modules +/.classpath +/.project +/.settings +/RUNNING_PID http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/LICENSE ---------------------------------------------------------------------- diff --git a/modules/control-center/LICENSE b/modules/control-center/LICENSE new file mode 100644 index 0000000..4baedcb --- /dev/null +++ b/modules/control-center/LICENSE @@ -0,0 +1,8 @@ +This software is licensed under the Apache 2 license, quoted below. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with +the License. You may obtain a copy of the License at http://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. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/README ---------------------------------------------------------------------- diff --git a/modules/control-center/README b/modules/control-center/README new file mode 100644 index 0000000..ad73c38 --- /dev/null +++ b/modules/control-center/README @@ -0,0 +1,4 @@ +This is your new Play application +================================= + +This file will be packaged with your application, when using `activator dist`. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/activator ---------------------------------------------------------------------- diff --git a/modules/control-center/activator b/modules/control-center/activator new file mode 100644 index 0000000..6e28ceb --- /dev/null +++ b/modules/control-center/activator @@ -0,0 +1,334 @@ +#!/usr/bin/env bash + +### ------------------------------- ### +### Helper methods for BASH scripts ### +### ------------------------------- ### + +realpath () { +( + TARGET_FILE="$1" + + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + + COUNT=0 + while [ -L "$TARGET_FILE" -a $COUNT -lt 100 ] + do + TARGET_FILE=$(readlink "$TARGET_FILE") + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + COUNT=$(($COUNT + 1)) + done + + if [ "$TARGET_FILE" == "." -o "$TARGET_FILE" == ".." ]; then + cd "$TARGET_FILE" + TARGET_FILEPATH= + else + TARGET_FILEPATH=/$TARGET_FILE + fi + + # make sure we grab the actual windows path, instead of cygwin's path. + if ! is_cygwin; then + echo "$(pwd -P)/$TARGET_FILE" + else + echo $(cygwinpath "$(pwd -P)/$TARGET_FILE") + fi +) +} + +# TODO - Do we need to detect msys? + +# Uses uname to detect if we're in the odd cygwin environment. +is_cygwin() { + local os=$(uname -s) + case "$os" in + CYGWIN*) return 0 ;; + *) return 1 ;; + esac +} + +# This can fix cygwin style /cygdrive paths so we get the +# windows style paths. +cygwinpath() { + local file="$1" + if is_cygwin; then + echo $(cygpath -w $file) + else + echo $file + fi +} + +# Make something URI friendly +make_url() { + url="$1" + local nospaces=${url// /%20} + if is_cygwin; then + echo "/${nospaces//\\//}" + else + echo "$nospaces" + fi +} + +# Detect if we should use JAVA_HOME or just try PATH. +get_java_cmd() { + if [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then + echo "$JAVA_HOME/bin/java" + else + echo "java" + fi +} + +echoerr () { + echo 1>&2 "$@" +} +vlog () { + [[ $verbose || $debug ]] && echoerr "$@" +} +dlog () { + [[ $debug ]] && echoerr "$@" +} +execRunner () { + # print the arguments one to a line, quoting any containing spaces + [[ $verbose || $debug ]] && echo "# Executing command line:" && { + for arg; do + if printf "%s\n" "$arg" | grep -q ' '; then + printf "\"%s\"\n" "$arg" + else + printf "%s\n" "$arg" + fi + done + echo "" + } + + exec "$@" +} +addJava () { + dlog "[addJava] arg = '$1'" + java_args=( "${java_args[@]}" "$1" ) +} +addApp () { + dlog "[addApp] arg = '$1'" + sbt_commands=( "${app_commands[@]}" "$1" ) +} +addResidual () { + dlog "[residual] arg = '$1'" + residual_args=( "${residual_args[@]}" "$1" ) +} +addDebugger () { + addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1" +} +addConfigOpts () { + dlog "[addConfigOpts] arg = '$*'" + for item in $* + do + addJava "$item" + done +} +# a ham-fisted attempt to move some memory settings in concert +# so they need not be messed around with individually. +get_mem_opts () { + local mem=${1:-1024} + local meta=$(( $mem / 4 )) + (( $meta > 256 )) || meta=256 + (( $meta < 1024 )) || meta=1024 + + # default is to set memory options but this can be overridden by code section below + memopts="-Xms${mem}m -Xmx${mem}m" + if [[ "${java_version}" > "1.8" ]]; then + extmemopts="-XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=${meta}m" + else + extmemopts="-XX:PermSize=64m -XX:MaxPermSize=${meta}m" + fi + + if [[ "${java_opts}" == *-Xmx* ]] || [[ "${java_opts}" == *-Xms* ]] || [[ "${java_opts}" == *-XX:MaxPermSize* ]] || [[ "${java_opts}" == *-XX:ReservedCodeCacheSize* ]] || [[ "${java_opts}" == *-XX:MaxMetaspaceSize* ]]; then + # if we detect any of these settings in ${java_opts} we need to NOT output our settings. + # The reason is the Xms/Xmx, if they don't line up, cause errors. + memopts="" + extmemopts="" + fi + + echo "${memopts} ${extmemopts}" +} +require_arg () { + local type="$1" + local opt="$2" + local arg="$3" + if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then + die "$opt requires <$type> argument" + fi +} +is_function_defined() { + declare -f "$1" > /dev/null +} + +# If we're *not* running in a terminal, and we don't have any arguments, then we need to add the 'ui' parameter +detect_terminal_for_ui() { + [[ ! -t 0 ]] && [[ "${#residual_args}" == "0" ]] && { + addResidual "ui" + } + # SPECIAL TEST FOR MAC + [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]] && [[ "${#residual_args}" == "0" ]] && { + echo "Detected MAC OSX launched script...." + echo "Swapping to UI" + addResidual "ui" + } +} + +# Processes incoming arguments and places them in appropriate global variables. called by the run method. +process_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -h|-help) usage; exit 1 ;; + -v|-verbose) verbose=1 && shift ;; + -d|-debug) debug=1 && shift ;; + -mem) require_arg integer "$1" "$2" && app_mem="$2" && shift 2 ;; + -jvm-debug) + if echo "$2" | grep -E ^[0-9]+$ > /dev/null; then + addDebugger "$2" && shift + else + addDebugger 9999 + fi + shift ;; + -java-home) require_arg path "$1" "$2" && java_cmd="$2/bin/java" && shift 2 ;; + -D*) addJava "$1" && shift ;; + -J*) addJava "${1:2}" && shift ;; + *) addResidual "$1" && shift ;; + esac + done + + is_function_defined process_my_args && { + myargs=("${residual_args[@]}") + residual_args=() + process_my_args "${myargs[@]}" + } +} + +# Actually runs the script. +run() { + # TODO - check for sane environment + + # process the combined args, then reset "$@" to the residuals + process_args "$@" + detect_terminal_for_ui + set -- "${residual_args[@]}" + argumentCount=$# + + #check for jline terminal fixes on cygwin + if is_cygwin; then + stty -icanon min 1 -echo > /dev/null 2>&1 + addJava "-Djline.terminal=jline.UnixTerminal" + addJava "-Dsbt.cygwin=true" + fi + + # run sbt + execRunner "$java_cmd" \ + "-Dactivator.home=$(make_url "$activator_home")" \ + $(get_mem_opts $app_mem) \ + ${java_opts[@]} \ + ${java_args[@]} \ + -jar "$app_launcher" \ + "${app_commands[@]}" \ + "${residual_args[@]}" + + local exit_code=$? + if is_cygwin; then + stty icanon echo > /dev/null 2>&1 + fi + exit $exit_code +} + +# Loads a configuration file full of default command line options for this script. +loadConfigFile() { + cat "$1" | sed '/^\#/d' +} + +### ------------------------------- ### +### Start of customized settings ### +### ------------------------------- ### +usage() { + cat <<EOM +Usage: $script_name <command> [options] + + Command: + ui Start the Activator UI + new [name] [template-id] Create a new project with [name] using template [template-id] + list-templates Print all available template names + -h | -help Print this message + + Options: + -v | -verbose Make this runner chattier + -d | -debug Set sbt log level to debug + -mem <integer> Set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) + -jvm-debug <port> Turn on JVM debugging, open at the given port. + + # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) + -java-home <path> Alternate JAVA_HOME + + # jvm options and output control + -Dkey=val Pass -Dkey=val directly to the java runtime + -J-X Pass option -X directly to the java runtime + (-J is stripped) + + # environment variables (read from context) + JAVA_OPTS Environment variable, if unset uses "" + SBT_OPTS Environment variable, if unset uses "" + ACTIVATOR_OPTS Environment variable, if unset uses "" + +In the case of duplicated or conflicting options, the order above +shows precedence: environment variables lowest, command line options highest. +EOM +} + +### ------------------------------- ### +### Main script ### +### ------------------------------- ### + +declare -a residual_args +declare -a java_args +declare -a app_commands +declare -r real_script_path="$(realpath "$0")" +declare -r activator_home="$(realpath "$(dirname "$real_script_path")")" +declare -r app_version="1.3.5" + +declare -r app_launcher="${activator_home}/activator-launch-${app_version}.jar" +declare -r script_name=activator +java_cmd=$(get_java_cmd) +declare -r java_opts=( "${ACTIVATOR_OPTS[@]}" "${SBT_OPTS[@]}" "${JAVA_OPTS[@]}" "${java_opts[@]}" ) +userhome="$HOME" +if is_cygwin; then + # cygwin sets home to something f-d up, set to real windows homedir + userhome="$USERPROFILE" +fi +declare -r activator_user_home_dir="${userhome}/.activator" +declare -r java_opts_config_home="${activator_user_home_dir}/activatorconfig.txt" +declare -r java_opts_config_version="${activator_user_home_dir}/${app_version}/activatorconfig.txt" + +# Now check to see if it's a good enough version +declare -r java_version=$("$java_cmd" -version 2>&1 | awk -F '"' '/version/ {print $2}') +if [[ "$java_version" == "" ]]; then + echo + echo No java installations was detected. + echo Please go to http://www.java.com/getjava/ and download + echo + exit 1 +elif [[ ! "$java_version" > "1.6" ]]; then + echo + echo The java installation you have is not up to date + echo Activator requires at least version 1.6+, you have + echo version $java_version + echo + echo Please go to http://www.java.com/getjava/ and download + echo a valid Java Runtime and install before running Activator. + echo + exit 1 +fi + +# if configuration files exist, prepend their contents to the java args so it can be processed by this runner +# a "versioned" config trumps one on the top level +if [[ -f "$java_opts_config_version" ]]; then + addConfigOpts $(loadConfigFile "$java_opts_config_version") +elif [[ -f "$java_opts_config_home" ]]; then + addConfigOpts $(loadConfigFile "$java_opts_config_home") +fi + +run "$@" http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/activator-launch-1.3.5.jar ---------------------------------------------------------------------- diff --git a/modules/control-center/activator-launch-1.3.5.jar b/modules/control-center/activator-launch-1.3.5.jar new file mode 100644 index 0000000..3563b27 Binary files /dev/null and b/modules/control-center/activator-launch-1.3.5.jar differ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/activator.bat ---------------------------------------------------------------------- diff --git a/modules/control-center/activator.bat b/modules/control-center/activator.bat new file mode 100644 index 0000000..e884dda --- /dev/null +++ b/modules/control-center/activator.bat @@ -0,0 +1,231 @@ +@REM activator launcher script +@REM +@REM Environment: +@REM In order for Activator to work you must have Java available on the classpath +@REM JAVA_HOME - location of a JDK home dir (optional if java on path) +@REM CFG_OPTS - JVM options (optional) +@REM Configuration: +@REM activatorconfig.txt found in the ACTIVATOR_HOME or ACTIVATOR_HOME/ACTIVATOR_VERSION +@setlocal enabledelayedexpansion + +@echo off + +set "var1=%~1" +if defined var1 ( + if "%var1%"=="help" ( + echo. + echo Usage activator [options] [command] + echo. + echo Commands: + echo ui Start the Activator UI + echo new [name] [template-id] Create a new project with [name] using template [template-id] + echo list-templates Print all available template names + echo help Print this message + echo. + echo Options: + echo -jvm-debug [port] Turn on JVM debugging, open at the given port. Defaults to 9999 if no port given. + echo. + echo Environment variables ^(read from context^): + echo JAVA_OPTS Environment variable, if unset uses "" + echo SBT_OPTS Environment variable, if unset uses "" + echo ACTIVATOR_OPTS Environment variable, if unset uses "" + echo. + echo Please note that in order for Activator to work you must have Java available on the classpath + echo. + goto :end + ) +) + +if "%ACTIVATOR_HOME%"=="" ( + set "ACTIVATOR_HOME=%~dp0" + @REM remove trailing "\" from path + set ACTIVATOR_HOME=!ACTIVATOR_HOME:~0,-1! +) + +set ERROR_CODE=0 +set APP_VERSION=1.3.5 +set ACTIVATOR_LAUNCH_JAR=activator-launch-%APP_VERSION%.jar + +rem Detect if we were double clicked, although theoretically A user could +rem manually run cmd /c +for %%x in (%cmdcmdline%) do if %%~x==/c set DOUBLECLICKED=1 + +rem FIRST we load a config file of extra options (if there is one) +set "CFG_FILE_HOME=%UserProfile%\.activator\activatorconfig.txt" +set "CFG_FILE_VERSION=%UserProfile%\.activator\%APP_VERSION%\activatorconfig.txt" +set CFG_OPTS= +if exist %CFG_FILE_VERSION% ( + FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%CFG_FILE_VERSION%") DO ( + set DO_NOT_REUSE_ME=%%i + rem ZOMG (Part #2) WE use !! here to delay the expansion of + rem CFG_OPTS, otherwise it remains "" for this loop. + set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME! + ) +) +if "%CFG_OPTS%"=="" ( + if exist %CFG_FILE_HOME% ( + FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%CFG_FILE_HOME%") DO ( + set DO_NOT_REUSE_ME=%%i + rem ZOMG (Part #2) WE use !! here to delay the expansion of + rem CFG_OPTS, otherwise it remains "" for this loop. + set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME! + ) + ) +) + +rem We use the value of the JAVACMD environment variable if defined +set _JAVACMD=%JAVACMD% + +if "%_JAVACMD%"=="" ( + if not "%JAVA_HOME%"=="" ( + if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe" + + rem if there is a java home set we make sure it is the first picked up when invoking 'java' + SET "PATH=%JAVA_HOME%\bin;%PATH%" + ) +) + +if "%_JAVACMD%"=="" set _JAVACMD=java + +rem Detect if this java is ok to use. +for /F %%j in ('"%_JAVACMD%" -version 2^>^&1') do ( + if %%~j==java set JAVAINSTALLED=1 + if %%~j==openjdk set JAVAINSTALLED=1 +) + +rem Detect the same thing about javac +if "%_JAVACCMD%"=="" ( + if not "%JAVA_HOME%"=="" ( + if exist "%JAVA_HOME%\bin\javac.exe" set "_JAVACCMD=%JAVA_HOME%\bin\javac.exe" + ) +) +if "%_JAVACCMD%"=="" set _JAVACCMD=javac +for /F %%j in ('"%_JAVACCMD%" -version 2^>^&1') do ( + if %%~j==javac set JAVACINSTALLED=1 +) + +rem BAT has no logical or, so we do it OLD SCHOOL! Oppan Redmond Style +set JAVAOK=true +if not defined JAVAINSTALLED set JAVAOK=false +if not defined JAVACINSTALLED set JAVAOK=false + +if "%JAVAOK%"=="false" ( + echo. + echo A Java JDK is not installed or can't be found. + if not "%JAVA_HOME%"=="" ( + echo JAVA_HOME = "%JAVA_HOME%" + ) + echo. + echo Please go to + echo http://www.oracle.com/technetwork/java/javase/downloads/index.html + echo and download a valid Java JDK and install before running Activator. + echo. + echo If you think this message is in error, please check + echo your environment variables to see if "java.exe" and "javac.exe" are + echo available via JAVA_HOME or PATH. + echo. + if defined DOUBLECLICKED pause + exit /B 1 +) + +rem Check what Java version is being used to determine what memory options to use +for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( + set JAVA_VERSION=%%g +) + +rem Strips away the " characters +set JAVA_VERSION=%JAVA_VERSION:"=% + +rem TODO Check if there are existing mem settings in JAVA_OPTS/CFG_OPTS and use those instead of the below +for /f "delims=. tokens=1-3" %%v in ("%JAVA_VERSION%") do ( + set MAJOR=%%v + set MINOR=%%w + set BUILD=%%x + + set META_SIZE=-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=256M + if "!MINOR!" LSS "8" ( + set META_SIZE=-XX:PermSize=64M -XX:MaxPermSize=256M + ) + + set MEM_OPTS=!META_SIZE! + ) + +rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. +set _JAVA_OPTS=%JAVA_OPTS% +if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% + +set DEBUG_OPTS= + +rem Loop through the arguments, building remaining args in args variable +set args= +:argsloop +if not "%~1"=="" ( + rem Checks if the argument contains "-D" and if true, adds argument 1 with 2 and puts an equal sign between them. + rem This is done since batch considers "=" to be a delimiter so we need to circumvent this behavior with a small hack. + set arg1=%~1 + if "!arg1:~0,2!"=="-D" ( + set "args=%args% "%~1"="%~2"" + shift + shift + goto argsloop + ) + + if "%~1"=="-jvm-debug" ( + if not "%~2"=="" ( + rem This piece of magic somehow checks that an argument is a number + for /F "delims=0123456789" %%i in ("%~2") do ( + set var="%%i" + ) + if defined var ( + rem Not a number, assume no argument given and default to 9999 + set JPDA_PORT=9999 + ) else ( + rem Port was given, shift arguments + set JPDA_PORT=%~2 + shift + ) + ) else ( + set JPDA_PORT=9999 + ) + shift + + set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=!JPDA_PORT! + goto argsloop + ) + rem else + set "args=%args% "%~1"" + shift + goto argsloop +) + +:run + +if "!args!"=="" ( + if defined DOUBLECLICKED ( + set CMDS="ui" + ) else set CMDS=!args! +) else set CMDS=!args! + +rem We add a / in front, so we get file:///C: instead of file://C: +rem Java considers the later a UNC path. +rem We also attempt a solid effort at making it URI friendly. +rem We don't even bother with UNC paths. +set JAVA_FRIENDLY_HOME_1=/!ACTIVATOR_HOME:\=/! +set JAVA_FRIENDLY_HOME=/!JAVA_FRIENDLY_HOME_1: =%%20! + +rem Checks if the command contains spaces to know if it should be wrapped in quotes or not +set NON_SPACED_CMD=%_JAVACMD: =% +if "%_JAVACMD%"=="%NON_SPACED_CMD%" %_JAVACMD% %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\%ACTIVATOR_LAUNCH_JAR%" %CMDS% +if NOT "%_JAVACMD%"=="%NON_SPACED_CMD%" "%_JAVACMD%" %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\%ACTIVATOR_LAUNCH_JAR%" %CMDS% + +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end + +@endlocal + +exit /B %ERROR_CODE% http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/app/controllers/Application.scala ---------------------------------------------------------------------- diff --git a/modules/control-center/app/controllers/Application.scala b/modules/control-center/app/controllers/Application.scala new file mode 100644 index 0000000..e5ab8ab --- /dev/null +++ b/modules/control-center/app/controllers/Application.scala @@ -0,0 +1,12 @@ +package controllers + +import play.api._ +import play.api.mvc._ + +class Application extends Controller { + + def index = Action { + Ok(views.html.index("Your new application is ready.")) + } + +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/app/views/index.scala.html ---------------------------------------------------------------------- diff --git a/modules/control-center/app/views/index.scala.html b/modules/control-center/app/views/index.scala.html new file mode 100644 index 0000000..d6a6b22 --- /dev/null +++ b/modules/control-center/app/views/index.scala.html @@ -0,0 +1,7 @@ +@(message: String) + +@main("Welcome to Play") { + + @play20.welcome(message) + +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/app/views/main.scala.html ---------------------------------------------------------------------- diff --git a/modules/control-center/app/views/main.scala.html b/modules/control-center/app/views/main.scala.html new file mode 100644 index 0000000..aff0eff --- /dev/null +++ b/modules/control-center/app/views/main.scala.html @@ -0,0 +1,15 @@ +@(title: String)(content: Html) + +<!DOCTYPE html> + +<html lang="en"> + <head> + <title>@title</title> + <link rel="stylesheet" media="screen" href="@routes.Assets.versioned("stylesheets/main.css")"> + <link rel="shortcut icon" type="image/png" href="@routes.Assets.versioned("images/favicon.png")"> + <script src="@routes.Assets.versioned("javascripts/hello.js")" type="text/javascript"></script> + </head> + <body> + @content + </body> +</html> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/build.sbt ---------------------------------------------------------------------- diff --git a/modules/control-center/build.sbt b/modules/control-center/build.sbt new file mode 100644 index 0000000..bed8c86 --- /dev/null +++ b/modules/control-center/build.sbt @@ -0,0 +1,20 @@ +name := """control-center""" + +version := "1.0-SNAPSHOT" + +lazy val root = (project in file(".")).enablePlugins(PlayScala) + +scalaVersion := "2.11.6" + +libraryDependencies ++= Seq( + jdbc, + cache, + ws, + specs2 % Test +) + +resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases" + +// Play provides two styles of routers, one expects its actions to be injected, the +// other, legacy style, accesses its actions statically. +routesGenerator := InjectedRoutesGenerator http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/conf/application.conf ---------------------------------------------------------------------- diff --git a/modules/control-center/conf/application.conf b/modules/control-center/conf/application.conf new file mode 100644 index 0000000..f7422fe --- /dev/null +++ b/modules/control-center/conf/application.conf @@ -0,0 +1,44 @@ +# This is the main configuration file for the application. +# ~~~~~ + +# Secret key +# ~~~~~ +# The secret key is used to secure cryptographics functions. +# +# This must be changed for production, but we recommend not changing it in this file. +# +# See http://www.playframework.com/documentation/latest/ApplicationSecret for more details. +play.crypto.secret = "changeme" + +# The application languages +# ~~~~~ +play.i18n.langs = [ "en" ] + +# Router +# ~~~~~ +# Define the Router object to use for this application. +# This router will be looked up first when the application is starting up, +# so make sure this is the entry point. +# Furthermore, it's assumed your route file is named properly. +# So for an application router like `my.application.Router`, +# you may need to define a router file `conf/my.application.routes`. +# Default to Routes in the root package (and conf/routes) +# play.http.router = my.application.Routes + +# Database configuration +# ~~~~~ +# You can declare as many datasources as you want. +# By convention, the default datasource is named `default` +# +# db.default.driver=org.h2.Driver +# db.default.url="jdbc:h2:mem:play" +# db.default.user=sa +# db.default.password="" + +# Evolutions +# ~~~~~ +# You can disable evolutions if needed +# play.evolutions.enabled=false + +# You can disable evolutions for a specific datasource if necessary +# play.evolutions.db.default.enabled=false http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/conf/logback.xml ---------------------------------------------------------------------- diff --git a/modules/control-center/conf/logback.xml b/modules/control-center/conf/logback.xml new file mode 100644 index 0000000..6045363 --- /dev/null +++ b/modules/control-center/conf/logback.xml @@ -0,0 +1,22 @@ +<configuration> + + <conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" /> + + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>%coloredLevel - %logger - %message%n%xException</pattern> + </encoder> + </appender> + + <!-- + The logger name is typically the Java/Scala package name. + This configures the log level to log at for a package and its children packages. + --> + <logger name="play" level="INFO" /> + <logger name="application" level="DEBUG" /> + + <root level="ERROR"> + <appender-ref ref="STDOUT" /> + </root> + +</configuration> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/conf/routes ---------------------------------------------------------------------- diff --git a/modules/control-center/conf/routes b/modules/control-center/conf/routes new file mode 100644 index 0000000..e71a0bd --- /dev/null +++ b/modules/control-center/conf/routes @@ -0,0 +1,9 @@ +# Routes +# This file defines all application routes (Higher priority routes first) +# ~~~~ + +# Home page +GET / controllers.Application.index + +# Map static resources from the /public folder to the /assets URL path +GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset) http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/project/build.properties ---------------------------------------------------------------------- diff --git a/modules/control-center/project/build.properties b/modules/control-center/project/build.properties new file mode 100644 index 0000000..87f7e9a --- /dev/null +++ b/modules/control-center/project/build.properties @@ -0,0 +1,4 @@ +#Activator-generated Properties +#Thu Jul 02 09:41:16 KRAT 2015 +template.uuid=49a31253-85ed-4c4f-9041-f2f030591a8d +sbt.version=0.13.8 http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/project/plugins.sbt ---------------------------------------------------------------------- diff --git a/modules/control-center/project/plugins.sbt b/modules/control-center/project/plugins.sbt new file mode 100644 index 0000000..cbef63b --- /dev/null +++ b/modules/control-center/project/plugins.sbt @@ -0,0 +1,16 @@ +// The Play plugin +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.1") + +// web plugins + +addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") + +addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6") + +addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3") + +addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7") + +addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") + +addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/public/images/favicon.png ---------------------------------------------------------------------- diff --git a/modules/control-center/public/images/favicon.png b/modules/control-center/public/images/favicon.png new file mode 100644 index 0000000..c7d92d2 Binary files /dev/null and b/modules/control-center/public/images/favicon.png differ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/public/javascripts/hello.js ---------------------------------------------------------------------- diff --git a/modules/control-center/public/javascripts/hello.js b/modules/control-center/public/javascripts/hello.js new file mode 100644 index 0000000..209fbee --- /dev/null +++ b/modules/control-center/public/javascripts/hello.js @@ -0,0 +1,3 @@ +if (window.console) { + console.log("Welcome to your Play application's JavaScript!"); +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/public/stylesheets/main.css ---------------------------------------------------------------------- diff --git a/modules/control-center/public/stylesheets/main.css b/modules/control-center/public/stylesheets/main.css new file mode 100644 index 0000000..e69de29 http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/test/ApplicationSpec.scala ---------------------------------------------------------------------- diff --git a/modules/control-center/test/ApplicationSpec.scala b/modules/control-center/test/ApplicationSpec.scala new file mode 100644 index 0000000..036a94e --- /dev/null +++ b/modules/control-center/test/ApplicationSpec.scala @@ -0,0 +1,30 @@ +import org.specs2.mutable._ +import org.specs2.runner._ +import org.junit.runner._ + +import play.api.test._ +import play.api.test.Helpers._ + +/** + * Add your spec here. + * You can mock out a whole application including requests, plugins etc. + * For more information, consult the wiki. + */ +@RunWith(classOf[JUnitRunner]) +class ApplicationSpec extends Specification { + + "Application" should { + + "send 404 on a bad request" in new WithApplication{ + route(FakeRequest(GET, "/boum")) must beSome.which (status(_) == NOT_FOUND) + } + + "render the index page" in new WithApplication{ + val home = route(FakeRequest(GET, "/")).get + + status(home) must equalTo(OK) + contentType(home) must beSome.which(_ == "text/html") + contentAsString(home) must contain ("Your new application is ready.") + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/15f36d21/modules/control-center/test/IntegrationSpec.scala ---------------------------------------------------------------------- diff --git a/modules/control-center/test/IntegrationSpec.scala b/modules/control-center/test/IntegrationSpec.scala new file mode 100644 index 0000000..652edde --- /dev/null +++ b/modules/control-center/test/IntegrationSpec.scala @@ -0,0 +1,24 @@ +import org.specs2.mutable._ +import org.specs2.runner._ +import org.junit.runner._ + +import play.api.test._ +import play.api.test.Helpers._ + +/** + * add your integration spec here. + * An integration test will fire up a whole play application in a real (or headless) browser + */ +@RunWith(classOf[JUnitRunner]) +class IntegrationSpec extends Specification { + + "Application" should { + + "work from within a browser" in new WithBrowser { + + browser.goTo("http://localhost:" + port) + + browser.pageSource must contain("Your new application is ready.") + } + } +}