You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/07/02 04:49:32 UTC

incubator-ignite git commit: # ignite-843 Initial commite for developing Ignite control center on Play2.

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 <ak...@gridgain.com>
Authored: Thu Jul 2 09:49:11 2015 +0700
Committer: AKuznetsov <ak...@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.")
+    }
+  }
+}