Initial populations
This commit is contained in:
@@ -9,3 +9,7 @@ buildNumber.properties
|
|||||||
.mvn/timing.properties
|
.mvn/timing.properties
|
||||||
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
|
# https://github.com/takari/maven-wrapper#usage-without-binary-jar
|
||||||
.mvn/wrapper/maven-wrapper.jar
|
.mvn/wrapper/maven-wrapper.jar
|
||||||
|
.settings
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
bin/
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
#******************************************************************************
|
||||||
|
#
|
||||||
|
# Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
#******************************************************************************
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#Check these params value first :
|
||||||
|
P2PSERVER_PATH="/4EUtils/p2pserver"
|
||||||
|
STOP_COMMAND="stopPeer.sh"
|
||||||
|
START_COMMAND="startPeer.sh"
|
||||||
|
ERROR_LOG_PATH=$P2PSERVER_PATH"/logs"
|
||||||
|
P2P_PARENT_FOLDER="/4EUtils/"
|
||||||
|
P2P_PUBLIC_FOLDER="/mnt/public/Infrastructure/Linux_Unix/Current Version/R and Peer Software/Ubuntu_Peer/p2pserver/"
|
||||||
|
GIT_FOLDER_PATH="/git"
|
||||||
|
BACKUP_PARENT_PATH="/temp/scheduler_deployment_backup"
|
||||||
|
GITHUB_REPO_URL="https://4ecapkronos:2016gitcoDE@github.com/FourElementsCapital/Scheduler.git"
|
||||||
|
|
||||||
|
echo "*** SCHEDULER PEER DEPLOYMENT START ***"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]
|
||||||
|
then
|
||||||
|
echo "Error argument. Sample : ./deployPeer.sh 2.1.0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
v_out=$1
|
||||||
|
|
||||||
|
if [ $# -gt 1 ]
|
||||||
|
then
|
||||||
|
key="$2"
|
||||||
|
case $key in
|
||||||
|
-f|--fresh)
|
||||||
|
is_fresh="true"
|
||||||
|
shift # past argument
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error argument. use -f or --fresh"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
SCHEDULER_REPO_PATH=$GIT_FOLDER_PATH"/Scheduler"
|
||||||
|
SCHEDULER_RELEASE_PATH=$SCHEDULER_REPO_PATH"/release/"$v_out
|
||||||
|
BACKUP_PATH=$BACKUP_PARENT_PATH"/"$v_out
|
||||||
|
|
||||||
|
#echo "*. Check Scheduler local repository whether it's exist or not"
|
||||||
|
#if [ -d $SCHEDULER_REPO_PATH ]; then
|
||||||
|
# echo "Scheduler repo IS EXIST. PULLING from Github.."
|
||||||
|
# cd $SCHEDULER_REPO_PATH
|
||||||
|
# git pull $GITHUB_REPO_URL
|
||||||
|
#else
|
||||||
|
# echo "Scheduler repo IS NOT EXIST. CLONING from Github.."
|
||||||
|
# mkdir -p $GIT_FOLDER_PATH
|
||||||
|
# cd $GIT_FOLDER_PATH
|
||||||
|
# git clone $GITHUB_REPO_URL
|
||||||
|
#fi
|
||||||
|
#chmod -R 777 $GIT_FOLDER_PATH
|
||||||
|
|
||||||
|
echo "*. Check Scheduler release path "$SCHEDULER_RELEASE_PATH
|
||||||
|
cd $SCHEDULER_RELEASE_PATH
|
||||||
|
|
||||||
|
if [ "$is_fresh" == "true" ]
|
||||||
|
then
|
||||||
|
echo "*. Copy p2pfolder from public drive "
|
||||||
|
mkdir -p $P2P_PARENT_FOLDER
|
||||||
|
cp -R "$P2P_PUBLIC_FOLDER" $P2P_PARENT_FOLDER
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*. Check Tomcat version and directory"
|
||||||
|
TOMCAT_7="/tomcat7"
|
||||||
|
TOMCAT_6="/tomcat6"
|
||||||
|
VAR_LIB_PATH="/var/lib"
|
||||||
|
VAR_LOG_PATH="/var/log"
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_7
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
TOMCAT_LOG_PATH=$VAR_LOG_PATH$TOMCAT_7
|
||||||
|
if [ ! -d $TOMCAT_PATH ]; then
|
||||||
|
if [ -d $VAR_LIB_PATH$TOMCAT_6 ]; then
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_6
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
TOMCAT_LOG_PATH=$VAR_LOG_PATH$TOMCAT_6
|
||||||
|
else
|
||||||
|
echo "Error : Neither tomcat 6 or 7 is installed !!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "Tomcat path : "$TOMCAT_PATH
|
||||||
|
|
||||||
|
echo "*. Stop Tomcat server"
|
||||||
|
cd $P2PSERVER_PATH
|
||||||
|
sh ./$STOP_COMMAND
|
||||||
|
|
||||||
|
if [ -z $is_fresh ]
|
||||||
|
then
|
||||||
|
echo "*. Create backup folder"
|
||||||
|
if [ -d $BACKUP_PATH ]
|
||||||
|
then
|
||||||
|
echo "ERROR : backup folder '"$BACKUP_PATH"' is already exist ! Please rename or remove it first. Note that it contains the BACKUP COPY of previous deployment."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
mkdir -p $BACKUP_PATH
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $is_fresh ]
|
||||||
|
then
|
||||||
|
echo "*. Backup current scheduler app"
|
||||||
|
cp -R $TOMCAT_WEB_PATH"/bldb" $BACKUP_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $is_fresh ]
|
||||||
|
then
|
||||||
|
echo "*. Backup & clear tomcat log"
|
||||||
|
mkdir $BACKUP_PATH/log_tomcat
|
||||||
|
if [ "$(ls -A $TOMCAT_LOG_PATH)" ]
|
||||||
|
then
|
||||||
|
mv $TOMCAT_LOG_PATH/* $BACKUP_PATH/log_tomcat
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z $is_fresh ]
|
||||||
|
then
|
||||||
|
echo "*. Backup & clear error log"
|
||||||
|
mkdir $BACKUP_PATH/log_error
|
||||||
|
if [ "$(ls -A $ERROR_LOG_PATH)" ]
|
||||||
|
then
|
||||||
|
mv $ERROR_LOG_PATH/* $BACKUP_PATH/log_error
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*. Deploy new scheduler app"
|
||||||
|
if [ -z $is_fresh ]
|
||||||
|
then
|
||||||
|
rm -R $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
fi
|
||||||
|
cd $SCHEDULER_RELEASE_PATH
|
||||||
|
unzip -qq bldb.zip -d $TOMCAT_WEB_PATH
|
||||||
|
|
||||||
|
echo "*. Copy properties file"
|
||||||
|
cp -R $SCHEDULER_RELEASE_PATH"/properties/peer_unix/bldb" $TOMCAT_WEB_PATH
|
||||||
|
|
||||||
|
echo "*. Set access permission"
|
||||||
|
chmod -R 777 $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
|
||||||
|
echo "*. Start Tomcat server"
|
||||||
|
cd $P2PSERVER_PATH
|
||||||
|
sh ./$START_COMMAND
|
||||||
|
|
||||||
|
echo "*** DEPLOYMENT SUCCESS ! ***"
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
#******************************************************************************
|
||||||
|
#
|
||||||
|
# Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
#******************************************************************************
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#Check these params value first :
|
||||||
|
P2PSERVER_PATH="/home/p2pserver"
|
||||||
|
STOP_COMMAND="stop.sh"
|
||||||
|
START_COMMAND="start.sh"
|
||||||
|
ERROR_LOG_PATH=$P2PSERVER_PATH"/logs"
|
||||||
|
SVN_PATH=$P2PSERVER_PATH"/4svntemp"
|
||||||
|
SVN_R_PATH=$P2PSERVER_PATH"/r_function_svntemp"
|
||||||
|
SVN_IEXEC_PATH=$P2PSERVER_PATH"/iexec_svn"
|
||||||
|
QUEUE_FILES=$P2PSERVER_PATH"/queue/queue1"
|
||||||
|
GIT_FOLDER_PATH="/git"
|
||||||
|
BACKUP_PARENT_PATH="/temp/scheduler_deployment_backup"
|
||||||
|
GITHUB_REPO_URL="https://4ecapkronos:2016gitcoDE@github.com/FourElementsCapital/Scheduler.git"
|
||||||
|
|
||||||
|
echo "*** SCHEDULER SERVER DEPLOYMENT START ***"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]
|
||||||
|
then
|
||||||
|
echo "Error argument. Sample : ./deployServer.sh 2.1.0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
v_out=$1
|
||||||
|
|
||||||
|
SCHEDULER_REPO_PATH=$GIT_FOLDER_PATH"/Scheduler"
|
||||||
|
SCHEDULER_RELEASE_PATH=$SCHEDULER_REPO_PATH"/release/"$v_out
|
||||||
|
BACKUP_PATH=$BACKUP_PARENT_PATH"/"$v_out
|
||||||
|
|
||||||
|
#echo "*. Check Scheduler local repository whether it's exist or not"
|
||||||
|
#if [ -d $SCHEDULER_REPO_PATH ]; then
|
||||||
|
# echo "Scheduler repo IS EXIST. PULLING from Github.."
|
||||||
|
# cd $SCHEDULER_REPO_PATH
|
||||||
|
# git pull $GITHUB_REPO_URL
|
||||||
|
#else
|
||||||
|
# echo "Scheduler repo IS NOT EXIST. CLONING from Github.."
|
||||||
|
# mkdir -p $GIT_FOLDER_PATH
|
||||||
|
# cd $GIT_FOLDER_PATH
|
||||||
|
# git clone $GITHUB_REPO_URL
|
||||||
|
#fi
|
||||||
|
#chmod -R 777 $GIT_FOLDER_PATH
|
||||||
|
|
||||||
|
echo "*. Check Scheduler release path "$SCHEDULER_RELEASE_PATH
|
||||||
|
cd $SCHEDULER_RELEASE_PATH
|
||||||
|
|
||||||
|
echo "*. Check Tomcat version and directory"
|
||||||
|
TOMCAT_7="/tomcat7"
|
||||||
|
TOMCAT_6="/tomcat6"
|
||||||
|
VAR_LIB_PATH="/var/lib"
|
||||||
|
VAR_LOG_PATH="/var/log"
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_7
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
TOMCAT_LOG_PATH=$VAR_LOG_PATH$TOMCAT_7
|
||||||
|
if [ ! -d $TOMCAT_PATH ]; then
|
||||||
|
if [ -d $VAR_LIB_PATH$TOMCAT_6 ]; then
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_6
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
TOMCAT_LOG_PATH=$VAR_LOG_PATH$TOMCAT_6
|
||||||
|
else
|
||||||
|
echo "Error : Neither tomcat 6 or 7 is installed !!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "Tomcat path : "$TOMCAT_PATH
|
||||||
|
|
||||||
|
echo "*. Stop Tomcat server"
|
||||||
|
cd $P2PSERVER_PATH
|
||||||
|
sh ./$STOP_COMMAND
|
||||||
|
|
||||||
|
echo "*. Create backup folder"
|
||||||
|
if [ -d $BACKUP_PATH ]
|
||||||
|
then
|
||||||
|
echo "ERROR : backup folder '"$BACKUP_PATH"' is already exist ! Please rename or remove it first. Note that it contains the BACKUP COPY of previous deployment."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
mkdir -p $BACKUP_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*. Backup current scheduler app"
|
||||||
|
cp -R $TOMCAT_WEB_PATH"/bldb" $BACKUP_PATH
|
||||||
|
|
||||||
|
echo "*. Backup SVN files"
|
||||||
|
cp -R $SVN_PATH $BACKUP_PATH/svn
|
||||||
|
cp -R $SVN_R_PATH $BACKUP_PATH/svn_r
|
||||||
|
cp -R $SVN_IEXEC_PATH $BACKUP_PATH/svn_iexec
|
||||||
|
|
||||||
|
echo "*. Backup & clear tomcat log"
|
||||||
|
mkdir $BACKUP_PATH/log_tomcat
|
||||||
|
if [ "$(ls -A $TOMCAT_LOG_PATH)" ]
|
||||||
|
then
|
||||||
|
mv $TOMCAT_LOG_PATH/* $BACKUP_PATH/log_tomcat
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*. Backup & clear error log"
|
||||||
|
mkdir $BACKUP_PATH/log_error
|
||||||
|
if [ "$(ls -A $ERROR_LOG_PATH)" ]
|
||||||
|
then
|
||||||
|
mv $ERROR_LOG_PATH/* $BACKUP_PATH/log_error
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*. Retain superuser.pwd"
|
||||||
|
cp $BACKUP_PATH/log_error/superuser.pwd $ERROR_LOG_PATH
|
||||||
|
chmod 777 $ERROR_LOG_PATH"/superuser.pwd"
|
||||||
|
|
||||||
|
echo "*. Backup & clear queue files"
|
||||||
|
mkdir $BACKUP_PATH/queue
|
||||||
|
if [ "$(ls $QUEUE_FILES.* 2> /dev/null)" ]
|
||||||
|
then
|
||||||
|
mv $QUEUE_FILES.* $BACKUP_PATH/queue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*. Deploy new scheduler app"
|
||||||
|
rm -R $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
cd $SCHEDULER_RELEASE_PATH
|
||||||
|
unzip -qq bldb.zip -d $TOMCAT_WEB_PATH
|
||||||
|
|
||||||
|
echo "*. Copy properties file"
|
||||||
|
cp -R $SCHEDULER_RELEASE_PATH"/properties/server_unix/bldb" $TOMCAT_WEB_PATH
|
||||||
|
|
||||||
|
echo "*. Set access permission"
|
||||||
|
chmod -R 777 $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
|
||||||
|
echo "*** DEPLOYMENT SUCCESS ! ***"
|
||||||
|
echo "*** Please start Scheduler Server manually ! ***"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
#******************************************************************************
|
||||||
|
#
|
||||||
|
# Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
#******************************************************************************
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
echo "*** SCHEDULER REVERT START ***"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]
|
||||||
|
then
|
||||||
|
echo "Error argument. Sample : ./revertPeer.sh 2.1.0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
v_out=$1
|
||||||
|
|
||||||
|
P2PSERVER_PATH="/4EUtils/p2pserver"
|
||||||
|
START_COMMAND="startPeer.sh"
|
||||||
|
STOP_COMMAND="stopPeer.sh"
|
||||||
|
BACKUP_PATH="/temp/scheduler_deployment_backup/"$v_out
|
||||||
|
|
||||||
|
echo "*. Check backup path "$BACKUP_PATH
|
||||||
|
cd $BACKUP_PATH
|
||||||
|
|
||||||
|
echo "*. Check Tomcat version and directory"
|
||||||
|
TOMCAT_7="/tomcat7"
|
||||||
|
TOMCAT_6="/tomcat6"
|
||||||
|
VAR_LIB_PATH="/var/lib"
|
||||||
|
VAR_LOG_PATH="/var/log"
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_7
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
if [ ! -d $TOMCAT_PATH ]; then
|
||||||
|
if [ -d $VAR_LIB_PATH$TOMCAT_6 ]; then
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_6
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
else
|
||||||
|
echo "Error : Neither tomcat 6 or 7 is installed !!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "Tomcat path : "$TOMCAT_PATH
|
||||||
|
|
||||||
|
echo "*. Stop Tomcat server"
|
||||||
|
cd $P2PSERVER_PATH
|
||||||
|
sh ./$STOP_COMMAND
|
||||||
|
|
||||||
|
echo "*. Remove Scheduler app"
|
||||||
|
rm -R $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
|
||||||
|
echo "*. Copy files from backup"
|
||||||
|
cp -R $BACKUP_PATH"/bldb" $TOMCAT_WEB_PATH
|
||||||
|
|
||||||
|
echo "*. Set access permission"
|
||||||
|
chmod -R 777 $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
|
||||||
|
echo "*. Start Tomcat server"
|
||||||
|
cd $P2PSERVER_PATH
|
||||||
|
sh ./$START_COMMAND
|
||||||
|
|
||||||
|
echo "*** REVERT SUCCESS ! ***"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#******************************************************************************
|
||||||
|
#
|
||||||
|
# Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
#******************************************************************************
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
echo "*** SCHEDULER REVERT START ***"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ $# -lt 1 ]
|
||||||
|
then
|
||||||
|
echo "Error argument. Sample : ./revertServer.sh 2.1.0"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
v_out=$1
|
||||||
|
|
||||||
|
P2PSERVER_PATH="/home/p2pserver"
|
||||||
|
START_COMMAND="start.sh"
|
||||||
|
STOP_COMMAND="stop.sh"
|
||||||
|
BACKUP_PATH="/temp/scheduler_deployment_backup/"$v_out
|
||||||
|
|
||||||
|
echo "*. Check backup path "$BACKUP_PATH
|
||||||
|
cd $BACKUP_PATH
|
||||||
|
|
||||||
|
echo "*. Check Tomcat version and directory"
|
||||||
|
TOMCAT_7="/tomcat7"
|
||||||
|
TOMCAT_6="/tomcat6"
|
||||||
|
VAR_LIB_PATH="/var/lib"
|
||||||
|
VAR_LOG_PATH="/var/log"
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_7
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
if [ ! -d $TOMCAT_PATH ]; then
|
||||||
|
if [ -d $VAR_LIB_PATH$TOMCAT_6 ]; then
|
||||||
|
TOMCAT_PATH=$VAR_LIB_PATH$TOMCAT_6
|
||||||
|
TOMCAT_WEB_PATH=$TOMCAT_PATH"/webapps"
|
||||||
|
else
|
||||||
|
echo "Error : Neither tomcat 6 or 7 is installed !!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo "Tomcat path : "$TOMCAT_PATH
|
||||||
|
|
||||||
|
echo "*. Stop Tomcat server"
|
||||||
|
cd $P2PSERVER_PATH
|
||||||
|
sh ./$STOP_COMMAND
|
||||||
|
|
||||||
|
echo "*. Remove Scheduler app"
|
||||||
|
rm -R $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
|
||||||
|
echo "*. Copy files from backup"
|
||||||
|
cp -R $BACKUP_PATH"/bldb" $TOMCAT_WEB_PATH
|
||||||
|
|
||||||
|
echo "*. Set access permission"
|
||||||
|
chmod -R 777 $TOMCAT_WEB_PATH"/bldb"
|
||||||
|
|
||||||
|
|
||||||
|
echo "*** REVERT SUCCESS ! ***"
|
||||||
|
echo "*** Please start Scheduler Server manually ! ***"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,502 @@
|
|||||||
|
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.fe</groupId>
|
||||||
|
<artifactId>bldb</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
<name>A com.fourelementscapital Webapp</name>
|
||||||
|
<url>http://www.fourelementscapital.com</url>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-alarm</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-auth</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-db</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-fileutils</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-r</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-scheduler-exception</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-scheduler-common</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-scheduler-p2p</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-scheduler-engines</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fourelementscapital</groupId>
|
||||||
|
<artifactId>lib-scheduler-queue</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.servlet</groupId>
|
||||||
|
<artifactId>servlet-api</artifactId>
|
||||||
|
<version>2.5</version>
|
||||||
|
</dependency>
|
||||||
|
<!--
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>1.2.17</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
<version>2.8.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.james</groupId>
|
||||||
|
<artifactId>apache-mime4j</artifactId>
|
||||||
|
<version>0.6</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.axis</groupId>
|
||||||
|
<artifactId>axis</artifactId>
|
||||||
|
<version>1.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.axis</groupId>
|
||||||
|
<artifactId>axis-ant</artifactId>
|
||||||
|
<version>1.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.bouncycastle</groupId>
|
||||||
|
<artifactId>bcprov-jdk14</artifactId>
|
||||||
|
<version>1.54</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jolbox</groupId>
|
||||||
|
<artifactId>bonecp</artifactId>
|
||||||
|
<version>0.7.1.RELEASE</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>c3p0</groupId>
|
||||||
|
<artifactId>c3p0</artifactId>
|
||||||
|
<version>0.9.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-beanutils</groupId>
|
||||||
|
<artifactId>commons-beanutils</artifactId>
|
||||||
|
<version>1.8.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-cli</groupId>
|
||||||
|
<artifactId>commons-cli</artifactId>
|
||||||
|
<version>1.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-codec</groupId>
|
||||||
|
<artifactId>commons-codec</artifactId>
|
||||||
|
<version>1.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-collections</groupId>
|
||||||
|
<artifactId>commons-collections</artifactId>
|
||||||
|
<version>3.2.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-compress</artifactId>
|
||||||
|
<version>1.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>3.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-dbcp</groupId>
|
||||||
|
<artifactId>commons-dbcp</artifactId>
|
||||||
|
<version>1.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-dbutils</groupId>
|
||||||
|
<artifactId>commons-dbutils</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-digester</groupId>
|
||||||
|
<artifactId>commons-digester</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-discovery</groupId>
|
||||||
|
<artifactId>commons-discovery</artifactId>
|
||||||
|
<version>0.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-fileupload</groupId>
|
||||||
|
<artifactId>commons-fileupload</artifactId>
|
||||||
|
<version>1.2.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-httpclient</groupId>
|
||||||
|
<artifactId>commons-httpclient</artifactId>
|
||||||
|
<version>3.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-io</groupId>
|
||||||
|
<artifactId>commons-io</artifactId>
|
||||||
|
<version>1.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-logging</groupId>
|
||||||
|
<artifactId>commons-logging</artifactId>
|
||||||
|
<version>1.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-modeler</groupId>
|
||||||
|
<artifactId>commons-modeler</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-pool</groupId>
|
||||||
|
<artifactId>commons-pool</artifactId>
|
||||||
|
<version>1.6</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-validator</groupId>
|
||||||
|
<artifactId>commons-validator</artifactId>
|
||||||
|
<version>1.3.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>concurrent</groupId>
|
||||||
|
<artifactId>concurrent</artifactId>
|
||||||
|
<version>1.3.4</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.googlecode.cqengine</groupId>
|
||||||
|
<artifactId>cqengine</artifactId>
|
||||||
|
<version>1.2.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.directwebremoting</groupId>
|
||||||
|
<artifactId>dwr</artifactId>
|
||||||
|
<version>2.0.8</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.guava</groupId>
|
||||||
|
<artifactId>guava</artifactId>
|
||||||
|
<version>12.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hsqldb</groupId>
|
||||||
|
<artifactId>hsqldb</artifactId>
|
||||||
|
<version>2.2.9</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpclient</artifactId>
|
||||||
|
<version>4.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpcore</artifactId>
|
||||||
|
<version>4.0.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpmime</artifactId>
|
||||||
|
<version>4.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat</groupId>
|
||||||
|
<artifactId>tomcat-catalina</artifactId>
|
||||||
|
<version>7.0.42</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat</groupId>
|
||||||
|
<artifactId>tomcat-coyote</artifactId>
|
||||||
|
<version>7.0.39</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml</groupId>
|
||||||
|
<artifactId>jaxrpc-api</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>jcifs</groupId>
|
||||||
|
<artifactId>jcifs</artifactId>
|
||||||
|
<version>1.3.17</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.jcraft</groupId>
|
||||||
|
<artifactId>jsch</artifactId>
|
||||||
|
<version>0.1.50</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jsoup</groupId>
|
||||||
|
<artifactId>jsoup</artifactId>
|
||||||
|
<version>1.6.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.transaction</groupId>
|
||||||
|
<artifactId>jta</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.jxta</groupId>
|
||||||
|
<artifactId>jxta-jxse</artifactId>
|
||||||
|
<version>2.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.lucene</groupId>
|
||||||
|
<artifactId>lucene-core</artifactId>
|
||||||
|
<version>2.4.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.mail</groupId>
|
||||||
|
<artifactId>mailapi</artifactId>
|
||||||
|
<version>1.4.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
|
<version>5.1.12</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>be.cyberelf.nanoxml</groupId>
|
||||||
|
<artifactId>nanoxml</artifactId>
|
||||||
|
<version>2.2.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-all</artifactId>
|
||||||
|
<version>4.0.9.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mortbay.jetty</groupId>
|
||||||
|
<artifactId>jetty</artifactId>
|
||||||
|
<version>6.1.26</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi</artifactId>
|
||||||
|
<version>3.1-FINAL</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-contrib</artifactId>
|
||||||
|
<version>3.1-FINAL</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-scratchpad</artifactId>
|
||||||
|
<version>3.1-FINAL</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.quartz-scheduler</groupId>
|
||||||
|
<artifactId>quartz</artifactId>
|
||||||
|
<version>2.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mozilla</groupId>
|
||||||
|
<artifactId>rhino</artifactId>
|
||||||
|
<version>1.7.7.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml.soap</groupId>
|
||||||
|
<artifactId>saaj-api</artifactId>
|
||||||
|
<version>1.3.5</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
<version>1.6.1</version>
|
||||||
|
</dependency>
|
||||||
|
<!--
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-log4j12</artifactId>
|
||||||
|
<version>1.6.1</version>
|
||||||
|
</dependency>
|
||||||
|
-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-simple</artifactId>
|
||||||
|
<version>1.6.6</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.sun.mail</groupId>
|
||||||
|
<artifactId>smtp</artifactId>
|
||||||
|
<version>1.4.7</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.tmatesoft.svnkit</groupId>
|
||||||
|
<artifactId>svnkit</artifactId>
|
||||||
|
<version>1.3.0.5847</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.tuckey</groupId>
|
||||||
|
<artifactId>urlrewrite</artifactId>
|
||||||
|
<version>2.5.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>wsdl4j</groupId>
|
||||||
|
<artifactId>wsdl4j</artifactId>
|
||||||
|
<version>1.5.1</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>javax.xml</groupId>
|
||||||
|
<artifactId>jaxp-api</artifactId>
|
||||||
|
<version>1.4.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.lowagie</groupId>
|
||||||
|
<artifactId>itext</artifactId>
|
||||||
|
<version>2.1.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>jfree</groupId>
|
||||||
|
<artifactId>jfreechart-swt</artifactId>
|
||||||
|
<version>1.0.17</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jfree</groupId>
|
||||||
|
<artifactId>jfreechart</artifactId>
|
||||||
|
<version>1.0.19</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jfree</groupId>
|
||||||
|
<artifactId>jcommon</artifactId>
|
||||||
|
<version>1.0.23</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.swt</groupId>
|
||||||
|
<artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
|
||||||
|
<version>4.3</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.birt.runtime.3_7_1</groupId>
|
||||||
|
<artifactId>org.mozilla.javascript</artifactId>
|
||||||
|
<version>1.7.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.java-websocket</groupId>
|
||||||
|
<artifactId>Java-WebSocket</artifactId>
|
||||||
|
<version>1.3.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.bull.javamelody</groupId>
|
||||||
|
<artifactId>javamelody-core</artifactId>
|
||||||
|
<version>1.60.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.bloomberglp.blpapi</groupId>
|
||||||
|
<artifactId>blpapi</artifactId>
|
||||||
|
<version>3.2.2.0</version>
|
||||||
|
<systemPath>${pom.basedir}/lib/blpapi3.jar</systemPath>
|
||||||
|
<scope>system</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.javamex.classmexer</groupId>
|
||||||
|
<artifactId>classmexer</artifactId>
|
||||||
|
<version>1.6.0</version>
|
||||||
|
<systemPath>${pom.basedir}/lib/classmexer.jar</systemPath>
|
||||||
|
<scope>system</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.cobra</groupId>
|
||||||
|
<artifactId>cobra</artifactId>
|
||||||
|
<version>1.5.0</version>
|
||||||
|
<systemPath>${pom.basedir}/lib/cobra.jar</systemPath>
|
||||||
|
<scope>system</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mozilla.javascript.tools.shell</groupId>
|
||||||
|
<artifactId>js-14</artifactId>
|
||||||
|
<version>1.2.3</version>
|
||||||
|
<systemPath>${pom.basedir}/lib/js-14.jar</systemPath>
|
||||||
|
<scope>system</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.jcs</groupId>
|
||||||
|
<artifactId>jcs</artifactId>
|
||||||
|
<version>1.3.3.1</version>
|
||||||
|
<systemPath>${pom.basedir}/lib/jcs-1.3.3.1-RC.jar</systemPath>
|
||||||
|
<scope>system</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.json</groupId>
|
||||||
|
<artifactId>json</artifactId>
|
||||||
|
<version>20090211</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<jdkLevel>1.8</jdkLevel>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<finalName>bldb</finalName>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.5.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
<configuration>
|
||||||
|
<includeEmptyDirs>true</includeEmptyDirs>
|
||||||
|
<webResources>
|
||||||
|
<resource>
|
||||||
|
<directory>lib</directory>
|
||||||
|
<targetPath>WEB-INF/lib</targetPath>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.jar</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</webResources>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,399 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fe.common.Constant;
|
||||||
|
import com.fe.scheduler.TemplateParser;
|
||||||
|
import com.fourelementscapital.alarm.Alarm;
|
||||||
|
import com.fourelementscapital.alarm.AlarmType;
|
||||||
|
import com.fourelementscapital.alarm.ThemeVO;
|
||||||
|
import com.fourelementscapital.auth.UserThemeAccessPermission;
|
||||||
|
import com.fourelementscapital.db.AbstractTeamOrgDB;
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is abstract and provide basic implementation for all Team Organization related moudles
|
||||||
|
* for example: Themes tag support on scheduler, R function *
|
||||||
|
* @author Administrator
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class AbstractTeamOrgMgmt extends Authenticated{
|
||||||
|
|
||||||
|
protected static String ACCESS_PRIVILEGE_RWX="RWX";
|
||||||
|
protected static String ACCESS_PRIVILEGE_RX="RX";
|
||||||
|
protected static String ACCESS_PRIVILEGE_R="R";
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(AbstractTeamOrgMgmt.class.getName());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this constructor to be used only for DWR, manual invoking to get the object using of this constructor will mis-behave
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public AbstractTeamOrgMgmt() throws Exception {
|
||||||
|
super();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* this constructor will be used only when JSP or Httprequest request is available.
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public AbstractTeamOrgMgmt(HttpServletRequest request) throws Exception {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* to be used in child class
|
||||||
|
* @param sdb
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected Map getThemeAccessData(AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
|
||||||
|
UserThemeAccessPermission auth=getAuthenticatedUserObj(sdb);
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
if(auth!=null){
|
||||||
|
rtn.put("rwx_tags",auth.getRwx());
|
||||||
|
rtn.put("rx_tags",auth.getRx());
|
||||||
|
rtn.put("r_tags",auth.getR());
|
||||||
|
}
|
||||||
|
|
||||||
|
String superuser=(String)getRequest().getSession().getAttribute(Constant.SESSION_LOGGED_SUPERUSER);
|
||||||
|
if(superuser!=null && !superuser.equals("")){
|
||||||
|
rtn.put("superuser",superuser);
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param scheduler_id
|
||||||
|
* @param sdb
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected String getAccessPrivilege(int scheduler_id, AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
String rtn="";
|
||||||
|
UserThemeAccessPermission user=getAuthenticatedUserObj(sdb);
|
||||||
|
if(user!=null){
|
||||||
|
List<String> themes=sdb.getThemeTags(scheduler_id);
|
||||||
|
|
||||||
|
log.debug("themes:"+themes);
|
||||||
|
log.debug("user.getRwx():"+user.getRwx());
|
||||||
|
log.debug("user.getRx():"+user.getRx());
|
||||||
|
log.debug("user.getR():"+user.getR());
|
||||||
|
|
||||||
|
|
||||||
|
for(String ttag:themes){
|
||||||
|
if(user.getRwx().contains(ttag)) rtn=ACCESS_PRIVILEGE_RWX;
|
||||||
|
if(user.getRx().contains(ttag) && (!rtn.equals(ACCESS_PRIVILEGE_RWX) )) rtn=ACCESS_PRIVILEGE_RX;
|
||||||
|
if(user.getR().contains(ttag) && rtn.equals("")) rtn=ACCESS_PRIVILEGE_R;
|
||||||
|
}
|
||||||
|
if(themes.size()==0) rtn=ACCESS_PRIVILEGE_RWX;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
log.debug("user:"+user);
|
||||||
|
log.debug("getAccessPrivilege:rtn:"+rtn);
|
||||||
|
String superuser=(String)getRequest().getSession().getAttribute(Constant.SESSION_LOGGED_SUPERUSER);
|
||||||
|
if(superuser!=null && !superuser.equals("")){
|
||||||
|
rtn=ACCESS_PRIVILEGE_RWX;
|
||||||
|
}
|
||||||
|
if(rtn.equals("")) rtn=null;
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @param notity_tags
|
||||||
|
* @param sdb
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected ArrayList getNotifications(List notity_tags, AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
|
||||||
|
Map<String,String> priv_data=getThemeHirarchy(notity_tags,sdb);
|
||||||
|
ArrayList user_notification=new ArrayList();
|
||||||
|
|
||||||
|
for(Iterator<String> i=priv_data.keySet().iterator();i.hasNext();){
|
||||||
|
String ky=i.next();
|
||||||
|
if(priv_data.get(ky)!=null && priv_data.get(ky).equalsIgnoreCase("rwx")){
|
||||||
|
user_notification.add(ky);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return user_notification;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param sdb
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected boolean isAuthorizedUser(SchedulerDB sdb) throws Exception {
|
||||||
|
|
||||||
|
String user=getAuthenticatedUser();
|
||||||
|
if(user!=null){
|
||||||
|
Map u=sdb.getSVNUser4WikiUser(user);
|
||||||
|
if(u!=null && u.get("svn_username")!=null && u.get("svn_password")!=null
|
||||||
|
&& !((String)u.get("svn_username")).equals("") && !((String)u.get("svn_password")).equals("")
|
||||||
|
){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param sdb
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected String getAuthorizedUser(SchedulerDB sdb) throws Exception {
|
||||||
|
|
||||||
|
String user=getAuthenticatedUser();
|
||||||
|
log.debug("getAuthorizedUser() user:"+user);
|
||||||
|
if(user!=null){
|
||||||
|
Map u=sdb.getSVNUser4WikiUser(user);
|
||||||
|
if(u!=null && u.get("svn_username")!=null && u.get("svn_password")!=null
|
||||||
|
&& !((String)u.get("svn_username")).equals("") && !((String)u.get("svn_password")).equals("")
|
||||||
|
){
|
||||||
|
return (String)u.get("svn_username");
|
||||||
|
}else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param scheduler_id
|
||||||
|
* @param sdb
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
|
||||||
|
protected Map getItemTags2(int scheduler_id,AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
|
||||||
|
//SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
|
||||||
|
//try{
|
||||||
|
HashMap h=new HashMap();
|
||||||
|
Vector tagids=sdb.getTagIds4Item(scheduler_id);
|
||||||
|
Vector tags=sdb.getTags();
|
||||||
|
Vector follow_tagids=sdb.getFollowTagIds4Item(scheduler_id);
|
||||||
|
|
||||||
|
ArrayList<String> themes=sdb.getThemeNames4Item(scheduler_id);
|
||||||
|
//Vector followers=sdb.getFollowers(scheduler_id);
|
||||||
|
|
||||||
|
|
||||||
|
Map priv_data=getThemeHirarchy(themes,sdb);
|
||||||
|
if(priv_data.get("theme")!=null){
|
||||||
|
priv_data.remove("theme");
|
||||||
|
}
|
||||||
|
|
||||||
|
List ftags=sdb.getFollowTags4Item(scheduler_id);
|
||||||
|
List user_notifications=ftags.size()>0?getNotifications(ftags,sdb):new ArrayList();
|
||||||
|
ArrayList all=new ArrayList(ftags);
|
||||||
|
all.addAll(themes);
|
||||||
|
|
||||||
|
h.put("tagids", tagids);
|
||||||
|
h.put("user_privileges",priv_data);
|
||||||
|
h.put("user_notifications",user_notifications);
|
||||||
|
h.put("follow_tagids",follow_tagids);
|
||||||
|
h.put("notice_escalated", getThemeHirarchy(all,sdb));
|
||||||
|
h.put("tags", tags);
|
||||||
|
h.putAll(priv_data);
|
||||||
|
//h.put("followers", followers);
|
||||||
|
|
||||||
|
return h;
|
||||||
|
//}catch(Exception e){
|
||||||
|
// ClientErrorMgmt.reportError(e, null);
|
||||||
|
// throw e;
|
||||||
|
//}finally{
|
||||||
|
// sdb.closeDB();
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param item_id
|
||||||
|
* @param newtask_tags
|
||||||
|
* @param follow_tags
|
||||||
|
* @param atodb
|
||||||
|
* @param sdb
|
||||||
|
* @param name
|
||||||
|
* @param comment
|
||||||
|
* @param rev
|
||||||
|
* @param diff
|
||||||
|
* @param tempdata
|
||||||
|
* @param templ_file
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected void updateAllItemTags(int item_id, List newtask_tags,List follow_tags,AbstractTeamOrgDB atodb,SchedulerDB sdb,String name, String comment,long rev,String diff, Map tempdata, String templ_file) throws Exception {
|
||||||
|
|
||||||
|
ArrayList<Integer> ids=new ArrayList();
|
||||||
|
for(Iterator i=newtask_tags.iterator();i.hasNext();){
|
||||||
|
String tid=(String)i.next();
|
||||||
|
ids.add(Integer.parseInt(tid));
|
||||||
|
}
|
||||||
|
atodb.updateItemTagIds(item_id, ids);
|
||||||
|
String owner_tag=null;
|
||||||
|
if(ids.size()>0){
|
||||||
|
owner_tag=atodb.getThemeTagName(ids.get(0));
|
||||||
|
}
|
||||||
|
ArrayList<Integer> fids=new ArrayList();
|
||||||
|
for(Iterator i=follow_tags.iterator();i.hasNext();){
|
||||||
|
String tid=(String)i.next();
|
||||||
|
fids.add(Integer.parseInt(tid));
|
||||||
|
}
|
||||||
|
atodb.updateFollwerTagIds(item_id, fids);
|
||||||
|
notifyLastModification(atodb,sdb,name,item_id,comment,rev,diff,tempdata,owner_tag,templ_file);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void notifyLastModification(AbstractTeamOrgDB atdb,SchedulerDB sdb,String task_name,int item_id, String comments,long revision, String diff,Map hdata,String owner_tag, String templ_filename) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
SVNSync sync=new SVNSync();
|
||||||
|
String diff=null;
|
||||||
|
if(revision>=0){
|
||||||
|
diff=sync.getLastChanged(item_id);
|
||||||
|
}else {
|
||||||
|
diff="@@@No modification on script@@ there may be change on other than script for example trigger times, name and etc.. ";
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
//String currentuser=new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb);
|
||||||
|
String currentuser=getAuthorizedUser(sdb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ArrayList<String> themes=atdb.getFollowTags4Item(item_id);
|
||||||
|
|
||||||
|
if(owner_tag!=null){
|
||||||
|
if(themes.contains(owner_tag)) themes.remove(owner_tag);
|
||||||
|
themes.add(0, owner_tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> m_themes=atdb.getThemeNames4Item(item_id);
|
||||||
|
for(String t:m_themes){
|
||||||
|
if(!themes.contains(t)) themes.add(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~AbstractTeamOrgMgmt.notifyLastModification():themes"+themes);
|
||||||
|
|
||||||
|
String exc_user=currentuser+"@4ecap.com";
|
||||||
|
|
||||||
|
String content="";
|
||||||
|
//InputStream in=SendMail.class.getResourceAsStream("scheduler_modified_alert.txt");
|
||||||
|
InputStream in=AbstractTeamOrgMgmt.class.getResourceAsStream(templ_filename);
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(in));
|
||||||
|
String strLine;
|
||||||
|
while ((strLine = br.readLine()) != null) {
|
||||||
|
content+=(content.equals("")) ?strLine:"\n"+strLine;
|
||||||
|
}
|
||||||
|
br.close();
|
||||||
|
in.close();
|
||||||
|
//System.out.println("content:"+content);
|
||||||
|
|
||||||
|
TemplateParser pt=new TemplateParser(content,hdata);
|
||||||
|
String message=pt.parseTemplate();
|
||||||
|
String subject=pt.getSubject();
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
// convert String array list to ThemeVO array list required by Alarm.sendAlarm() :
|
||||||
|
ArrayList<ThemeVO> themeList = new ArrayList<ThemeVO>();
|
||||||
|
for (int i=0; i<themes.size(); i++) {
|
||||||
|
themeList.add(new ThemeVO(themes.get(i)));
|
||||||
|
}
|
||||||
|
|
||||||
|
Alarm.sendAlarm( themeList, AlarmType.EMAIL, subject, message, false, true, false, null,exc_user);
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Couldn't send scheduler update notification to themes "+themes+" the followings are error:");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected Map getItemPrivilegeNotifications(ArrayList themes,ArrayList ftags,AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
Map priv_data=getThemeHirarchy(themes,sdb);
|
||||||
|
HashMap h=new HashMap();
|
||||||
|
|
||||||
|
//List user_notifications=getNotifications(ftags,sdb);
|
||||||
|
ArrayList all=new ArrayList(ftags);
|
||||||
|
all.addAll(themes);
|
||||||
|
List user_notifications=getNotifications(all,sdb);
|
||||||
|
h.put("user_notifications",user_notifications);
|
||||||
|
h.put("user_privileges",priv_data);
|
||||||
|
h.put("notice_escalated",getThemeHirarchy(all,sdb));
|
||||||
|
|
||||||
|
return h;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,545 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.directwebremoting.WebContextFactory;
|
||||||
|
|
||||||
|
import com.fe.util.PasswordService;
|
||||||
|
import com.fourelementscapital.db.ConstructQueryDB;
|
||||||
|
import com.fourelementscapital.db.ContractDB;
|
||||||
|
import com.fourelementscapital.db.SuperDB;
|
||||||
|
import com.fourelementscapital.db.UtilDB;
|
||||||
|
import com.fourelementscapital.db.vo.Contract;
|
||||||
|
import com.fourelementscapital.db.vo.Strategy;
|
||||||
|
import com.fourelementscapital.scheduler.error.ClientError;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class methods can be accessed without authentication,
|
||||||
|
* this mgmt class provides method calls for authentication and certain
|
||||||
|
* calls outside authentication.
|
||||||
|
*/
|
||||||
|
public class AdminMgmt {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* key for storing certain objections in the session
|
||||||
|
*/
|
||||||
|
protected static String LOGGED_IN_ATTRIBUTE="adminLoggedOn";
|
||||||
|
protected static String LOGGED_IN_USERNAME="adminLoggedUsername";
|
||||||
|
public static String DB_USER_PROPERTY_FILE="dbadmin.properties";
|
||||||
|
|
||||||
|
private HttpServletRequest request=null;
|
||||||
|
private Logger log = LogManager.getLogger(AdminMgmt.class.getName());
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* to be used outside DWR
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public AdminMgmt(HttpServletRequest request) throws Exception{
|
||||||
|
this.request=request;
|
||||||
|
String usrat=(String)getRequest().getSession().getAttribute(AdminMgmt.LOGGED_IN_ATTRIBUTE);
|
||||||
|
if(usrat!=null && usrat.equalsIgnoreCase("true")){
|
||||||
|
|
||||||
|
}else{
|
||||||
|
//throw new Exception("You're not authorized to use this functionalities");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To be used only within DWR as it requires HttpRequest object.
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public AdminMgmt() throws Exception{
|
||||||
|
String usrat=(String)getRequest().getSession().getAttribute(AdminMgmt.LOGGED_IN_ATTRIBUTE);
|
||||||
|
if(usrat!=null && usrat.equalsIgnoreCase("true")){
|
||||||
|
|
||||||
|
}else{
|
||||||
|
//do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changing password of the authenticated user
|
||||||
|
* @param oldpassword
|
||||||
|
* @param newpassword
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean changePassword(String oldpassword,String newpassword) throws Exception {
|
||||||
|
|
||||||
|
Properties prop = new Properties();
|
||||||
|
try {
|
||||||
|
|
||||||
|
prop.load(new FileInputStream(AdminMgmt.DB_USER_PROPERTY_FILE));
|
||||||
|
|
||||||
|
String encpwd=PasswordService.encrypt(oldpassword);
|
||||||
|
String encpwdnew=PasswordService.encrypt(newpassword);
|
||||||
|
boolean success=false;
|
||||||
|
|
||||||
|
if(prop.getProperty(getLoggedInUser())!=null){
|
||||||
|
if(prop.getProperty(getLoggedInUser().toLowerCase()).equals(encpwd)){
|
||||||
|
success=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!success){
|
||||||
|
throw new Exception("Invalid current password");
|
||||||
|
}else{
|
||||||
|
prop.setProperty(getLoggedInUser(), encpwdnew);
|
||||||
|
prop.store(new FileOutputStream(AdminMgmt.DB_USER_PROPERTY_FILE), null);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete contract in the database
|
||||||
|
* @param db
|
||||||
|
* @param fieldtable
|
||||||
|
* @param contract
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map deleteContract(String db, String fieldtable, String contract) throws Exception {
|
||||||
|
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);;
|
||||||
|
udb.connectDB(db);
|
||||||
|
udb.deleteContracts( udb.connection(), fieldtable,contract);
|
||||||
|
Vector contracts=udb.getUniqueContracts(udb.connection(), fieldtable);
|
||||||
|
udb.closeDB();
|
||||||
|
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
rtn.put("contracts", contracts);
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",fieldtable:"+fieldtable);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the field details for given database.
|
||||||
|
* @param db
|
||||||
|
* @param fieldtable
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map getFieldDetails(String db, String fieldtable) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
Vector contracts=udb.getUniqueContracts(udb.connection(), fieldtable);
|
||||||
|
udb.closeDB();
|
||||||
|
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
rtn.put("contracts", contracts);
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",fieldtable:"+fieldtable);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param fieldtable
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean removeFieldTable(String db, String fieldtable) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
|
||||||
|
boolean result=udb.removeFieldTable(udb.connection(), fieldtable);
|
||||||
|
//boolean result=true;
|
||||||
|
udb.closeDB();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",fieldtable:"+fieldtable);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param fieldtable
|
||||||
|
* @param originalname
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean renameFieldTable(String db, String fieldtable, String originalname) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
boolean result=udb.renameFieldTable(udb.connection(), fieldtable,originalname);
|
||||||
|
udb.closeDB();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",fieldtable:"+fieldtable);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param commodity
|
||||||
|
* @param contract
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public List getRecords4Contracts(String db, String commodity, String contract) throws Exception {
|
||||||
|
|
||||||
|
log.debug("getRecords4Contracts() called");
|
||||||
|
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
List result=udb.getRecordCount4Contracts(udb.connection(), commodity, contract);
|
||||||
|
udb.closeDB();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",commodity:"+commodity);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dobj
|
||||||
|
* @param db
|
||||||
|
* @param tablename
|
||||||
|
* @param commodity
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Vector getCommodityRawData(Map dobj,String db, String tablename, String commodity) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
|
||||||
|
String datequery = ConstructQueryDB.getConstructQueryDB().constructDateInputQuery(dobj);
|
||||||
|
|
||||||
|
Vector result=udb.getRawData(datequery,udb.connection(), tablename, commodity);
|
||||||
|
udb.closeDB();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",commodity:"+commodity);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dobj
|
||||||
|
* @param db
|
||||||
|
* @param fieldname
|
||||||
|
* @param commodity
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map getCommodityRawData2(Map dobj,String db, String fieldname, String commodity) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
|
||||||
|
String datequery = ConstructQueryDB.getConstructQueryDB().constructDateInputQuery(dobj);
|
||||||
|
|
||||||
|
//Vector result=udb.getRawData2(datequery,udb.connection(), fieldname, commodity);
|
||||||
|
Map result=udb.getRawData3(datequery,udb.connection(), fieldname, commodity);
|
||||||
|
udb.closeDB();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",commodity:"+commodity);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param dobj
|
||||||
|
* @param db
|
||||||
|
* @param fieldname
|
||||||
|
* @param contract
|
||||||
|
* @param commodity
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map getCommodityRawData2Contrat(Map dobj,String db, String fieldname, String contract,String commodity) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
|
||||||
|
String datequery = ConstructQueryDB.getConstructQueryDB().constructDateInputQuery(dobj);
|
||||||
|
|
||||||
|
//Vector result=udb.getRawData2(datequery,udb.connection(), fieldname, commodity);
|
||||||
|
Map result=udb.getRawData2Contract(datequery,udb.connection(), fieldname, contract, commodity);
|
||||||
|
|
||||||
|
udb.closeDB();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",commodity:"+commodity);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param tablename
|
||||||
|
* @param date
|
||||||
|
* @param val
|
||||||
|
* @param sval
|
||||||
|
* @param cont
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean addRawData(String db,String tablename,String date,String val, String sval, String cont ) throws Exception {
|
||||||
|
try{
|
||||||
|
|
||||||
|
Date d=new SimpleDateFormat("dd/MM/yyyy").parse(date);
|
||||||
|
Strategy contract=new Strategy();
|
||||||
|
|
||||||
|
contract.setCdate(d);
|
||||||
|
contract.setName(cont);
|
||||||
|
|
||||||
|
ContractDB cdb=new SuperDB().getContractDB(tablename,db);
|
||||||
|
cdb.connectDB(db);
|
||||||
|
|
||||||
|
if(cdb.checkSValueFieldTypeExist(cdb.connection()) && sval!=null && !sval.equals("") ){
|
||||||
|
contract.setSvalue(sval);
|
||||||
|
Vector<Strategy> records=new Vector();
|
||||||
|
records.add(contract);
|
||||||
|
cdb.addSValRecords(cdb.connection(), records);
|
||||||
|
}else{
|
||||||
|
contract.setValue(Double.parseDouble(val));
|
||||||
|
Vector<Contract> records=new Vector();
|
||||||
|
records.add(contract);
|
||||||
|
cdb.addRecords(cdb.connection(), records);
|
||||||
|
}
|
||||||
|
|
||||||
|
cdb.closeDB();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param tablename
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public int checkTableDataType(String db,String tablename) throws Exception {
|
||||||
|
ContractDB cdb=new SuperDB().getContractDB(tablename,db);
|
||||||
|
try{
|
||||||
|
cdb.connectDB(db);
|
||||||
|
boolean issval=cdb.checkSValueFieldTypeExist(cdb.connection());
|
||||||
|
int rtn=0;
|
||||||
|
if(issval){
|
||||||
|
if(cdb.checkSValueField(cdb.connection())>0){
|
||||||
|
rtn=3; //database set to accepts numeric;
|
||||||
|
}else{
|
||||||
|
rtn=2; //database set to accepts sval
|
||||||
|
}
|
||||||
|
//override settings to acept both if the database is empty and sval field exist in the table.
|
||||||
|
if(cdb.countRecords(cdb.connection())<1){
|
||||||
|
rtn=0;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
rtn=1; //database accepts only numeric
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
cdb.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param tablename
|
||||||
|
* @param data
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean deleteRawData(String db,String tablename, Map data) throws Exception {
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
try{
|
||||||
|
log.debug("deleteRawData called, db:"+db+" tablename:"+tablename+ " data:"+data);
|
||||||
|
|
||||||
|
udb.connectDB(db);
|
||||||
|
if(data.get("contract")!=null && data.get("cdate1")!=null){
|
||||||
|
udb.deleteRawData(udb.connection(), tablename, data);
|
||||||
|
log.debug("delete method in utildb exec uted");
|
||||||
|
}
|
||||||
|
//udb.closeDB();
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
udb.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param tablename
|
||||||
|
* @param olddata
|
||||||
|
* @param newdata
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean setUpdateRawData(String db,String tablename, Map olddata, Map newdata) throws Exception {
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
try{
|
||||||
|
log.debug("setUpdateRawData called, db:"+db+" tablename:"+tablename+ " old:"+olddata+" new:"+newdata);
|
||||||
|
|
||||||
|
udb.connectDB(db);
|
||||||
|
if(olddata.get("contract")!=null && olddata.get("cdate1")!=null){
|
||||||
|
udb.updateRawData(udb.connection(), tablename, olddata, newdata);
|
||||||
|
log.debug("update method in utildb exec uted");
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
udb.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @param commodity
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean removCommodity(String db, String commodity) throws Exception {
|
||||||
|
try{
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
udb.connectDB(db);
|
||||||
|
boolean result=udb.removeCommodityAndFields(udb.connection(), commodity);
|
||||||
|
udb.closeDB();
|
||||||
|
return result;
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
ClientError.reportError(e, "db:"+db+",commodity:"+commodity);
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
private String getLoggedInUser() throws Exception{
|
||||||
|
return (String)getRequest().getSession().getAttribute(AdminMgmt.LOGGED_IN_USERNAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param db
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map getNodeInfo(String db) throws Exception {
|
||||||
|
TreeMap rtn=new TreeMap();
|
||||||
|
|
||||||
|
UtilDB udb=new SuperDB().getUtilDB(db);
|
||||||
|
|
||||||
|
|
||||||
|
udb.connectDB(db);
|
||||||
|
Map mar_c=udb.listAllCommoditiesAndFields(udb.connection());
|
||||||
|
if(mar_c.size()<=5000){
|
||||||
|
//avoid out of memory error
|
||||||
|
List mar_c_error=udb.listAllOrphanedAssets(udb.connection());
|
||||||
|
rtn.put(db+"_err", mar_c_error);
|
||||||
|
}
|
||||||
|
|
||||||
|
rtn.put(db, mar_c);
|
||||||
|
udb.closeDB();
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private HttpServletRequest getRequest() throws Exception {
|
||||||
|
return (request == null && WebContextFactory.get()!=null) ? WebContextFactory.get().getHttpServletRequest() : request;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,222 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.Cookie;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.directwebremoting.WebContextFactory;
|
||||||
|
|
||||||
|
import com.fe.common.Constant;
|
||||||
|
import com.fourelementscapital.auth.UserThemeAccessPermission;
|
||||||
|
import com.fourelementscapital.db.AbstractTeamOrgDB;
|
||||||
|
import com.fourelementscapital.db.InfrastructureDB;
|
||||||
|
import com.fourelementscapital.scheduler.error.ClientError;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is abstraction layer for the secured data, which means can be accessed only after logged in.
|
||||||
|
* Any class that exposes user privileged data should be extended from Authenticated class
|
||||||
|
* @author Rams
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public abstract class Authenticated {
|
||||||
|
|
||||||
|
private HttpServletRequest request=null;
|
||||||
|
public static String REMOTE_IP="$clientIpAddress";
|
||||||
|
private Logger log = LogManager.getLogger(Authenticated.class.getName());
|
||||||
|
public static final String SESS_AUTHENTICATED_USER="$$AuthenticatedUserObj";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No authentication, which means this constructed to be used internally within JVM.
|
||||||
|
* @param ignoreAuthentication
|
||||||
|
*/
|
||||||
|
protected Authenticated(boolean ignoreAuthentication){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for DWR
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Authenticated() throws Exception {
|
||||||
|
|
||||||
|
if(getAuthenticatedUser()==null){
|
||||||
|
throw new Exception("SESSION LOGGED OUT: Access denied for this request");
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
if(getRequest().getSession().getAttribute(REMOTE_IP)==null){
|
||||||
|
getRequest().getSession().setAttribute(REMOTE_IP, getRequest().getRemoteAddr());
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Error while setting up session variable remote-ipaddress ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor to be used within JSP or interal call within java runtime.
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Authenticated(HttpServletRequest request) throws Exception {
|
||||||
|
this.request=request;
|
||||||
|
if(getAuthenticatedUser()==null){
|
||||||
|
throw new Exception("Requested user is not authenticated ");
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
if(getRequest().getSession().getAttribute(REMOTE_IP)==null){
|
||||||
|
getRequest().getSession().setAttribute(REMOTE_IP, getRequest().getRemoteAddr());
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Error while setting up session variable remote-ipaddress ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected UserThemeAccessPermission getAuthenticatedUserObj( AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
String currentuser=getAuthenticatedUser();
|
||||||
|
//String currentuser="ls"; //getAuthenticatedUser();
|
||||||
|
UserThemeAccessPermission auser=(UserThemeAccessPermission)getRequest().getSession().getAttribute(Authenticated.SESS_AUTHENTICATED_USER);
|
||||||
|
InfrastructureDB infrastructureDB = InfrastructureDB.getInfrastructureDB();
|
||||||
|
try{
|
||||||
|
if(auser==null){
|
||||||
|
infrastructureDB.connectDB();
|
||||||
|
Map<String,String> themes=infrastructureDB.getThemes4Users(currentuser);
|
||||||
|
|
||||||
|
auser = new UserThemeAccessPermission(currentuser);
|
||||||
|
auser.addPermissionWithThemes(themes);
|
||||||
|
|
||||||
|
getRequest().getSession().setAttribute(Authenticated.SESS_AUTHENTICATED_USER,auser);
|
||||||
|
}
|
||||||
|
} catch(Exception e) {
|
||||||
|
throw e;
|
||||||
|
} finally {
|
||||||
|
infrastructureDB.closeDB();
|
||||||
|
}
|
||||||
|
return auser;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get authenticated user in any DWR call.
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected String getAuthenticatedUser() throws Exception {
|
||||||
|
String ky=(String)getRequest().getSession().getAttribute(Constant.SESSION_LOGGED_USER);
|
||||||
|
String usr=null;
|
||||||
|
log.debug("getAuthenticatedUser ----ky:"+ky);
|
||||||
|
if((ky==null || (ky!=null && ky.equals(""))) ){
|
||||||
|
|
||||||
|
String user=null;
|
||||||
|
String pwd=null;
|
||||||
|
Cookie cookie[]=getRequest().getCookies();
|
||||||
|
if(cookie!=null){
|
||||||
|
for(int i=0;i<cookie.length;i++){
|
||||||
|
if(cookie[i].getName().equals("4eprevuser") && cookie[i].getValue()!=null) {
|
||||||
|
user=cookie[i].getValue();
|
||||||
|
}
|
||||||
|
if(cookie[i].getName().equals("4esessionuid") && cookie[i].getValue()!=null) {
|
||||||
|
pwd=cookie[i].getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(user!=null && pwd!=null){
|
||||||
|
LoginMgmt lm=new LoginMgmt();
|
||||||
|
log.debug("user:"+user+" pwd:"+pwd);
|
||||||
|
Map dt=lm.validateRememberedUser(user, pwd);
|
||||||
|
log.debug("dt:"+dt);
|
||||||
|
if((Boolean)dt.get("success")){
|
||||||
|
usr=user;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//usr=user;
|
||||||
|
}else{
|
||||||
|
usr=ky;
|
||||||
|
}
|
||||||
|
log.debug("getAuthenticatedUser ----@@@ky:"+ky);
|
||||||
|
|
||||||
|
//System.out.println("Authenticated.class: getAuthenticatedUser():"+usr);
|
||||||
|
if(usr!=null && usr.equals("")){
|
||||||
|
usr=null;
|
||||||
|
}
|
||||||
|
return usr;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setRequest(HttpServletRequest request) throws Exception {
|
||||||
|
this.request=request;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected HttpServletRequest getRequest() throws Exception {
|
||||||
|
return (request == null && WebContextFactory.get()!=null) ? WebContextFactory.get().getHttpServletRequest() : request;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected Map getThemeHirarchy(List<String> themes, AbstractTeamOrgDB sdb) throws Exception {
|
||||||
|
|
||||||
|
//SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
InfrastructureDB infrastructureDB = InfrastructureDB.getInfrastructureDB();
|
||||||
|
try{
|
||||||
|
String th="";
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
//StringTokenizer st=new StringTokenizer(themes,",");
|
||||||
|
//while(st.hasMoreTokens()){
|
||||||
|
for(String tkn: themes ){
|
||||||
|
//String tkn=st.nextToken();
|
||||||
|
th+=th.equals("")?"'"+tkn+"'":",'"+tkn+"'";
|
||||||
|
}
|
||||||
|
infrastructureDB.connectDB();
|
||||||
|
Map<String, String> data=!th.equals("")?infrastructureDB.getTeamOrg(th, getPermissionHierarchy()):new HashMap();
|
||||||
|
|
||||||
|
Map<String,String> user_privileges=UserThemeAccessPermission.replacePermissions(data);
|
||||||
|
|
||||||
|
return user_privileges;
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
//sdb.closeDB();
|
||||||
|
infrastructureDB.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List getPermissionHierarchy(){
|
||||||
|
|
||||||
|
ArrayList h=new ArrayList();
|
||||||
|
h.add("X");
|
||||||
|
h.add("M");
|
||||||
|
h.add("S");
|
||||||
|
h.add("B");
|
||||||
|
h.add("C");
|
||||||
|
h.add("U");
|
||||||
|
h.add("N");
|
||||||
|
return h;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,247 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.Semaphore;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.jcs.JCS;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.directwebremoting.WebContextFactory;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
import com.fourelementscapital.scheduler.balance.LoadBalancingQueue;
|
||||||
|
import com.fourelementscapital.scheduler.balance.executeR.LoadBalancingExecuteRQueue;
|
||||||
|
import com.fourelementscapital.scheduler.rscript.RScript;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides AJAX data for ExecuteR monitoring interface.
|
||||||
|
* The jsp file for this class executeR.jsp and javascript file executer.jsp
|
||||||
|
* @author Administrator
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ExecuteRMgmt {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(ExecuteRMgmt.class.getName());
|
||||||
|
private HttpServletRequest request=null;
|
||||||
|
|
||||||
|
private static Semaphore refreshLock=new Semaphore(1,true);
|
||||||
|
private static final long TIMEOUT_MS=1000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Semaphore lock and release machanism to make some the method calls exclusive to the current thread.
|
||||||
|
*/
|
||||||
|
private void acquireLock(){
|
||||||
|
try{
|
||||||
|
ExecuteRMgmt.refreshLock.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
||||||
|
}catch(Exception e){ log.error("Error:"+e.getMessage()); }
|
||||||
|
}
|
||||||
|
private void releaseLock(){
|
||||||
|
try{ ExecuteRMgmt.refreshLock.release(); }catch(Exception e){ log.error("Error:"+e.getMessage()); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for DWR call
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public ExecuteRMgmt() throws Exception {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for internal or jsp call
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public ExecuteRMgmt(HttpServletRequest request) throws Exception {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get queue data in json format
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map getQueue() throws Exception {
|
||||||
|
acquireLock();
|
||||||
|
try{
|
||||||
|
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
ArrayList<RScript> list2=new ArrayList();
|
||||||
|
LoadBalancingQueue queue=LoadBalancingQueue.getExecuteRScriptDefault();
|
||||||
|
Collection<RScript> queued=queue.getScriptQueue();
|
||||||
|
|
||||||
|
Collection<RScript> p1=queue.getScriptProcessingQueue();
|
||||||
|
|
||||||
|
|
||||||
|
ArrayList executing=new ArrayList();
|
||||||
|
for(RScript rs:p1){
|
||||||
|
//log.debug("p1:"+rs.getPeer());
|
||||||
|
executing.add(rs.getUid());
|
||||||
|
}
|
||||||
|
list2.addAll(p1);
|
||||||
|
list2.addAll(queued);
|
||||||
|
|
||||||
|
JCS gjcs=queue.getGroupedCache();
|
||||||
|
|
||||||
|
|
||||||
|
//just to retrieve so that, expired won't in the memory
|
||||||
|
int counter=0;
|
||||||
|
long totaldelay=0;
|
||||||
|
for(Object key: gjcs.getGroupKeys(LoadBalancingQueue.CACHE_GROUP_FINISHED)){
|
||||||
|
Long delay=(Long)gjcs.getFromGroup(key,LoadBalancingQueue.CACHE_GROUP_FINISHED);
|
||||||
|
if(delay!=null){
|
||||||
|
totaldelay=totaldelay+delay;
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.debug("totaldelay:"+totaldelay+" counter:"+counter);
|
||||||
|
long ave_delay=(counter>0 && totaldelay>0)?(totaldelay/counter)/1000:0;
|
||||||
|
|
||||||
|
//just to retrieve so that, expired won't in the memory
|
||||||
|
for(Object key: gjcs.getGroupKeys(LoadBalancingQueue.CACHE_GROUP_TIMEOUT)){
|
||||||
|
gjcs.getFromGroup(key,LoadBalancingQueue.CACHE_GROUP_TIMEOUT);
|
||||||
|
}
|
||||||
|
Set finished=gjcs.getGroupKeys(LoadBalancingQueue.CACHE_GROUP_FINISHED);
|
||||||
|
Set timedout=gjcs.getGroupKeys(LoadBalancingQueue.CACHE_GROUP_TIMEOUT);
|
||||||
|
Set activePeers=gjcs.getGroupKeys(LoadBalancingQueue.CACHE_GROUP_ACTIVEPEERS);
|
||||||
|
//long perc=(memory/runtime.totalMemory())*100;
|
||||||
|
//perc=100-perc;
|
||||||
|
//log.debug("timedout:"+timedout.size());
|
||||||
|
//log.debug("finised:"+finished.size());
|
||||||
|
Map peerdata=null;
|
||||||
|
if(getRequest()!=null && getRequest().getSession()!=null && getRequest().getSession().getAttribute("peer_data")!=null){
|
||||||
|
peerdata=(Map)getRequest().getSession().getAttribute("peer_data");
|
||||||
|
}else{
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
List<Map> pd=sdb.getPeersData();
|
||||||
|
peerdata=new HashMap();
|
||||||
|
for(Map record : pd){
|
||||||
|
|
||||||
|
String fname=(record.get("friendlyname")!=null && ((String)record.get("friendlyname")).equals(""))
|
||||||
|
?(String)record.get("friendlyname")
|
||||||
|
:(String)record.get("peername");
|
||||||
|
peerdata.put(record.get("peername"), record.get("friendlyname"));
|
||||||
|
}
|
||||||
|
if(getRequest()!=null){
|
||||||
|
getRequest().getSession().setAttribute("peer_data", peerdata);
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Error:"+e.getMessage());
|
||||||
|
}finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rtn.put("queue", list2);
|
||||||
|
rtn.put("ave_delay", (ave_delay>0?ave_delay:0));
|
||||||
|
rtn.put("queued_count", queued.size());
|
||||||
|
rtn.put("executing", executing);
|
||||||
|
rtn.put("executing_count", p1.size());
|
||||||
|
rtn.put("active_peers", activePeers.size());
|
||||||
|
rtn.put("finished", finished);
|
||||||
|
rtn.put("timedout", timedout);
|
||||||
|
rtn.put("peernames",peerdata);
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
releaseLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* remove failed item in the queue
|
||||||
|
* @param uid
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void removeFromAllQueue(String uid) throws Exception {
|
||||||
|
try{
|
||||||
|
RScript rs=new RScript();
|
||||||
|
rs.setUid(uid);
|
||||||
|
LoadBalancingQueue queue=LoadBalancingQueue.getExecuteRScriptDefault();
|
||||||
|
queue.removeScriptFromAllQueue(rs);
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the queue data in xml format
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String getQueueXML() throws Exception {
|
||||||
|
Map data=getQueue();
|
||||||
|
String result="<result>";
|
||||||
|
for(Iterator<String> keys=data.keySet().iterator();keys.hasNext();){
|
||||||
|
String key=keys.next();
|
||||||
|
|
||||||
|
|
||||||
|
ArrayList a=new ArrayList();
|
||||||
|
|
||||||
|
|
||||||
|
a.add("ave_delay");
|
||||||
|
a.add("queued_count");
|
||||||
|
a.add("executing_count");
|
||||||
|
a.add("active_peers");
|
||||||
|
a.add("finished");
|
||||||
|
a.add("timedout");
|
||||||
|
|
||||||
|
if(a.contains(key)){
|
||||||
|
String val=data.get(key)+"";
|
||||||
|
//System.out.println("key:"+key+":"+data.get(key).getClass().getName()+" isCollection:"+(data.get(key) instanceof Collection) );
|
||||||
|
if(data.get(key) instanceof Collection) val=((Collection)data.get(key)).size()+"";
|
||||||
|
result+="<"+key.toLowerCase()+">"+val+"</"+key.toLowerCase()+">";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result+="</result>";
|
||||||
|
return result;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map test_queueDebug() throws Exception {
|
||||||
|
LoadBalancingExecuteRQueue queue=(LoadBalancingExecuteRQueue)LoadBalancingQueue.getExecuteRScriptDefault();
|
||||||
|
return queue.debug_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private HttpServletRequest getRequest() throws Exception {
|
||||||
|
return (request == null && WebContextFactory.get()!=null) ? WebContextFactory.get().getHttpServletRequest() : request;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import com.fourelementscapital.auth.UserThemeAccessPermission;
|
||||||
|
import com.fourelementscapital.db.InfrastructureDB;
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
|
||||||
|
public class IExecAccessMgmt extends Authenticated {
|
||||||
|
|
||||||
|
public IExecAccessMgmt() throws Exception {
|
||||||
|
super();
|
||||||
|
// TODO Auto-generated constructor stub
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor for jsp
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public IExecAccessMgmt(HttpServletRequest request) throws Exception {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update user preference, this preference available on pressing + button on the menu bar
|
||||||
|
* @param key
|
||||||
|
* @param val
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean checkUserPermission() throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
UserThemeAccessPermission au = getAuthenticatedUserObj(sdb);
|
||||||
|
ArrayList fullaccess = au.getRwx();
|
||||||
|
ArrayList readexecaccess = au.getRx();
|
||||||
|
ArrayList readaccess = au.getR();
|
||||||
|
fullaccess.addAll(readexecaccess);
|
||||||
|
fullaccess.addAll(readaccess);
|
||||||
|
if(fullaccess.contains("iExec"))
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update user preference, this preference available on pressing + button on the menu bar
|
||||||
|
* @param key
|
||||||
|
* @param val
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String checkUserPermissionNew(String application) throws Exception {
|
||||||
|
|
||||||
|
String access = "---";
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
InfrastructureDB infrastructureDB = InfrastructureDB.getInfrastructureDB();
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
UserThemeAccessPermission au = getAuthenticatedUserObj(sdb);
|
||||||
|
|
||||||
|
infrastructureDB.connectDB();
|
||||||
|
|
||||||
|
List al = infrastructureDB.getAccessByAppAndUsername(application, au.toString());
|
||||||
|
for (int i=0; i<al.size(); i++) {
|
||||||
|
access = al.get(i) == null ? null : al.get(i).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
//return access;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
infrastructureDB.closeDB();
|
||||||
|
//return "---";
|
||||||
|
}
|
||||||
|
return access;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,248 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.InfrastructureDB;
|
||||||
|
import com.fourelementscapital.db.RFunctionDB;
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
import com.fourelementscapital.scheduler.error.ClientError;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used for making several XHR requests, for example jquery autocomplete and autosuggest feature.
|
||||||
|
* @author Administrator
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class JspXHRRequest extends Authenticated {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* make sure you are not passing null request, otherwise it won't work properly
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public JspXHRRequest(HttpServletRequest request) throws Exception {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Autocomplete search for scheduler name search on UI
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String getXHRDataScheduler() throws Exception {
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
JSONArray rtn=new JSONArray();
|
||||||
|
if( getRequest().getParameter("term")!=null){
|
||||||
|
if(getRequest().getParameter("term")!=null){
|
||||||
|
String kword=getRequest().getParameter("term");
|
||||||
|
List data=sdb.getAutoCompleteXHR(kword);
|
||||||
|
for(Iterator<Map> it=data.iterator();it.hasNext(); ){
|
||||||
|
Map record=it.next();
|
||||||
|
//System.out.println("SchedulerMgmt.getXHRDataScheduler():data:"+record);
|
||||||
|
rtn.put(record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn.toString();
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic XHR data returned
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String getXHRDataR() throws Exception {
|
||||||
|
|
||||||
|
RFunctionDB rfdb=RFunctionDB .getRFunctionDB();
|
||||||
|
|
||||||
|
try{
|
||||||
|
rfdb.connectDB();
|
||||||
|
JSONArray rtn=new JSONArray();
|
||||||
|
if( getRequest().getParameter("term")!=null){
|
||||||
|
if(getRequest().getParameter("term")!=null){
|
||||||
|
String kword=getRequest().getParameter("term");
|
||||||
|
List data=rfdb.autoCompleteFunctions(kword);
|
||||||
|
for(Iterator<Map> it=data.iterator();it.hasNext(); ){
|
||||||
|
Map record=it.next();
|
||||||
|
rtn.put(record);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn.toString();
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
rfdb.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notification related data in JSON format.
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String getNotificationData() throws Exception {
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
InfrastructureDB infrastructureDB = InfrastructureDB.getInfrastructureDB();
|
||||||
|
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
JSONObject json=new JSONObject();
|
||||||
|
JSONArray rtn=new JSONArray();
|
||||||
|
|
||||||
|
infrastructureDB.connectDB();
|
||||||
|
List<String> themes = infrastructureDB.getThemeByUsernameAccess(getAuthenticatedUser());
|
||||||
|
|
||||||
|
List data=sdb.getFailedLast2Days(themes);
|
||||||
|
for(Iterator<Map> it=data.iterator();it.hasNext(); ){
|
||||||
|
Map record=it.next();
|
||||||
|
rtn.put(record);
|
||||||
|
}
|
||||||
|
json.put("failed_scripts", rtn);
|
||||||
|
return json.toString();
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
//ClientErrorMgmt.reportError(e, null);
|
||||||
|
//throw e;
|
||||||
|
//log.error("");
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
infrastructureDB.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON formatted data.
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String getJSON() throws Exception {
|
||||||
|
String callback=getRequest().getParameter("callback");
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
JSONArray rtn=new JSONArray();
|
||||||
|
if( getRequest().getParameter("search_name")!=null || getRequest().getParameter("search_id")!=null){
|
||||||
|
String query="";
|
||||||
|
if(getRequest().getParameter("search_name")!=null){
|
||||||
|
String kword=getRequest().getParameter("search_name");
|
||||||
|
query = sdb.getTop20IdNameByNameQuery(kword);
|
||||||
|
}
|
||||||
|
if(getRequest().getParameter("search_id")!=null){
|
||||||
|
String kword=getRequest().getParameter("search_id");
|
||||||
|
query = sdb.getTop20IdNameByIdQuery(kword);
|
||||||
|
}
|
||||||
|
List data=sdb.getSingleColData(query);
|
||||||
|
|
||||||
|
for(Iterator it=data.iterator();it.hasNext(); ){
|
||||||
|
String rec=(String)it.next();
|
||||||
|
rtn.put(rec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return callback+"("+rtn.toString()+");";
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns execution logs for the selected log item in the queue
|
||||||
|
* @param scheduler_id
|
||||||
|
* @param trigger_time
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String getExecutionLogs(int scheduler_id, long trigger_time) throws Exception {
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
JSONArray rtn=new JSONArray();
|
||||||
|
List list=sdb.getSchedulerExeLogs(scheduler_id,trigger_time);
|
||||||
|
rtn.put(list);
|
||||||
|
return rtn.toString();
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List last 2 days failed details.
|
||||||
|
* @param scheduelr_id
|
||||||
|
* @param stat
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public String listLast2DaysFailedDetails(long scheduelr_id, String stat) throws Exception {
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
sdb.connectDB();
|
||||||
|
String datequery= sdb.getHistoryQueueLogsDateQuery(scheduelr_id, stat);
|
||||||
|
Date now=new Date();
|
||||||
|
List list=sdb.listOfHistoryQueueLogs(now.getTime(),datequery);
|
||||||
|
JSONObject json=new JSONObject();
|
||||||
|
json.put("list", list);
|
||||||
|
return json.toString();
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,226 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.directwebremoting.WebContextFactory;
|
||||||
|
import org.directwebremoting.util.Logger;
|
||||||
|
|
||||||
|
import com.fe.common.Constant;
|
||||||
|
import com.fourelementscapital.auth.SuperUserAuthentication;
|
||||||
|
import com.fourelementscapital.auth.WikiAuthentication;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class used authenticating the user.
|
||||||
|
* @author Administrator
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LoginMgmt {
|
||||||
|
|
||||||
|
|
||||||
|
private Logger log=Logger.getLogger(LoginMgmt.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for DWR call
|
||||||
|
*/
|
||||||
|
public LoginMgmt(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* for JSP or internal call
|
||||||
|
* @param request
|
||||||
|
*/
|
||||||
|
public LoginMgmt(HttpServletRequest request){
|
||||||
|
this.request=request;
|
||||||
|
}
|
||||||
|
|
||||||
|
//private static String dbname=Config.getString("db_wiki");
|
||||||
|
private HttpServletRequest request=null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns wiki database name for authentication and validation purpose
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
//public static String getDBName() {
|
||||||
|
// return dbname;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Login validation for given username and password
|
||||||
|
* @param user
|
||||||
|
* @param password
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map login(String user,String password) throws Exception {
|
||||||
|
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
try{
|
||||||
|
//log.debug("connecting wiki db...db:"+wdb.getDriver(dbname)+" driver:");
|
||||||
|
|
||||||
|
//log.debug("connected catalog:"+wdb.connection().getCatalog());
|
||||||
|
|
||||||
|
boolean success= WikiAuthentication.validateUser(user, password);
|
||||||
|
if(!success){
|
||||||
|
rtn.put("message", "Invalid username or password");
|
||||||
|
}else{
|
||||||
|
HttpSession session=getRequest().getSession(true);
|
||||||
|
session.setMaxInactiveInterval(24*60*60); //1 day;
|
||||||
|
session.setAttribute(Constant.SESSION_LOGGED_USER, user);
|
||||||
|
boolean cookielogin=false;
|
||||||
|
session.setAttribute(Constant.SESSION_LOGGED_HEADER, getHeaders(getRequest(),cookielogin));
|
||||||
|
String pss=WikiAuthentication.getEncryptedPwd(user);
|
||||||
|
rtn.put("fesessionuid", pss);
|
||||||
|
}
|
||||||
|
rtn.put("loggedin", success);
|
||||||
|
return rtn;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Map getHeaders(HttpServletRequest req, boolean cookielogin) throws Exception {
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
Enumeration<String> h=req.getHeaderNames();
|
||||||
|
while(h.hasMoreElements()){
|
||||||
|
String header=h.nextElement();
|
||||||
|
rtn.put(header, req.getHeader(header));
|
||||||
|
}
|
||||||
|
rtn.put(Constant.SESSION_LOGGED_HEADER_COOKIELOGIN, cookielogin);
|
||||||
|
rtn.put(Constant.SESSION_LOGGED_HEADER_IP,getRequest().getRemoteAddr());
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logging in as super user to over-ride some of the user privileged options
|
||||||
|
*
|
||||||
|
* @param user
|
||||||
|
* @param password
|
||||||
|
* @param newpassword
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map loginSuperUser(String user,String password,String newpassword) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
try{
|
||||||
|
|
||||||
|
boolean success=false;
|
||||||
|
if(user.equalsIgnoreCase("administrator") && newpassword!=null && !newpassword.equals("")){
|
||||||
|
success = SuperUserAuthentication.changePwd(password,newpassword);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
success = SuperUserAuthentication.validateOrSet(password); //validation implementation to be done..
|
||||||
|
}
|
||||||
|
if(!success){
|
||||||
|
rtn.put("message", "Invalid username or password");
|
||||||
|
}else{
|
||||||
|
HttpSession session=getRequest().getSession(true);
|
||||||
|
session.setAttribute(Constant.SESSION_LOGGED_SUPERUSER, user);
|
||||||
|
}
|
||||||
|
rtn.put("loggedin", success);
|
||||||
|
return rtn;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
//wdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* validates remembered password on browser cookie, the password is stored in md5 hash value
|
||||||
|
* @param user
|
||||||
|
* @param password
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map validateRememberedUser(String user,String password) throws Exception {
|
||||||
|
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
try{
|
||||||
|
|
||||||
|
boolean success=false;
|
||||||
|
String passcode=URLDecoder.decode(password);
|
||||||
|
log.debug("user:"+user+" passcode:"+passcode);
|
||||||
|
|
||||||
|
String pss=WikiAuthentication.getEncryptedPwd(user);
|
||||||
|
|
||||||
|
if(!passcode.equals(pss)){
|
||||||
|
rtn.put("message", "Invalid username or password");
|
||||||
|
}else{
|
||||||
|
|
||||||
|
success=true;
|
||||||
|
HttpSession session=getRequest().getSession(true);
|
||||||
|
session.setMaxInactiveInterval(24*60*60); //1 day;
|
||||||
|
session.setAttribute(Constant.SESSION_LOGGED_USER, user);
|
||||||
|
|
||||||
|
boolean cookielogin=true;
|
||||||
|
session.setAttribute(Constant.SESSION_LOGGED_HEADER, getHeaders(getRequest(),cookielogin));
|
||||||
|
|
||||||
|
//wdb.getEncryptedPwd(user_name)
|
||||||
|
//String pss=wdb.getEncryptedPwd(user);
|
||||||
|
rtn.put("fesessionuid", pss);
|
||||||
|
}
|
||||||
|
rtn.put("loggedin", success);
|
||||||
|
log.debug("rtn:"+rtn);
|
||||||
|
return rtn;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a standard logout
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void logout() throws Exception {
|
||||||
|
HttpSession session=getRequest().getSession();
|
||||||
|
session.removeAttribute(Constant.SESSION_LOGGED_USER);
|
||||||
|
session.invalidate();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private HttpServletRequest getRequest() throws Exception {
|
||||||
|
return (request == null && WebContextFactory.get()!=null) ? WebContextFactory.get().getHttpServletRequest() : request;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides data for building menu on the web page.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MenuMgmt extends Authenticated {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* default constructor
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public MenuMgmt() throws Exception {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor for jsp
|
||||||
|
* @param request
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public MenuMgmt(HttpServletRequest request) throws Exception {
|
||||||
|
super(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* update user preference, this preference available on pressing + button on the menu bar
|
||||||
|
* @param key
|
||||||
|
* @param val
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public boolean updateUserPreference(String key, String val) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
String user=getAuthenticatedUser();
|
||||||
|
sdb.connectDB();
|
||||||
|
sdb.userPrefSaveOrUpdate(user, key, val);
|
||||||
|
return true;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get user preference to set necessary settings in UI
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public Map getUserPref() throws Exception {
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
String user=getAuthenticatedUser();
|
||||||
|
sdb.connectDB();
|
||||||
|
Map data=sdb.userPrefGetAll(user);
|
||||||
|
return data;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
sdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,81 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.client;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class SchedulerReportClient {
|
||||||
|
private static String REPORTS_FOLDER="scheduler.report.folder";
|
||||||
|
private Logger log = LogManager.getLogger(SchedulerReportClient.class.getName());
|
||||||
|
|
||||||
|
|
||||||
|
private ArrayList<String> getFileNames() {
|
||||||
|
String folder=Config.getString(REPORTS_FOLDER);
|
||||||
|
ArrayList rtn=new ArrayList();
|
||||||
|
log.debug("folder:"+folder);
|
||||||
|
if(folder!=null && new File(folder).exists()){
|
||||||
|
File[] list=new File(folder).listFiles();
|
||||||
|
for(int i=0;i<list.length;i++){
|
||||||
|
rtn.add(list[i].getName());
|
||||||
|
log.debug("adding filename:"+list[i].getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(rtn );
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String generateMarkup(){
|
||||||
|
|
||||||
|
ArrayList<String> files=getFileNames();
|
||||||
|
String ul="";
|
||||||
|
String div="";
|
||||||
|
String folder=Config.getString(REPORTS_FOLDER);
|
||||||
|
int count=0;
|
||||||
|
|
||||||
|
for(String filename: files){
|
||||||
|
String filepart=filename.substring(0,filename.indexOf("."));
|
||||||
|
String ext=filename.substring(filename.indexOf(".")+1);
|
||||||
|
log.debug("filepart:"+filepart+" ext:"+ext);
|
||||||
|
if(ext.equalsIgnoreCase("png") || ext.equalsIgnoreCase("html") || ext.equalsIgnoreCase("htm")){
|
||||||
|
String id="scd_monitors-tabs-"+count;
|
||||||
|
String img_id="scd_monitors-tabs-img"+count;
|
||||||
|
ul+=(ul.equals(""))?"<ul>":"";
|
||||||
|
ul+="<li><a href=\"#"+id+"\">"+filepart+"</a></li>";
|
||||||
|
if(ext.equalsIgnoreCase("png") ){
|
||||||
|
div+="<div class=\"chromeScroll\" id=\""+id+"\"><img fileparam=\""+folder+filename+"\" src=\"image.jsp?file="+folder+filename+"&t="+new Date().getTime()+"\" id=\""+img_id+"\"></div>";
|
||||||
|
}else if(ext.equalsIgnoreCase("html") || ext.equalsIgnoreCase("htm")){
|
||||||
|
div+="<div class=\"chromeScroll\" id=\""+id+"\" style=\"overflow:hidden\">";
|
||||||
|
div+="<iframe fileparam=\""+folder+filename+"\" class=\"chromeScroll\" src=\"html.jsp?file="+folder+filename+"&t="+new Date().getTime()+"\" width=\"100%\" height=\"100%\" scrolling=\"yes\" style=\"border:0px\">";
|
||||||
|
div+="<p>Your browser does not support iframes.</p>";
|
||||||
|
div+="</iframe>";
|
||||||
|
div+="</div>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
ul+=(ul.equals(""))?"":"</ul>";
|
||||||
|
return ul+div;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.common;
|
||||||
|
|
||||||
|
public class Constant {
|
||||||
|
|
||||||
|
public final static String SESSION_LOGGED_USER="session^logged^user";
|
||||||
|
public final static String SESSION_LOGGED_HEADER="session^logged^header";
|
||||||
|
public final static String SESSION_LOGGED_HEADER_IP="sess_ip_address";
|
||||||
|
public final static String SESSION_LOGGED_HEADER_COOKIELOGIN="sess_cookielogin";
|
||||||
|
|
||||||
|
public final static String SESSION_LOGGED_SUPERUSER="session^logged^superuser";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.io.peer;
|
||||||
|
|
||||||
|
import io.netty.bootstrap.Bootstrap;
|
||||||
|
import io.netty.channel.Channel;
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import io.netty.channel.ChannelInitializer;
|
||||||
|
import io.netty.channel.ChannelPipeline;
|
||||||
|
import io.netty.channel.EventLoopGroup;
|
||||||
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
|
import io.netty.channel.socket.nio.NioSocketChannel;
|
||||||
|
import io.netty.handler.codec.serialization.ClassResolvers;
|
||||||
|
import io.netty.handler.codec.serialization.ObjectDecoder;
|
||||||
|
import io.netty.handler.codec.serialization.ObjectEncoder;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.io.peer.PeerClientHandler;
|
||||||
|
|
||||||
|
public class PeerClient implements Runnable {
|
||||||
|
|
||||||
|
private final String host;
|
||||||
|
private final int port;
|
||||||
|
private static Timer timer=null;
|
||||||
|
private Logger log = LogManager.getLogger(PeerClient.class.getName());
|
||||||
|
|
||||||
|
public PeerClient(String host, int port) {
|
||||||
|
this.host = host;
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
EventLoopGroup group = new NioEventLoopGroup(10);
|
||||||
|
try {
|
||||||
|
|
||||||
|
if(timer==null){
|
||||||
|
TimerTask tt=new TimerTask() {
|
||||||
|
public void run() {
|
||||||
|
String tname="peercleint_timer_"+(new Date().getTime()/1000);
|
||||||
|
|
||||||
|
ChannelHandlerContext chc=PeerClientHandler.getChannelHandler();
|
||||||
|
//System.out.println("PeerClient timer:"+chc);
|
||||||
|
if(chc!=null){
|
||||||
|
//System.out.println("PeerClient timer: active:"+chc.channel().isActive());
|
||||||
|
//System.out.println("PeerClient timer: open:"+chc.channel().isOpen());
|
||||||
|
if(!chc.channel().isOpen()){
|
||||||
|
Thread t=new Thread(new PeerClient(this.host,this.port),tname);
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
Thread t=new Thread(new PeerClient(this.host,this.port),tname);
|
||||||
|
t.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private String host=null;
|
||||||
|
private int port=0;
|
||||||
|
public TimerTask init(String h,int p){
|
||||||
|
this.host = h;
|
||||||
|
this.port = p;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}.init(this.host, this.port);
|
||||||
|
//checks every 1 minute to see if a thread still running....
|
||||||
|
long freq=10*1000;
|
||||||
|
PeerClient.timer = new Timer("scheduler_con_monitor");
|
||||||
|
PeerClient.timer.scheduleAtFixedRate(tt,freq, freq);
|
||||||
|
}
|
||||||
|
|
||||||
|
Bootstrap b = new Bootstrap();
|
||||||
|
b.group(group)
|
||||||
|
.channel(NioSocketChannel.class)
|
||||||
|
.handler(new ChannelInitializer<Channel>() {
|
||||||
|
@Override
|
||||||
|
protected void initChannel(Channel ch) throws Exception {
|
||||||
|
ChannelPipeline pipeline=ch.pipeline();
|
||||||
|
pipeline.addLast("decoder", new ObjectDecoder(ClassResolvers.cacheDisabled(null)));
|
||||||
|
pipeline.addLast("encoder", new ObjectEncoder());
|
||||||
|
// and then business logic.
|
||||||
|
pipeline.addLast("handler", new PeerClientHandler());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// Start the connection attempt.
|
||||||
|
//System.out.println("~~~~~~~~~PeerClient starting....");
|
||||||
|
log.debug("before bootstrap starting...");
|
||||||
|
Channel ch = b.connect(host, port).sync().channel();
|
||||||
|
|
||||||
|
//Read commands from the stdin.
|
||||||
|
//ChannelFuture lastWriteFuture = null;
|
||||||
|
//lastWriteFuture = ch.writeAndFlush(p);
|
||||||
|
//If user typed the 'bye' command, wait until the server closes
|
||||||
|
//the connection.
|
||||||
|
//ch.closeFuture().sync();
|
||||||
|
//Wait until all messages are flushed before closing the channel.
|
||||||
|
//if (lastWriteFuture != null) {
|
||||||
|
// lastWriteFuture.sync();
|
||||||
|
//}
|
||||||
|
//} catch(ConnectException ce){
|
||||||
|
//System.out.println("PeerClient() exception:~~~~~~~");
|
||||||
|
//ce.printStackTrace();
|
||||||
|
|
||||||
|
} catch(Exception e){
|
||||||
|
group.shutdownGracefully();
|
||||||
|
log.error("error while PeerClient:"+e.getMessage());
|
||||||
|
} finally {
|
||||||
|
//group.shutdownGracefully();
|
||||||
|
//System.out.println("PeerClient() finally:~~~~~~~");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.io.server;
|
||||||
|
|
||||||
|
import io.netty.bootstrap.ServerBootstrap;
|
||||||
|
import io.netty.channel.ChannelInitializer;
|
||||||
|
import io.netty.channel.ChannelOption;
|
||||||
|
import io.netty.channel.ChannelPipeline;
|
||||||
|
import io.netty.channel.EventLoopGroup;
|
||||||
|
import io.netty.channel.nio.NioEventLoopGroup;
|
||||||
|
import io.netty.channel.socket.SocketChannel;
|
||||||
|
import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||||
|
import io.netty.handler.codec.serialization.ClassResolvers;
|
||||||
|
import io.netty.handler.codec.serialization.ObjectDecoder;
|
||||||
|
import io.netty.handler.codec.serialization.ObjectEncoder;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.io.server.ServerConnectionHandler;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class ServerScheduler implements Runnable {
|
||||||
|
|
||||||
|
private int port;
|
||||||
|
|
||||||
|
public ServerScheduler(int port) {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
|
||||||
|
EventLoopGroup workerGroup = new NioEventLoopGroup();
|
||||||
|
try {
|
||||||
|
ServerBootstrap b = new ServerBootstrap(); // (2)
|
||||||
|
b.group(bossGroup, workerGroup)
|
||||||
|
.channel(NioServerSocketChannel.class) // (3)
|
||||||
|
.childOption(ChannelOption.TCP_NODELAY, true)
|
||||||
|
.childOption(ChannelOption.SO_KEEPALIVE, true)
|
||||||
|
.childHandler(new ChannelInitializer<SocketChannel>() { // (4)
|
||||||
|
public void initChannel(SocketChannel ch) throws Exception {
|
||||||
|
ChannelPipeline pipeline = ch.pipeline();
|
||||||
|
pipeline.addLast(new ObjectEncoder(), new ObjectDecoder(ClassResolvers.cacheDisabled(null)), new ServerConnectionHandler());
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
b.bind(port).sync().channel().closeFuture().sync();
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
workerGroup.shutdownGracefully();
|
||||||
|
bossGroup.shutdownGracefully();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
int port;
|
||||||
|
if (args.length > 0) {
|
||||||
|
port = Integer.parseInt(args[0]);
|
||||||
|
} else {
|
||||||
|
port = 8888;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.FlexiFieldDB;
|
||||||
|
|
||||||
|
public class FundamentalTickersCollector extends SearchTokenCollector {
|
||||||
|
|
||||||
|
public FundamentalTickersCollector(String tablename) {
|
||||||
|
super(tablename);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processTextTokens(String ticker) throws Exception {
|
||||||
|
FlexiFieldDB fldb=FlexiFieldDB.getFlexiFieldDB();
|
||||||
|
//ReferenceDB refdb=new ReferenceDB();
|
||||||
|
|
||||||
|
fldb.connectDB();
|
||||||
|
|
||||||
|
Vector<Map> fl_fdata=fldb.getFlexiFieldData4LuceneToken("fundamental_flexi_data" , "ticker", ticker);
|
||||||
|
|
||||||
|
|
||||||
|
String content=ticker+" ";
|
||||||
|
HashMap catfields=new HashMap();
|
||||||
|
|
||||||
|
|
||||||
|
for(Iterator<Map> i=fl_fdata.iterator();i.hasNext();){
|
||||||
|
Map record=i.next();
|
||||||
|
if(record.get("val")!=null){
|
||||||
|
String val=(String)record.get("val");
|
||||||
|
content+=" "+val;
|
||||||
|
if(record.get("fieldlabel")!=null){
|
||||||
|
catfields.put(record.get("fieldlabel")+"",val );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
catfields.put("title",ticker);
|
||||||
|
super.rtn=content;
|
||||||
|
super.categoryfields.clear();
|
||||||
|
super.categoryfields.putAll(catfields);
|
||||||
|
fldb.closeDB();
|
||||||
|
//refdb.closeDB();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.Hashtable;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
import java.util.Vector;
|
||||||
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.error.ClientError;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class LuceneCrawler implements Runnable{
|
||||||
|
|
||||||
|
|
||||||
|
public static String INDEX_TABLE_SECURITY="market_securities";
|
||||||
|
public static String INDEX_TABLE_CONTRACT="market_contracts";
|
||||||
|
public static String INDEX_TABLE_COMMODITY="market_commodity";
|
||||||
|
public static String INDEX_TABLE_FUNDAMENTAL_TICKR="fundamental_ticker";
|
||||||
|
public static String INDEX_SCHEDULER="scheduler";
|
||||||
|
|
||||||
|
|
||||||
|
private String tablename;
|
||||||
|
|
||||||
|
private static ConcurrentLinkedQueue queue=new ConcurrentLinkedQueue();
|
||||||
|
|
||||||
|
private static Hashtable optimizedAccounts=new Hashtable();
|
||||||
|
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(LuceneCrawler.class.getName());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public LuceneCrawler(String tablename){
|
||||||
|
|
||||||
|
this.tablename=tablename;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private long indexid;
|
||||||
|
|
||||||
|
|
||||||
|
private LuceneCrawler(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean threadExecuting=false;
|
||||||
|
|
||||||
|
public synchronized void index(String ticker) throws Exception {
|
||||||
|
|
||||||
|
//System.out.println("CandidateCrawler: added id:"+candidateid);
|
||||||
|
addToQueue(ticker,SearchSession.ACTION_INDEX);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void addToQueue(String ticker, int action){
|
||||||
|
TickerIndexRecord uobj=new TickerIndexRecord();
|
||||||
|
|
||||||
|
uobj.setTicker(ticker);
|
||||||
|
uobj.setTablename(this.tablename);
|
||||||
|
uobj.setAction(action);
|
||||||
|
if(!LuceneCrawler.queue.contains(uobj)){
|
||||||
|
LuceneCrawler.queue.add(uobj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!LuceneCrawler.threadExecuting){
|
||||||
|
LuceneCrawler.threadExecuting=true;
|
||||||
|
|
||||||
|
Thread th=new Thread(new LuceneCrawler());
|
||||||
|
th.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void deleteIndex(String ticker) throws Exception {
|
||||||
|
addToQueue(ticker,SearchSession.ACTION_DELETE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
//index creates a separate thread to index all queued items
|
||||||
|
//only one index will be running irrelevent of accounts or tablename
|
||||||
|
//once all queued items index, then after specified interval count in global.xml index will be optimized.
|
||||||
|
//this is to avoid big files being indexed very often that slows down the performance of the system.
|
||||||
|
//if no specificed optimization interval count is not specified then it is 1 by default (hard coded below)
|
||||||
|
|
||||||
|
|
||||||
|
while (!LuceneCrawler.queue.isEmpty()) {
|
||||||
|
|
||||||
|
TickerIndexRecord uobj =(TickerIndexRecord)LuceneCrawler.queue.poll();
|
||||||
|
//System.out.println("CandidateCrawler: indexing:"+uobj.getAccount()+":"+uobj.getRecordid());
|
||||||
|
MyIndexer myin=new MyIndexer(uobj.getTablename());
|
||||||
|
SearchSession ss=new SearchSession(myin);
|
||||||
|
|
||||||
|
SearchTokenCollector ctc=TokenCollectorFactory.getTokenCollector(uobj) ;//new CandidateTokenCollector(uobj.getAccount());
|
||||||
|
|
||||||
|
try{
|
||||||
|
//log.debug("add action:"+uobj.getAction()+" recordid:"+uobj.getRecordid()+" ac:"+uobj.getAccount()+" table:"+uobj.getTablename());
|
||||||
|
ss.action(uobj.getAction(),ctc,uobj.getTicker());
|
||||||
|
log.debug("added to searchsession");
|
||||||
|
if(SearchSession.ACTION_INDEX==uobj.getAction()){
|
||||||
|
//LuceneLog.log(LuceneLog.STATUS_SUCCESS, uobj.getAccount(), uobj.getDbname(), uobj.getRecordid(), "");
|
||||||
|
}else if(SearchSession.ACTION_DELETE==uobj.getAction()){
|
||||||
|
//LuceneLog.log(LuceneLog.STATUS_DELETED, uobj.getAccount(), uobj.getDbname(), uobj.getRecordid(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}catch (Exception e){
|
||||||
|
ClientError.reportError(e, "Error while indexing, Action:"+uobj.getAction()+" id:"+uobj.getTicker()+" db:"+uobj.getTablename());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
int count=1;
|
||||||
|
|
||||||
|
if(optimizedAccounts.containsKey(uobj.getTablename())){
|
||||||
|
|
||||||
|
TreeMap t=(TreeMap)optimizedAccounts.get(uobj.getTablename());
|
||||||
|
//log.debug("t:"+t+" uobj tablename:"+uobj.getDbname());
|
||||||
|
if(t.containsKey(uobj.getTablename())){
|
||||||
|
count=(Integer) t.get(uobj.getTablename());
|
||||||
|
//log.debug("count a:"+count);
|
||||||
|
count=count+1;
|
||||||
|
//log.debug("count b:"+count);
|
||||||
|
}
|
||||||
|
|
||||||
|
t.put(uobj.getTablename(), count);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
TreeMap t=new TreeMap();
|
||||||
|
t.put(uobj.getTablename(),count);
|
||||||
|
optimizedAccounts.put(uobj.getTablename(),t);
|
||||||
|
}
|
||||||
|
log.debug("optimized accounts"+optimizedAccounts);
|
||||||
|
|
||||||
|
} //while loop
|
||||||
|
|
||||||
|
//for(int i=0;i<optimizeAccounts.size();i++){
|
||||||
|
|
||||||
|
int optcount=5;//default (if no entry found);
|
||||||
|
|
||||||
|
try{
|
||||||
|
//String opc=new GeneralConfiguration().getProperty(GeneralConfiguration.LUCENE_OPTIMIZATION_COUNT);
|
||||||
|
//optcount=Integer.parseInt(opc);
|
||||||
|
}catch(Exception e){}
|
||||||
|
|
||||||
|
Vector removeAccounts=new Vector();
|
||||||
|
for(Iterator i=optimizedAccounts.keySet().iterator();i.hasNext();){
|
||||||
|
String account=(String)i.next();
|
||||||
|
TreeMap table=(TreeMap)optimizedAccounts.get(account);
|
||||||
|
Vector removeTable=new Vector();
|
||||||
|
for(Iterator ia=table.keySet().iterator();ia.hasNext();){
|
||||||
|
String tablena=(String)ia.next();
|
||||||
|
Integer count=(Integer)table.get(tablena);
|
||||||
|
if(count>=optcount){
|
||||||
|
removeTable.add(tablena);
|
||||||
|
MyIndexer myin1=new MyIndexer(account);
|
||||||
|
SearchSession ss1=new SearchSession(myin1);
|
||||||
|
//LuceneLog.log(LuceneLog.STATUS_SUCCESS, account, tablena, 0, "*******Optimization started****");
|
||||||
|
ss1.action(SearchSession.ACTION_OPTIMIZE,null,null);
|
||||||
|
//LuceneLog.log(LuceneLog.STATUS_SUCCESS, account, tablena, 0, "*******Optimization ended********");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(Iterator ia=removeTable.iterator();ia.hasNext();){
|
||||||
|
Object obj=ia.next();
|
||||||
|
table.remove(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(table.size()<=0){
|
||||||
|
removeAccounts.add(account);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(Iterator ia=removeAccounts.iterator();ia.hasNext();){
|
||||||
|
Object obj=ia.next();
|
||||||
|
optimizedAccounts.remove(obj);
|
||||||
|
}
|
||||||
|
log.debug("optimized accounts at last:"+optimizedAccounts);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
//System.out.println("CandidateCrawler: Error:"+e.getLocalizedMessage());
|
||||||
|
//e.printStackTrace();
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
//LuceneLog.log(LuceneLog.STATUS_FAILED, "", this.tablename, 0, "");
|
||||||
|
//throw e;
|
||||||
|
|
||||||
|
}finally{
|
||||||
|
LuceneCrawler.threadExecuting=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//meanwhile while optimizing if there were documents added to index.
|
||||||
|
//process the queue.
|
||||||
|
if(LuceneCrawler.queue.size()>0){
|
||||||
|
LuceneCrawler.threadExecuting=true;
|
||||||
|
Thread th=new Thread(new LuceneCrawler());
|
||||||
|
th.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Hashtable getOptimizationQueueObj(){
|
||||||
|
|
||||||
|
return optimizedAccounts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOptimizationStatus(){
|
||||||
|
String rtn="";
|
||||||
|
for(Iterator i=optimizedAccounts.keySet().iterator();i.hasNext();){
|
||||||
|
String account=(String)i.next();
|
||||||
|
TreeMap table=(TreeMap)optimizedAccounts.get(account);
|
||||||
|
Vector removeTable=new Vector();
|
||||||
|
for(Iterator ia=table.keySet().iterator();ia.hasNext();){
|
||||||
|
String tablena=(String)ia.next();
|
||||||
|
Integer count=(Integer)table.get(tablena);
|
||||||
|
rtn+="Account:"+account+", table:"+tablena+", count:"+count+"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static int getQueueStat() throws Exception {
|
||||||
|
return queue.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.FlexiFieldDB;
|
||||||
|
import com.fourelementscapital.db.ReferenceDB;
|
||||||
|
|
||||||
|
public class MarketCommodityCollector extends SearchTokenCollector {
|
||||||
|
|
||||||
|
|
||||||
|
public MarketCommodityCollector(String tablename) {
|
||||||
|
super(tablename);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processTextTokens(String ticker) throws Exception {
|
||||||
|
FlexiFieldDB fldb=FlexiFieldDB.getFlexiFieldDB();
|
||||||
|
//ReferenceDB refdb=new ReferenceDB();
|
||||||
|
|
||||||
|
fldb.connectDB();
|
||||||
|
|
||||||
|
Vector<Map> fl_fdata=fldb.getFlexiFieldData4LuceneToken("commodity_flexi_data" , "commodity", ticker);
|
||||||
|
|
||||||
|
|
||||||
|
String content=ticker+" ";
|
||||||
|
HashMap catfields=new HashMap();
|
||||||
|
|
||||||
|
|
||||||
|
for(Iterator<Map> i=fl_fdata.iterator();i.hasNext();){
|
||||||
|
Map record=i.next();
|
||||||
|
if(record.get("val")!=null){
|
||||||
|
String val=(String)record.get("val");
|
||||||
|
content+=" "+val;
|
||||||
|
if(record.get("fieldlabel")!=null){
|
||||||
|
catfields.put(record.get("fieldlabel")+"",val );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
catfields.put("title",ticker);
|
||||||
|
super.rtn=content;
|
||||||
|
super.categoryfields.clear();
|
||||||
|
super.categoryfields.putAll(catfields);
|
||||||
|
fldb.closeDB();
|
||||||
|
//refdb.closeDB();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.FlexiFieldDB;
|
||||||
|
import com.fourelementscapital.db.ReferenceDB;
|
||||||
|
|
||||||
|
public class MarketContractCollector extends SearchTokenCollector {
|
||||||
|
|
||||||
|
|
||||||
|
public MarketContractCollector(String tablename) {
|
||||||
|
super(tablename);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processTextTokens(String ticker) throws Exception {
|
||||||
|
//FlexiFieldDB fldb=new FlexiFieldDB();
|
||||||
|
ReferenceDB refdb=ReferenceDB.getReferenceDB();
|
||||||
|
|
||||||
|
refdb.connectDB();
|
||||||
|
|
||||||
|
//Vector<Map> fl_fdata=fldb.getFlexiFieldData4LuceneToken("commodity_flexi_data" , "commodity", ticker);
|
||||||
|
Vector bb_syncdata=refdb.getContractBBInfo(ticker);
|
||||||
|
|
||||||
|
String content=ticker+" ";
|
||||||
|
HashMap catfields=new HashMap();
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
for(Iterator<Map> i=fl_fdata.iterator();i.hasNext();){
|
||||||
|
Map record=i.next();
|
||||||
|
if(record.get("val")!=null){
|
||||||
|
String val=(String)record.get("val");
|
||||||
|
content+=" "+val;
|
||||||
|
if(record.get("fieldlabel")!=null){
|
||||||
|
catfields.put(record.get("fieldlabel")+"",val );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
for(Iterator<Map> i=bb_syncdata.iterator();i.hasNext();){
|
||||||
|
Map record=i.next();
|
||||||
|
if(record.get("value")!=null){
|
||||||
|
String val=(String)record.get("value");
|
||||||
|
content+=" "+val;
|
||||||
|
if(record.get("friendly_name")!=null){
|
||||||
|
catfields.put(record.get("friendly_name")+"",val );
|
||||||
|
}
|
||||||
|
if(record.get("bb_fieldname")!=null){
|
||||||
|
catfields.put(record.get("bb_fieldname")+"",val );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catfields.put("title",ticker);
|
||||||
|
super.rtn=content;
|
||||||
|
super.categoryfields.clear();
|
||||||
|
super.categoryfields.putAll(catfields);
|
||||||
|
//fldb.closeDB();
|
||||||
|
refdb.closeDB();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.FlexiFieldDB;
|
||||||
|
import com.fourelementscapital.db.ReferenceDB;
|
||||||
|
|
||||||
|
public class MarketSecurityCollector extends SearchTokenCollector {
|
||||||
|
|
||||||
|
|
||||||
|
public MarketSecurityCollector(String tablename) {
|
||||||
|
super(tablename);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processTextTokens(String ticker) throws Exception {
|
||||||
|
FlexiFieldDB fldb=FlexiFieldDB.getFlexiFieldDB();
|
||||||
|
ReferenceDB refdb=ReferenceDB.getReferenceDB();
|
||||||
|
|
||||||
|
fldb.connectDB();
|
||||||
|
refdb.connectDB();
|
||||||
|
|
||||||
|
Vector<Map> fl_fdata=fldb.getFlexiFieldData4LuceneToken("security_flexi_data" , "ticker", ticker);
|
||||||
|
Vector bb_syncdata=refdb.getSecurityBBInfo(ticker);
|
||||||
|
|
||||||
|
String content=ticker+" ";
|
||||||
|
HashMap catfields=new HashMap();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(Iterator<Map> i=fl_fdata.iterator();i.hasNext();){
|
||||||
|
Map record=i.next();
|
||||||
|
if(record.get("val")!=null){
|
||||||
|
String val=(String)record.get("val");
|
||||||
|
content+=" "+val;
|
||||||
|
if(record.get("fieldlabel")!=null){
|
||||||
|
catfields.put(record.get("fieldlabel")+"",val );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Iterator<Map> i=bb_syncdata.iterator();i.hasNext();){
|
||||||
|
Map record=i.next();
|
||||||
|
if(record.get("value")!=null){
|
||||||
|
String val=(String)record.get("value");
|
||||||
|
content+=" "+val;
|
||||||
|
if(record.get("friendly_name")!=null){
|
||||||
|
catfields.put(record.get("friendly_name")+"",val );
|
||||||
|
}
|
||||||
|
if(record.get("bb_fieldname")!=null){
|
||||||
|
catfields.put(record.get("bb_fieldname")+"",val );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catfields.put("title",ticker);
|
||||||
|
super.rtn=content;
|
||||||
|
super.categoryfields.clear();
|
||||||
|
super.categoryfields.putAll(catfields);
|
||||||
|
fldb.closeDB();
|
||||||
|
refdb.closeDB();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
||||||
|
import org.apache.lucene.index.IndexReader;
|
||||||
|
import org.apache.lucene.index.IndexWriter;
|
||||||
|
import org.apache.lucene.search.IndexSearcher;
|
||||||
|
import org.apache.lucene.store.Directory;
|
||||||
|
import org.apache.lucene.store.FSDirectory;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class MyIndexer {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(MyIndexer.class.getName());
|
||||||
|
private String filename=null;
|
||||||
|
private String account;
|
||||||
|
private String dbname;
|
||||||
|
|
||||||
|
private final int MAX_BUFFERED_DELETED_TERMS=20;
|
||||||
|
|
||||||
|
public MyIndexer(String dbname) {
|
||||||
|
|
||||||
|
this.dbname=dbname;
|
||||||
|
//this.filename=GlobalConfiguration.getConfig().getConfigValue(Preferences.GLOBAL_CONFIG_SEARCH_INDEX_FOLDER)+account+File.separator+tablename;
|
||||||
|
String root=Config.getString("lucene_index_folder");
|
||||||
|
this.filename=root+this.dbname;
|
||||||
|
|
||||||
|
if (!new File(this.filename).isDirectory()) {
|
||||||
|
new File(this.filename).mkdirs();
|
||||||
|
try{
|
||||||
|
IndexWriter iw= new IndexWriter(new File(this.filename), new StandardAnalyzer(), true,IndexWriter.MaxFieldLength.LIMITED);
|
||||||
|
iw.optimize();
|
||||||
|
iw.close();
|
||||||
|
log.info("Lucene Index created");
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("ERROR in creating index: MSG:"+e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized IndexReader getIndexReader() throws Exception {
|
||||||
|
|
||||||
|
return IndexReader.open(this.filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized IndexWriter getIndexWriter() throws Exception {
|
||||||
|
Directory idir=FSDirectory.getDirectory(new File(this.filename));
|
||||||
|
if(IndexWriter.isLocked(idir)){
|
||||||
|
//LuceneLog.log(LuceneLog.STATUS_FAILED, this.account, this.tablename, 0, "Forced to unlock the directory");
|
||||||
|
log.error("Forced to unclock index of file:"+this.filename);
|
||||||
|
IndexWriter.unlock(idir);
|
||||||
|
}
|
||||||
|
IndexWriter idx=new IndexWriter(new File(this.filename), new StandardAnalyzer(), false,IndexWriter.MaxFieldLength.LIMITED);
|
||||||
|
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized IndexSearcher getIndexSearcher() throws Exception {
|
||||||
|
return new IndexSearcher(this.filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
import org.apache.lucene.document.Field;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class RecordDocument {
|
||||||
|
|
||||||
|
public static Document Document(String content, String ticker, Map fields)
|
||||||
|
throws java.io.FileNotFoundException {
|
||||||
|
Document doc = new Document();
|
||||||
|
doc.add(new Field("content", content, Field.Store.YES, Field.Index.TOKENIZED));
|
||||||
|
doc.add(new Field("id", ticker, Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
//doc.add(new Field("ticker", ticker, Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
// doc.add(new Field("security", ticker, Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
//doc.add(new Field("contract", ticker, Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
//doc.add(new Field("commodity", ticker, Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
|
||||||
|
for(Iterator i=fields.keySet().iterator();i.hasNext();){
|
||||||
|
String key=(String)i.next();
|
||||||
|
if(key!=null && !key.equals("") && fields.get(key)!=null && fields.get(key)!=null && !fields.get(key).equals("") ){
|
||||||
|
doc.add(new Field(key, fields.get(key).toString(), Field.Store.YES, Field.Index.TOKENIZED));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
|
||||||
|
public class SchedulerTokenCollector extends SearchTokenCollector {
|
||||||
|
|
||||||
|
public SchedulerTokenCollector(String tablename) {
|
||||||
|
super(tablename);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void processTextTokens(String scheduler_id) throws Exception {
|
||||||
|
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
sdb.connectDB();
|
||||||
|
|
||||||
|
Map data=sdb.getScheduler(Integer.parseInt(scheduler_id));
|
||||||
|
|
||||||
|
|
||||||
|
super.categoryfields.clear();
|
||||||
|
super.categoryfields.putAll(data);
|
||||||
|
|
||||||
|
if(data.get("name")!=null){
|
||||||
|
super.categoryfields.put("title",data.get("name"));
|
||||||
|
super.rtn=(String)data.get("name");
|
||||||
|
}
|
||||||
|
|
||||||
|
sdb.closeDB();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,258 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.apache.lucene.analysis.Analyzer;
|
||||||
|
import org.apache.lucene.analysis.standard.StandardAnalyzer;
|
||||||
|
import org.apache.lucene.document.DateTools;
|
||||||
|
import org.apache.lucene.document.Document;
|
||||||
|
import org.apache.lucene.document.Field;
|
||||||
|
import org.apache.lucene.index.IndexReader;
|
||||||
|
import org.apache.lucene.index.IndexWriter;
|
||||||
|
import org.apache.lucene.index.Term;
|
||||||
|
import org.apache.lucene.index.TermEnum;
|
||||||
|
import org.apache.lucene.queryParser.QueryParser;
|
||||||
|
import org.apache.lucene.search.Hits;
|
||||||
|
import org.apache.lucene.search.IndexSearcher;
|
||||||
|
import org.apache.lucene.search.Query;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.vo.ValueObject;
|
||||||
|
|
||||||
|
|
||||||
|
public class SearchSession {
|
||||||
|
|
||||||
|
|
||||||
|
//private IndexWriter index;
|
||||||
|
//private IndexReader ir;
|
||||||
|
//private IndexSearcher searcher;
|
||||||
|
private Logger log = LogManager.getLogger(SearchSession.class.getName());
|
||||||
|
private int maxpage = 1000;
|
||||||
|
private MyIndexer myin;
|
||||||
|
|
||||||
|
public SearchSession(MyIndexer myin){
|
||||||
|
this.myin=myin;
|
||||||
|
}
|
||||||
|
//public SearchSession(IndexWriter index,IndexReader ir){
|
||||||
|
// this.index=index;
|
||||||
|
// this.ir=ir;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//public SearchSession(IndexSearcher searcher) {
|
||||||
|
// this.searcher=searcher;
|
||||||
|
//}
|
||||||
|
|
||||||
|
public void setMaxPerPage(int mp){
|
||||||
|
this.maxpage=mp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
public synchronized void addUpdate(long id, String content, Map fields) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
if(this.ir==null || this.index==null) throw new Exception("IndexWriter or IndexReader is empty");
|
||||||
|
|
||||||
|
Term termid=new Term("id", ""+id);
|
||||||
|
TermEnum uidIter = ir.terms(termid);
|
||||||
|
Document doc=RecordDocument.Document(content, id, fields);
|
||||||
|
|
||||||
|
doc.add(new Field("updated",
|
||||||
|
DateTools.timeToString(new Date().getTime(), DateTools.Resolution.MINUTE),
|
||||||
|
Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
|
||||||
|
if(uidIter.next()){
|
||||||
|
index.updateDocument(termid, doc);
|
||||||
|
//update
|
||||||
|
}else{
|
||||||
|
doc.add(new Field("added",
|
||||||
|
DateTools.timeToString(new Date().getTime(), DateTools.Resolution.MINUTE),
|
||||||
|
Field.Store.YES, Field.Index.UN_TOKENIZED));
|
||||||
|
index.addDocument(doc);
|
||||||
|
//add
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public final static int ACTION_INDEX=1;
|
||||||
|
public final static int ACTION_DELETE=2;
|
||||||
|
public final static int ACTION_OPTIMIZE=3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the one method for indexing and deleting because it should be synchronized, while doing this operation index will be locked.
|
||||||
|
*
|
||||||
|
* @param actiontype
|
||||||
|
* @param id
|
||||||
|
* @param content
|
||||||
|
* @param fields
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public synchronized void action(int actiontype,SearchTokenCollector ctc, String ticker) throws Exception {
|
||||||
|
|
||||||
|
synchronized (this) {
|
||||||
|
//System.out.println("action started:id"+id);
|
||||||
|
log.debug("action() invoked");
|
||||||
|
IndexReader ir=myin.getIndexReader();
|
||||||
|
IndexWriter index=myin.getIndexWriter();
|
||||||
|
try{
|
||||||
|
|
||||||
|
if(actiontype==ACTION_INDEX){
|
||||||
|
try{
|
||||||
|
ctc.processTextTokens(ticker);
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new Exception("Error while processing at ticker:"+ticker+" Msg:"+e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
if(ctc.getString()!=null){
|
||||||
|
//candidate with this id already existing
|
||||||
|
String content=ctc.getString();
|
||||||
|
|
||||||
|
Map cfields=ctc.getCategoryFields();
|
||||||
|
|
||||||
|
log.debug("cfields:"+cfields);
|
||||||
|
log.debug("content:"+content);
|
||||||
|
|
||||||
|
Term termid=new Term("id", ""+ticker);
|
||||||
|
TermEnum uidIter = ir.terms(termid);
|
||||||
|
Document doc=RecordDocument.Document(content, ticker, cfields);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
doc.add(new Field("updated",
|
||||||
|
DateTools.timeToString(new Date().getTime(), DateTools.Resolution.DAY),
|
||||||
|
Field.Store.YES, Field.Index.TOKENIZED));
|
||||||
|
|
||||||
|
|
||||||
|
//in-case of additional fields to be added to the index.
|
||||||
|
for(Iterator i=ctc.getAdditionalFields().iterator();i.hasNext();){
|
||||||
|
ValueObject v=(ValueObject)i.next();
|
||||||
|
if(v.getKey()!=null && !v.getKey().equals("") && v.getValue()!=null && !v.getValue().equals(""))
|
||||||
|
doc.add(new Field(v.getKey(), v.getValue(), Field.Store.YES, Field.Index.TOKENIZED));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uidIter.next()){
|
||||||
|
log.debug("updating document");
|
||||||
|
index.updateDocument(termid, doc);
|
||||||
|
//update
|
||||||
|
}else{
|
||||||
|
doc.add(new Field("added",
|
||||||
|
DateTools.timeToString(new Date().getTime(), DateTools.Resolution.DAY),
|
||||||
|
Field.Store.YES, Field.Index.TOKENIZED));
|
||||||
|
index.addDocument(doc);
|
||||||
|
//add
|
||||||
|
log.debug("adding document");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}else{
|
||||||
|
throw new Exception("No content collected at id:"+ticker+" Msg:");
|
||||||
|
}
|
||||||
|
|
||||||
|
}else if(actiontype==ACTION_DELETE){
|
||||||
|
|
||||||
|
if(ir==null || index==null) throw new Exception("IndexWriter or IndexReader is empty");
|
||||||
|
|
||||||
|
Term termid=new Term("id", ""+ticker);
|
||||||
|
TermEnum uidIter = ir.terms(termid);
|
||||||
|
|
||||||
|
if(uidIter.next()){
|
||||||
|
index.deleteDocuments(termid);
|
||||||
|
//update
|
||||||
|
log.debug("deleting document");
|
||||||
|
}
|
||||||
|
}else if(actiontype==ACTION_OPTIMIZE){
|
||||||
|
log.debug("optimizing indexwriter");
|
||||||
|
index.optimize();
|
||||||
|
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
|
||||||
|
//throw e;
|
||||||
|
throw new Exception("Error at id:"+ticker+" Msg:"+e.getMessage());
|
||||||
|
}finally{
|
||||||
|
|
||||||
|
ir.close();
|
||||||
|
index.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
//System.out.println("action ended:id"+id+" ********");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private int totalHits=0;
|
||||||
|
|
||||||
|
public int getTotalHits(){
|
||||||
|
return this.totalHits;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector results(String querystring /*, Session session */, int startindex ) throws Exception{
|
||||||
|
IndexSearcher searcher=this.myin.getIndexSearcher();
|
||||||
|
Vector rtn=null;
|
||||||
|
try{
|
||||||
|
|
||||||
|
|
||||||
|
Analyzer analyzer = new StandardAnalyzer();
|
||||||
|
QueryParser qp = new QueryParser("content", analyzer);
|
||||||
|
qp.setDefaultOperator(QueryParser.AND_OPERATOR);
|
||||||
|
Query query = qp.parse(querystring);
|
||||||
|
//Query query = QueryParser.parse(queryString, "contents", analyzer);
|
||||||
|
|
||||||
|
Hits hits = searcher.search(query);
|
||||||
|
this.totalHits=hits.length();
|
||||||
|
//System.out.println("hits legnth:"+hits.length());
|
||||||
|
if (hits.length() == 0) {
|
||||||
|
|
||||||
|
// System.out.println("SearchSession: no result found"+new Date());
|
||||||
|
|
||||||
|
}else{
|
||||||
|
rtn=new Vector();
|
||||||
|
|
||||||
|
int end=((startindex+maxpage)<=hits.length())?startindex+maxpage: hits.length();
|
||||||
|
|
||||||
|
|
||||||
|
for (int i = startindex; i < end ; i++) { // for each element
|
||||||
|
Document doc = hits.doc(i); //get the next document
|
||||||
|
//String highlighting=extractFragment(doc, query);
|
||||||
|
//LuceneResultItem li= new LuceneResultItem();
|
||||||
|
//li.setHtext(highlighting);
|
||||||
|
//try{
|
||||||
|
// li.setId(Long.parseLong(doc.get("id")));
|
||||||
|
//}catch(Exception e){}
|
||||||
|
//li.setScore(hits.score(i));
|
||||||
|
rtn.add(doc.get("id"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
searcher.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.vo.ValueObject;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class SearchTokenCollector {
|
||||||
|
|
||||||
|
protected String rtn="";
|
||||||
|
protected HashMap categoryfields=new HashMap();
|
||||||
|
protected Vector additionalField=new Vector();
|
||||||
|
|
||||||
|
private String tablename=null;
|
||||||
|
|
||||||
|
public SearchTokenCollector(String tablename){
|
||||||
|
this.tablename=tablename;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTablename(){return this.tablename;}
|
||||||
|
|
||||||
|
protected String collectTokens(Map data) throws Exception {
|
||||||
|
String rtn="";
|
||||||
|
if(data!=null){
|
||||||
|
for(Iterator i=data.keySet().iterator();i.hasNext();){
|
||||||
|
String key=(String)i.next();
|
||||||
|
rtn+=(data.get(key)!=null)?" "+key+":"+data.get(key).toString():" ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract void processTextTokens(String ticker) throws Exception;
|
||||||
|
|
||||||
|
public String getString(){
|
||||||
|
return this.rtn;
|
||||||
|
}
|
||||||
|
public Map getCategoryFields(){
|
||||||
|
return this.categoryfields;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected void ignoreFields(Map data, String keys){
|
||||||
|
StringTokenizer st= new StringTokenizer(keys,",");
|
||||||
|
while(st.hasMoreTokens()){
|
||||||
|
String key=st.nextToken();
|
||||||
|
if(data.get(key)!=null){
|
||||||
|
data.remove(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Map getCategoryFields(Map data, Map datamap){
|
||||||
|
HashMap rtn=new HashMap();
|
||||||
|
for(Iterator i=datamap.keySet().iterator();i.hasNext();){
|
||||||
|
String key=(String)i.next();
|
||||||
|
if(data.get(key)!=null){
|
||||||
|
rtn.put(datamap.get(key), data.get(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addFields(String fieldname,String fieldvalue){
|
||||||
|
ValueObject vo=new ValueObject();
|
||||||
|
vo.setKey(fieldname);
|
||||||
|
vo.setValue(fieldvalue);
|
||||||
|
additionalField.add(vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector getAdditionalFields(){
|
||||||
|
return additionalField;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class TickerIndexRecord {
|
||||||
|
|
||||||
|
private String ticker;
|
||||||
|
private String tablename;
|
||||||
|
|
||||||
|
private int action;
|
||||||
|
|
||||||
|
|
||||||
|
public int getAction() {
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
public void setAction(int action) {
|
||||||
|
this.action = action;
|
||||||
|
}
|
||||||
|
public String getTablename() {
|
||||||
|
return tablename;
|
||||||
|
}
|
||||||
|
public void setTablename(String tablename) {
|
||||||
|
this.tablename = tablename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTicker() {
|
||||||
|
return ticker;
|
||||||
|
}
|
||||||
|
public void setTicker(String ticker) {
|
||||||
|
this.ticker = ticker;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean equals(Object oth){
|
||||||
|
TickerIndexRecord other=(TickerIndexRecord)oth;
|
||||||
|
if(this.getTablename().equals(other.getTablename()) && this.getTicker()==other.getTicker()){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.lucene;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class TokenCollectorFactory {
|
||||||
|
private TokenCollectorFactory(){}
|
||||||
|
|
||||||
|
public static SearchTokenCollector getTokenCollector(TickerIndexRecord uio ){
|
||||||
|
try {
|
||||||
|
if(uio.getTablename().equals(LuceneCrawler.INDEX_TABLE_SECURITY)){
|
||||||
|
return new MarketSecurityCollector(uio.getTablename());
|
||||||
|
//return null;
|
||||||
|
}
|
||||||
|
if(uio.getTablename().equals(LuceneCrawler.INDEX_TABLE_CONTRACT)){
|
||||||
|
return new MarketContractCollector(uio.getTablename());
|
||||||
|
//return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uio.getTablename().equals(LuceneCrawler.INDEX_TABLE_COMMODITY)){
|
||||||
|
return new MarketCommodityCollector(uio.getTablename());
|
||||||
|
//return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(uio.getTablename().equals(LuceneCrawler.INDEX_TABLE_FUNDAMENTAL_TICKR)){
|
||||||
|
return new FundamentalTickersCollector(uio.getTablename());
|
||||||
|
//return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uio.getTablename().equals(LuceneCrawler.INDEX_SCHEDULER)){
|
||||||
|
return new SchedulerTokenCollector(uio.getTablename());
|
||||||
|
//return null;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,604 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.p2p;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import javax.servlet.ServletConfig;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
|
||||||
|
import net.jxta.discovery.DiscoveryService;
|
||||||
|
import net.jxta.pipe.InputPipe;
|
||||||
|
import net.jxta.protocol.PeerAdvertisement;
|
||||||
|
import net.jxta.protocol.PipeAdvertisement;
|
||||||
|
|
||||||
|
import org.apache.commons.digester.Digester;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fe.io.peer.PeerClient;
|
||||||
|
import com.fe.io.server.ServerScheduler;
|
||||||
|
import com.fourelementscapital.db.RFunctionDB;
|
||||||
|
import com.fourelementscapital.db.SchedulerDB;
|
||||||
|
import com.fourelementscapital.db.SuperDB;
|
||||||
|
import com.fourelementscapital.db.UtilDB;
|
||||||
|
import com.fourelementscapital.db.vo.PeerPackage;
|
||||||
|
import com.fourelementscapital.scheduler.balance.ExecutingQueueCleaner;
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
import com.fourelementscapital.scheduler.group.RScriptScheduledTask;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.MessageBean;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.P2PAdvertisement;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.P2PService;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.listener.IncomingMessage;
|
||||||
|
|
||||||
|
public class P2PServiceServlet extends HttpServlet {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static Thread jxtaInpThread=null;
|
||||||
|
private static Thread jxtaInpHelperThread=null;
|
||||||
|
private InputPipe inputPipe=null;
|
||||||
|
private static volatile boolean pipspin;
|
||||||
|
private static volatile boolean pipspinhelper;
|
||||||
|
private Timer timer=null;
|
||||||
|
private Logger log = LogManager.getLogger(P2PServiceServlet.class.getName());
|
||||||
|
public static final String helper_prefix="_helper";
|
||||||
|
private static String defaultP2PCache=""; // addition because there is a possibility that .cache folder cause an error when restarting .. bug when restarting (20140411)
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(ServletConfig servletConfig ) throws ServletException {
|
||||||
|
super.init(servletConfig);
|
||||||
|
start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void print(String pr) {
|
||||||
|
System.out.println("P2PServiceServlet:"+pr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start() {
|
||||||
|
P2PService.removeCache(); // for the server
|
||||||
|
P2PService.setPeerStarted();
|
||||||
|
updatePeerName();
|
||||||
|
print("Peer updated");
|
||||||
|
startJxta();
|
||||||
|
print("starteed Jxta");
|
||||||
|
|
||||||
|
try {
|
||||||
|
capturePackageVersions();
|
||||||
|
} catch (Exception e1) {
|
||||||
|
|
||||||
|
log.error("!!!!! Error while capturing package information...");
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
if(Config.getString("p2p.ignorejri")!=null && Config.getString("p2p.ignorejri").equalsIgnoreCase("true")){}else{
|
||||||
|
print("Before capturing r version");
|
||||||
|
RScriptScheduledTask.getRVersion();
|
||||||
|
}
|
||||||
|
print("end of start");
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("STARTUP ERROR:rJava support is not available on this peer");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void startHelper() {
|
||||||
|
P2PService.removeCache(); //the .cache forlder will be locked when peer_helper is started
|
||||||
|
P2PService.setPeerStarted();
|
||||||
|
startHelperJxta();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static boolean isJxtaInpThreadRunning(){
|
||||||
|
if(jxtaInpThread!=null && jxtaInpThread.isAlive())
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startJxta(){
|
||||||
|
try {
|
||||||
|
|
||||||
|
System.out.println("starting network....................................");
|
||||||
|
//System.out.println("OS:"+System.getProperty("os.name"));
|
||||||
|
|
||||||
|
java.util.logging.Logger.getLogger("net.jxta").setLevel(Level.SEVERE);
|
||||||
|
|
||||||
|
//NetworkManager manager=P2PService.getManager();
|
||||||
|
//PeerGroup netPeerGroup = manager.getNetPeerGroup();
|
||||||
|
// get the discovery service
|
||||||
|
DiscoveryService discovery = P2PService.getDiscoveryService();
|
||||||
|
//PipeService pipeService = netPeerGroup.getPipeService();
|
||||||
|
|
||||||
|
long waittime = 10 * 1000L;
|
||||||
|
|
||||||
|
String computername=P2PService.getComputerName();
|
||||||
|
|
||||||
|
P2PAdvertisement ad=new P2PAdvertisement();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PeerAdvertisement mdadv = ad.getPeerAdvertisement(computername,P2PService.getPeerGroup());
|
||||||
|
|
||||||
|
discovery.publish(mdadv,DiscoveryService.NO_EXPIRATION,DiscoveryService.NO_EXPIRATION);
|
||||||
|
discovery.remotePublish(mdadv,DiscoveryService.NO_EXPIRATION);
|
||||||
|
|
||||||
|
|
||||||
|
jxtaInpThread=new Thread("Input poll") {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(P2PServiceServlet.class.getName());
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
log.debug("jxtaInpThread run()11 ");
|
||||||
|
|
||||||
|
int sleepy=3000*60;
|
||||||
|
String computername=P2PService.getComputerName();
|
||||||
|
log.debug("computer name :"+computername);
|
||||||
|
P2PAdvertisement ad=new P2PAdvertisement();
|
||||||
|
log.debug("ad :"+ad);
|
||||||
|
PipeAdvertisement pipeAdv = ad.getPipeAdvertisement(computername,P2PService.getPeerGroup());
|
||||||
|
log.debug("creating input pipe advertisement ");
|
||||||
|
try{
|
||||||
|
inputPipe = P2PService.getPipeService().createInputPipe(pipeAdv, new IncomingMessage(null) );
|
||||||
|
//inputPipe = P2PService.getPipeService().createInputPipe(pipeAdv );
|
||||||
|
log.debug("waiting input pipe");
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
System.out.println("~~~~~~~~~~~~~FATAL Error P2PServiceServlet2$.run() on inputpipe service................");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
P2PServiceServlet.pipspin=true;
|
||||||
|
while(P2PServiceServlet.pipspin) {
|
||||||
|
try {
|
||||||
|
sleep(sleepy);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {log.error("Waiting thread intrupted...........");}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
jxtaInpThread.start();
|
||||||
|
log.debug("jxtaInpThread started ");
|
||||||
|
TimerTask tt=new TimerTask() {
|
||||||
|
public void run() {
|
||||||
|
// System.out.format("Time's up!%n");
|
||||||
|
if(!jxtaInpThread.isAlive()){
|
||||||
|
//Logger log=Logger.getLogger(P2PServiceServlet.class);
|
||||||
|
//log.error("jxtaInpThread is not alive restarting the tread");
|
||||||
|
jxtaInpThread.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//checks every 1 minute to see if a thread still running....
|
||||||
|
long freq=90*1000;
|
||||||
|
timer = new Timer();
|
||||||
|
timer.scheduleAtFixedRate(tt,freq, freq);
|
||||||
|
|
||||||
|
|
||||||
|
TimerTask dbCleaner=new TimerTask() {
|
||||||
|
Logger log = LogManager.getLogger(P2PServiceServlet.class.getName());
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
int db_close_timeout = SuperDB.getDbCloseTimeout();
|
||||||
|
|
||||||
|
UtilDB udb=UtilDB.getUtilDB4SQLServer();
|
||||||
|
try{
|
||||||
|
|
||||||
|
SuperDB.killConnections(db_close_timeout);
|
||||||
|
Thread.sleep(300);
|
||||||
|
udb.connectDB(getUtilDBName());
|
||||||
|
ArrayList al=udb.showOldConnections(db_close_timeout,P2PService.getComputerName());
|
||||||
|
if(al != null && al.size()>0){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log.error("~~~~~~Killing "+al.size()+" physical connections in database after "+db_close_timeout+" minutes");
|
||||||
|
log.error("===While killing the following found left unclosed==");
|
||||||
|
log.error(SchedulerDB.collectStack4All());
|
||||||
|
log.error("=====");
|
||||||
|
|
||||||
|
|
||||||
|
udb.killConnections(al);
|
||||||
|
}
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}finally{
|
||||||
|
try{
|
||||||
|
udb.closeDB();
|
||||||
|
}catch(Exception e){}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//checks every 5 minute to see if a thread still running....
|
||||||
|
long fivemins=60*1000*5;
|
||||||
|
Timer dbtimer = new Timer();
|
||||||
|
dbtimer.scheduleAtFixedRate(dbCleaner,fivemins, fivemins);
|
||||||
|
|
||||||
|
String tname="jett_thread_"+(new Date().getTime()/1000);
|
||||||
|
|
||||||
|
|
||||||
|
if(Config.getValue("load_balancing_server")!=null && Config.getValue("load_balancing_server").equals(P2PService.getComputerName())){
|
||||||
|
ExecutingQueueCleaner.clean(); //clean up the dead tasks in every 30 second.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* launching NIO server
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
if(Config.getValue("nio.server.mode")!=null && Config.getValue("nio.server.mode").trim().equalsIgnoreCase("true") &&
|
||||||
|
Config.getValue("nio.server.port")!=null && !Config.getValue("nio.server.port").trim().equals("")
|
||||||
|
){
|
||||||
|
int port=1818;
|
||||||
|
try{
|
||||||
|
port=Integer.parseInt(Config.getValue("nio.server.port"));
|
||||||
|
}catch(Exception e){}
|
||||||
|
Thread t=new Thread(new ServerScheduler(port),tname);
|
||||||
|
t.start();
|
||||||
|
System.out.println("--->ServerScheduler starting....in port:"+port);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if(Config.getValue("nio.server.address")!=null && !Config.getValue("nio.server.address").trim().equals("") &&
|
||||||
|
Config.getValue("nio.server.port")!=null && !Config.getValue("nio.server.port").trim().equals("")
|
||||||
|
){
|
||||||
|
System.out.println("--->PeerScheduler will start ...in IP:"+Config.getValue("nio.server.address")+" port:"+Config.getValue("nio.server.port"));
|
||||||
|
|
||||||
|
int port=1818;
|
||||||
|
String server=Config.getValue("nio.server.address");
|
||||||
|
try{
|
||||||
|
port=Integer.parseInt(Config.getValue("nio.server.port"));
|
||||||
|
}catch(Exception e){}
|
||||||
|
log.debug("server:"+server+" port:"+port+" tname:"+tname);
|
||||||
|
Thread t=new Thread(new PeerClient(server, port),tname);
|
||||||
|
log.debug("t:"+t);
|
||||||
|
t.start();
|
||||||
|
log.debug("started:");
|
||||||
|
//System.out.println("<---PeerScheduler starting...., "+server+":"+port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void startHelperJxta(){
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
java.util.logging.Logger.getLogger("net.jxta").setLevel(Level.SEVERE);
|
||||||
|
|
||||||
|
DiscoveryService discovery = P2PService.getDiscoveryService();
|
||||||
|
|
||||||
|
|
||||||
|
long waittime = 10 * 1000L;
|
||||||
|
|
||||||
|
String computername=P2PService.getComputerName();
|
||||||
|
|
||||||
|
P2PAdvertisement ad=new P2PAdvertisement();
|
||||||
|
|
||||||
|
|
||||||
|
PeerAdvertisement mdadv = ad.getPeerAdvertisement(computername+helper_prefix,P2PService.getPeerGroup());
|
||||||
|
|
||||||
|
discovery.publish(mdadv,DiscoveryService.NO_EXPIRATION,DiscoveryService.NO_EXPIRATION);
|
||||||
|
discovery.remotePublish(mdadv,DiscoveryService.NO_EXPIRATION);
|
||||||
|
|
||||||
|
|
||||||
|
jxtaInpThread=new Thread("Input poll") {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(P2PServiceServlet.class.getName());
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
int sleepy=3000*60;
|
||||||
|
|
||||||
|
String computername=P2PService.getComputerName();
|
||||||
|
P2PAdvertisement ad=new P2PAdvertisement();
|
||||||
|
PipeAdvertisement pipeAdv = ad.getPipeAdvertisement(computername+helper_prefix,P2PService.getPeerGroup());
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
inputPipe = P2PService.getPipeService().createInputPipe(pipeAdv, new IncomingMessage(null) );
|
||||||
|
//inputPipe = P2PService.getPipeService().createInputPipe(pipeAdv );
|
||||||
|
log.debug("waiting input pipe");
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
System.out.println("~~~~~~~~~~~~~FATAL Error P2PServiceServlet2$.run() on inputpipe service................");
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
P2PServiceServlet.pipspin=true;
|
||||||
|
while(P2PServiceServlet.pipspin) {
|
||||||
|
try {
|
||||||
|
sleep(sleepy);
|
||||||
|
}
|
||||||
|
catch(InterruptedException e) {log.error("Waiting thread intrupted...........");}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
jxtaInpThread.start();
|
||||||
|
|
||||||
|
TimerTask tt=new TimerTask() {
|
||||||
|
public void run() {
|
||||||
|
// System.out.format("Time's up!%n");
|
||||||
|
if(!jxtaInpThread.isAlive()){
|
||||||
|
//Logger log=Logger.getLogger(P2PServiceServlet.class);
|
||||||
|
//log.error("jxtaInpThread is not alive restarting the tread");
|
||||||
|
jxtaInpThread.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//checks every 1 minute to see if a thread still running....
|
||||||
|
long freq=90*1000;
|
||||||
|
timer = new Timer();
|
||||||
|
timer.scheduleAtFixedRate(tt,freq, freq);
|
||||||
|
|
||||||
|
|
||||||
|
TimerTask dbCleaner=new TimerTask() {
|
||||||
|
Logger log = LogManager.getLogger(P2PServiceServlet.class.getName());
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
int db_close_timeout = SuperDB.getDbCloseTimeout();
|
||||||
|
|
||||||
|
UtilDB udb=UtilDB.getUtilDB4SQLServer();
|
||||||
|
try{
|
||||||
|
|
||||||
|
SuperDB.killConnections(db_close_timeout);
|
||||||
|
Thread.sleep(300);
|
||||||
|
udb.connectDB(getUtilDBName());
|
||||||
|
ArrayList al=udb.showOldConnections(db_close_timeout,P2PService.getComputerName());
|
||||||
|
if(al != null && al.size()>0){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log.error("~~~~~~Killing "+al.size()+" physical connections in database after "+db_close_timeout+" minutes");
|
||||||
|
log.error("===While killing the following found left unclosed==");
|
||||||
|
log.error(SchedulerDB.collectStack4All());
|
||||||
|
log.error("=====");
|
||||||
|
|
||||||
|
|
||||||
|
udb.killConnections(al);
|
||||||
|
}
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
|
||||||
|
|
||||||
|
}finally{
|
||||||
|
try{
|
||||||
|
udb.closeDB();
|
||||||
|
}catch(Exception e){}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//checks every 5 minute to see if a thread still running....
|
||||||
|
long fivemins=60*1000*5;
|
||||||
|
Timer dbtimer = new Timer();
|
||||||
|
dbtimer.scheduleAtFixedRate(dbCleaner,fivemins, fivemins);
|
||||||
|
|
||||||
|
|
||||||
|
if(Config.getValue("load_balancing_server")!=null && Config.getValue("load_balancing_server").equals(P2PService.getComputerName())){
|
||||||
|
ExecutingQueueCleaner.clean(); //clean up the dead tasks in every 30 second.
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private static MessageBean parseMessage(String msg) throws Exception {
|
||||||
|
|
||||||
|
Digester digester = new Digester();
|
||||||
|
digester.setValidating(false);
|
||||||
|
|
||||||
|
digester.addObjectCreate("message", MessageBean.class);
|
||||||
|
digester.addBeanPropertySetter("message/type");
|
||||||
|
digester.addBeanPropertySetter("message/command");
|
||||||
|
digester.addBeanPropertySetter("message/sender");
|
||||||
|
digester.addBeanPropertySetter("message/reply");
|
||||||
|
MessageBean ve= (MessageBean) digester.parse(new StringReader(msg));
|
||||||
|
return ve;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updatePeerName() {
|
||||||
|
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
|
||||||
|
try{
|
||||||
|
String peername=P2PService.getComputerName();
|
||||||
|
sdb.connectDB();
|
||||||
|
sdb.updatePeersList(peername);
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}finally{
|
||||||
|
try{
|
||||||
|
sdb.closeDB();
|
||||||
|
}catch(Exception e1){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void capturePackageVersions() throws Exception {
|
||||||
|
|
||||||
|
RFunctionDB rfdb=RFunctionDB .getRFunctionDB();
|
||||||
|
int loc=0;
|
||||||
|
try {
|
||||||
|
|
||||||
|
String peername=P2PService.getComputerName();
|
||||||
|
rfdb.connectDB();
|
||||||
|
loc=100;
|
||||||
|
|
||||||
|
LinkedHashMap<String , String> p=new LinkedHashMap<String, String>();
|
||||||
|
String rlib_path=System.getenv("R_HOME");
|
||||||
|
rlib_path+=rlib_path.endsWith(File.separator)?"library":File.separator+"library";
|
||||||
|
File[] libs=new File(rlib_path).listFiles();
|
||||||
|
int count=0;
|
||||||
|
ArrayList plist=new ArrayList();
|
||||||
|
loc=200;
|
||||||
|
for(int i=0;i<libs.length;i++){
|
||||||
|
File lib=new File(libs[i].getPath()+File.separator+"DESCRIPTION");
|
||||||
|
loc=300;
|
||||||
|
if(lib.exists()){
|
||||||
|
loc=400;
|
||||||
|
try{
|
||||||
|
StringWriter stringWriter = new StringWriter();
|
||||||
|
IOUtils.copy(new FileInputStream(lib), stringWriter);
|
||||||
|
StringTokenizer st=new StringTokenizer(stringWriter.toString(),"\n\r");
|
||||||
|
PeerPackage pp=new PeerPackage();
|
||||||
|
pp.setPackagename(libs[i].getName());
|
||||||
|
pp.setLastchecked(new Date());
|
||||||
|
loc=500;
|
||||||
|
while(st.hasMoreTokens()){
|
||||||
|
String line=st.nextToken();
|
||||||
|
if(line.startsWith("Version:") && line.split(":").length>1){
|
||||||
|
pp.setVersion(line.split(":")[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plist.add(pp);
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Error while getting info of package "+libs[i].getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rfdb.updatePeerPackage(peername, plist);
|
||||||
|
log.debug("peername:"+peername+" plist:"+plist);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("Error ,MSG:"+e.getMessage()+" loc:"+loc);
|
||||||
|
//e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}finally{
|
||||||
|
rfdb.closeDB();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
public void pipeMsgEvent(PipeMsgEvent event) {
|
||||||
|
|
||||||
|
Message msg;
|
||||||
|
try {
|
||||||
|
// Obtain the message from the event
|
||||||
|
//System.out.println("pipeMsgEvent() called");
|
||||||
|
msg = event.getMessage();
|
||||||
|
|
||||||
|
|
||||||
|
if (msg == null) {
|
||||||
|
System.out.println("Received an empty message");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get all the message elements
|
||||||
|
Message.ElementIterator en = msg.getMessageElements();
|
||||||
|
|
||||||
|
if (!en.hasNext()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// get the message element in the name space PipeClient.MESSAGE_NAME_SPACE
|
||||||
|
MessageElement msgElement = msg.getMessageElement(null, P2PService.MESSAGE_NAME_SPACE);
|
||||||
|
P2PService.messages.add(msgElement.toString());
|
||||||
|
String message=msgElement.toString();
|
||||||
|
// Get message
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
if(message.startsWith("[REPLYTO:")){
|
||||||
|
String replytoPart=message.substring(0,"]");
|
||||||
|
PeerGroup netPeerGroup = P2PService.getPeerGroup();
|
||||||
|
PipeAdvertisement pipeAdv = new P2PAdvertisement().getPipeAdvertisement("Renee",netPeerGroup);
|
||||||
|
//OutgoingMessageCompose omc=new OutgoingMessageCompose(){
|
||||||
|
//};
|
||||||
|
OutgoingMessage ogM=new OutgoingMessage(null,"Your question will be answereed soon");
|
||||||
|
PipeService pipeService = P2PService.getPipeService();
|
||||||
|
try{
|
||||||
|
pipeService.createOutputPipe(pipeAdv,ogM);
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
if (msgElement.toString() == null) {
|
||||||
|
System.out.println("null msg received");
|
||||||
|
} else {
|
||||||
|
Date date = new Date(System.currentTimeMillis());
|
||||||
|
System.out.println("Message received at :" + date.toString());
|
||||||
|
System.out.println("Message created at :" + msgElement.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
jxtaInpThread.interrupt();
|
||||||
|
P2PServiceServlet.pipspin=false;
|
||||||
|
if(timer!=null){
|
||||||
|
timer.cancel();
|
||||||
|
}
|
||||||
|
P2PService.stopNetwork();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getUtilDBName() {
|
||||||
|
//String db = "master";
|
||||||
|
//if ("mariadb".equalsIgnoreCase( SuperDB.getDbType() )) {
|
||||||
|
// db = "mysql";
|
||||||
|
//}
|
||||||
|
String db = "mysql";
|
||||||
|
return db;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 723 B |
@@ -0,0 +1,148 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.p2p.websocket;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.CharBuffer;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.catalina.websocket.MessageInbound;
|
||||||
|
import org.apache.catalina.websocket.StreamInbound;
|
||||||
|
import org.apache.catalina.websocket.WebSocketServlet;
|
||||||
|
import org.apache.catalina.websocket.WsOutbound;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.balance.LoadBalancingQueue;
|
||||||
|
import com.fourelementscapital.scheduler.rscript.RScript;
|
||||||
|
import com.fourelementscapital.scheduler.rscript.RScriptAsyncWebsocket;
|
||||||
|
|
||||||
|
|
||||||
|
public class TomcatWSExecuteRService extends WebSocketServlet {
|
||||||
|
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(TomcatWSExecuteRService.class.getName());
|
||||||
|
|
||||||
|
private final static Set<ChatMessageInbound> connections = new CopyOnWriteArraySet<ChatMessageInbound>();
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected StreamInbound createWebSocketInbound(String subProtocol, HttpServletRequest request) {
|
||||||
|
//System.out.println("TomcatWSServer.createWebSocketInbound()");
|
||||||
|
return new ChatMessageInbound(request.getRemoteHost());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private final class ChatMessageInbound extends MessageInbound {
|
||||||
|
|
||||||
|
private String ip;
|
||||||
|
public ChatMessageInbound(String ip) {
|
||||||
|
this.ip=ip;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onOpen(WsOutbound outbound) {
|
||||||
|
connections.add(this);
|
||||||
|
//System.out.println("TomcatWSServer.onOpen()");
|
||||||
|
log.debug("connected...");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onClose(int status) {
|
||||||
|
connections.remove(this);
|
||||||
|
log.debug("closed...");
|
||||||
|
//System.out.println("TomcatWSServer.onClose()");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onBinaryMessage(ByteBuffer message) throws IOException {
|
||||||
|
throw new UnsupportedOperationException("Binary message not supported.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onTextMessage(CharBuffer message) throws IOException {
|
||||||
|
// Never trust the client
|
||||||
|
//String filteredMessage = String.format("%s: %s", nickname, HTMLFilter.filter(message.toString()));
|
||||||
|
//broadcast(message.toString());
|
||||||
|
//log.debug("msg received:"+message);
|
||||||
|
String s=message.toString();
|
||||||
|
|
||||||
|
Pattern pattern = Pattern.compile("^(.*?)~~(.*?)~~(.*?)$");
|
||||||
|
Matcher matcher = pattern.matcher(s);
|
||||||
|
|
||||||
|
//String id=s.replaceAll("^(.*?)~~(.*?)~~(.*?)$", "$1");
|
||||||
|
//String engine=s.replaceAll("^(.*?)~~(.*?)~~(.*?)$", "$2");
|
||||||
|
//String script=s.replaceAll("^(.*?)~~(.*?)~~(.*?)$", "$3");
|
||||||
|
//System.out.println("matcher.groupCount:"+matcher.groupCount());
|
||||||
|
//System.out.println("matcher.find():"+ matcher.find());
|
||||||
|
|
||||||
|
if(matcher.find() && matcher.groupCount()>2){
|
||||||
|
|
||||||
|
//String id=s.replaceAll("^(.*?)~~(.*?)~~(.*?)$", "$1");
|
||||||
|
//String engine=s.replaceAll("^(.*?)~~(.*?)~~(.*?)$", "$2");
|
||||||
|
//String script=s.replaceAll("^(.*?)~~(.*?)~~(.*?)$", "$3");
|
||||||
|
|
||||||
|
String id=matcher.group(1);
|
||||||
|
String engine=matcher.group(2);
|
||||||
|
String script=matcher.group(3);
|
||||||
|
//System.out.println("id:"+ id+" engine:"+engine);
|
||||||
|
//System.out.println("script:"+script);
|
||||||
|
//System.out.println("host:"+this.ip);
|
||||||
|
|
||||||
|
RScript rs=new RScript();
|
||||||
|
//set unique name from the parameter
|
||||||
|
rs.setUniquename(id);
|
||||||
|
rs.setRequesthost(this.ip);
|
||||||
|
|
||||||
|
rs.setTaskuid("direct_script");
|
||||||
|
if(engine!=null && engine.equalsIgnoreCase("rserve")){
|
||||||
|
rs.setTaskuid("direct_script_unix");
|
||||||
|
}
|
||||||
|
|
||||||
|
rs.setScript(script);
|
||||||
|
|
||||||
|
RScriptAsyncWebsocket listener=new RScriptAsyncWebsocket(id, this);
|
||||||
|
try{
|
||||||
|
LoadBalancingQueue.getExecuteRScriptDefault().addExecuteR(rs,listener);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("error:"+e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}else{
|
||||||
|
String rtn="Script can't executed without ID or script body, format: unique-id~~script_content";
|
||||||
|
this.getWsOutbound().writeTextMessage(CharBuffer.wrap(rtn));
|
||||||
|
this.getWsOutbound().flush();
|
||||||
|
}
|
||||||
|
//System.out.println("id:"+id);
|
||||||
|
//System.out.println("script:"+script);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void broadcast(String message) {
|
||||||
|
for (ChatMessageInbound connection : connections) {
|
||||||
|
Logger log = LogManager.getLogger(TomcatWSExecuteRService.class.getName());
|
||||||
|
log.debug("# connections:"+connections.size());
|
||||||
|
log.debug("# Msg:"+message);
|
||||||
|
try {
|
||||||
|
|
||||||
|
CharBuffer buffer = CharBuffer.wrap(message);
|
||||||
|
connection.getWsOutbound().writeTextMessage(buffer);
|
||||||
|
} catch (IOException ignore) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.p2p.websocket.cmd;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
import org.apache.commons.cli.Options;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.balance.LoadBalancingQueue;
|
||||||
|
import com.fourelementscapital.scheduler.balance.executeR.LoadBalancingNewExecuteRQueue;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.websocket.CommandAbstract;
|
||||||
|
import com.fourelementscapital.scheduler.queue.QueueStack;
|
||||||
|
import com.fourelementscapital.scheduler.queue.QueueStackManager;
|
||||||
|
|
||||||
|
public class Queue extends CommandAbstract {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String executeValidCommand(CommandLine cmd, String command) {
|
||||||
|
String result="";
|
||||||
|
if(cmd.hasOption("o")){
|
||||||
|
//result="Not implemented yet";
|
||||||
|
LoadBalancingQueue leq=LoadBalancingQueue.getExecuteRScriptDefault();
|
||||||
|
if(leq instanceof LoadBalancingNewExecuteRQueue){
|
||||||
|
LoadBalancingNewExecuteRQueue leqnew=(LoadBalancingNewExecuteRQueue)leq;
|
||||||
|
try{
|
||||||
|
int q_size=leqnew.getScriptQueue().size();
|
||||||
|
int p_size=leqnew.getScriptProcessingQueue().size();
|
||||||
|
int o_size=leqnew.getAllScriptObjectsSize();
|
||||||
|
result+="Queued :"+q_size+"\n";
|
||||||
|
result+="Processing :"+p_size+"\n";
|
||||||
|
result+="Total Objects in Mem :"+o_size+"\n";
|
||||||
|
}catch(Exception e){
|
||||||
|
result+=" Error, e:"+e.getMessage();
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
result+="Current queue implementation doesn't support this feature";
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//result=showHelp();
|
||||||
|
try{
|
||||||
|
Iterator<QueueStack> qst= QueueStackManager.getAllQueueStacks().iterator();
|
||||||
|
while(qst.hasNext()){
|
||||||
|
QueueStack qs=qst.next();
|
||||||
|
result+=qs.getPeername()+":"+qs.getUid()+" -----> "+(qs.isRunning()?"Busy":"Idle")+" "+qs.getSupportedtaskuids()+"\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
if(result.equals("")){
|
||||||
|
result="No queue from peers";
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
result="Error, "+e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Options getOptions() {
|
||||||
|
Options options = new Options();
|
||||||
|
//options.addOption("s", "show", false, "Show online peers");
|
||||||
|
//options.addOption("p", "peer", true, "Show queue stack of server side - example: -q 4ecappcsg2");
|
||||||
|
options.addOption("o", "queue-objects", false, "Show number of queued and processing objects");
|
||||||
|
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getHeader() {
|
||||||
|
return "Show queue stacks and objects in the different queue in server side";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFooter() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.scheduler;
|
||||||
|
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import javax.servlet.ServletConfig;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fe.client.AdminMgmt;
|
||||||
|
import com.fe.util.PasswordService;
|
||||||
|
//import com.fe.data.BBSyncTrigger;
|
||||||
|
import com.fourelementscapital.scheduler.SchedulerEngine;
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.P2PService;
|
||||||
|
|
||||||
|
public class SchedulerInitServlet extends HttpServlet {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(SchedulerInitServlet.class.getName());
|
||||||
|
private static String serverRoot=null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void init( ServletConfig servletConfig ) throws ServletException {
|
||||||
|
|
||||||
|
//System.out.println("~~~~~~~~~~~~~~~~~~~Servlet Initialized");
|
||||||
|
|
||||||
|
try{
|
||||||
|
|
||||||
|
serverRoot=servletConfig.getServletContext().getRealPath("");
|
||||||
|
System.out.println("------Server Root:"+serverRoot);
|
||||||
|
|
||||||
|
log.debug("p2p service started ");
|
||||||
|
|
||||||
|
String bbsy=Config.getString("bloomberg_synchronization");
|
||||||
|
if(false){
|
||||||
|
if(P2PService.getComputerName().equalsIgnoreCase("4ecapsvsg5") && !servletConfig.getServletContext().getRealPath("").contains("tomcat_beta")){
|
||||||
|
throw new ServletException ("scheduler doen't support dev mode");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//in production it should be moved to below the conditions, remove this and uncomment below.
|
||||||
|
//new SchedulerEngine().startSchedulerQueue();
|
||||||
|
//new BloombergDownloadJob().scheduleDownloadQueries();
|
||||||
|
|
||||||
|
if(Config.getValue("load_balancing_server")!=null && Config.getValue("load_balancing_server").equals(P2PService.getComputerName())){
|
||||||
|
new SchedulerEngine().startSchedulerQueue();
|
||||||
|
System.out.println("------Scheduer Queue started");
|
||||||
|
|
||||||
|
|
||||||
|
//new WSServer( 10008, new Draft_17() ).start();
|
||||||
|
System.out.println("------WebSocket Server started..");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(false){
|
||||||
|
if(bbsy!=null & bbsy.equalsIgnoreCase("no")){
|
||||||
|
//under development
|
||||||
|
throw new Exception("Bloomberg Synchronization ignored, as it is not production server");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.debug("init()");
|
||||||
|
if(Config.getValue("load_balancing_server")==null){
|
||||||
|
//shouldn't build any queue.
|
||||||
|
//new SchedulerEngine().startSchedulerQueue();
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("init()1");
|
||||||
|
|
||||||
|
//new BloombergDownloadJob().scheduleDownloadQueries();
|
||||||
|
|
||||||
|
initAdminDefaultPwd();
|
||||||
|
|
||||||
|
//}catch(ServletException e1){
|
||||||
|
// throw e1;
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
log.error("####Error while scheduling bloomberg sync ERROR MSG:"+e.getMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initAdminDefaultPwd() {
|
||||||
|
try{
|
||||||
|
Properties prop=new Properties();
|
||||||
|
prop.load(new FileInputStream(AdminMgmt.DB_USER_PROPERTY_FILE));
|
||||||
|
}catch(java.io.FileNotFoundException fnf){
|
||||||
|
try{
|
||||||
|
Properties prop = new Properties();
|
||||||
|
String password=PasswordService.encrypt("admin");
|
||||||
|
prop.setProperty("admin", password);
|
||||||
|
prop.store(new FileOutputStream(AdminMgmt.DB_USER_PROPERTY_FILE), null);
|
||||||
|
}catch(Exception ex1){}
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
//e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
private void addScheduledJobs(Vector<XMLScheduledJob> jobs,String confolder,String database) throws Exception{
|
||||||
|
|
||||||
|
log.debug(" Job size:"+jobs.size());
|
||||||
|
for(XMLScheduledJob sc:jobs){
|
||||||
|
|
||||||
|
if(sc.getDaysNumber()!=-1 && sc.getWeekdayNumber()!=-1 && sc.getHourNumber()!=-1 && sc.getMinuteNumber()!=-1 ) {
|
||||||
|
sc.setConfolder(confolder);
|
||||||
|
sc.setDatabase(database);
|
||||||
|
|
||||||
|
String jobname=sc.getWeekday()+sc.getHour()+sc.getMinute()+sc.getFilename()+"_"+database;
|
||||||
|
|
||||||
|
SchedulerFactory sf=new StdSchedulerFactory();
|
||||||
|
Scheduler scheduler=sf.getScheduler();
|
||||||
|
//JobDetail holds the definition for Jobs
|
||||||
|
JobDetail jobDetail = new JobDetail(jobname, Scheduler.DEFAULT_GROUP,BloombergSyncJob.class);
|
||||||
|
jobDetail.getJobDataMap().put("job",sc);
|
||||||
|
|
||||||
|
Trigger trigger = TriggerUtils.makeWeeklyTrigger("trigger4"+jobname,sc.getWeekdayNumber(),sc.getHourNumber(),sc.getMinuteNumber());
|
||||||
|
|
||||||
|
if(scheduler.getJobDetail(jobname,Scheduler.DEFAULT_GROUP )==null){
|
||||||
|
log.debug("job "+jobname+" added to scheduler");
|
||||||
|
scheduler.scheduleJob(jobDetail, trigger );
|
||||||
|
scheduler.start();
|
||||||
|
}else{
|
||||||
|
throw new Exception("Job "+jobname+" already added to scheduler");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
public static String getAppPath(){
|
||||||
|
if(serverRoot==null){
|
||||||
|
return "c:\\tomcat\\webapps\\bldb";
|
||||||
|
}else{
|
||||||
|
return serverRoot;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.scheduler;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template parser
|
||||||
|
*/
|
||||||
|
public class TemplateParser {
|
||||||
|
|
||||||
|
private String subject=null;
|
||||||
|
|
||||||
|
private String template=null;
|
||||||
|
private Map data=null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param template template
|
||||||
|
* @param data data
|
||||||
|
*/
|
||||||
|
public TemplateParser(String template, Map data){
|
||||||
|
this.template=template;
|
||||||
|
this.data=data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(TemplateParser.class.getName());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse template, set subject
|
||||||
|
* @return message
|
||||||
|
*/
|
||||||
|
public String parseTemplate(){
|
||||||
|
|
||||||
|
|
||||||
|
String message=parseNewSubject(this.template);
|
||||||
|
|
||||||
|
message=replaceNewValues(message, this.data);
|
||||||
|
this.subject=replaceNewValues(this.subject, this.data);
|
||||||
|
|
||||||
|
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get subject
|
||||||
|
* @return subject
|
||||||
|
*/
|
||||||
|
public String getSubject(){
|
||||||
|
return this.subject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace new values
|
||||||
|
* @param template template
|
||||||
|
* @param values values
|
||||||
|
* @return template with new values
|
||||||
|
*/
|
||||||
|
protected String replaceNewValues(final String template,
|
||||||
|
final Map<String, String> values){
|
||||||
|
|
||||||
|
if(template!=null){
|
||||||
|
|
||||||
|
final StringBuffer sb = new StringBuffer();
|
||||||
|
final Pattern pattern = Pattern.compile("\\[\\[(.*?)\\]\\]", Pattern.DOTALL);
|
||||||
|
final Matcher matcher = pattern.matcher(template);
|
||||||
|
while(matcher.find()){
|
||||||
|
final String key = matcher.group(1);
|
||||||
|
final Object replacement = values.get(key);
|
||||||
|
if(replacement == null){
|
||||||
|
matcher.appendReplacement(sb, "");
|
||||||
|
}else{
|
||||||
|
//matcher.appendReplacement(sb, replacement.toString());
|
||||||
|
matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement.toString()));
|
||||||
|
}
|
||||||
|
// log.debug("key:"+key+" replacement:"+replacement);
|
||||||
|
}
|
||||||
|
//log.debug("~~~~~~~~~~~~ exiting replaceNewValues()1");
|
||||||
|
matcher.appendTail(sb);
|
||||||
|
//log.debug("~~~~~~~~~~~~ exiting replaceNewValues()2");
|
||||||
|
return sb.toString();
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
protected String parseBody(final String template){
|
||||||
|
if(template!=null){
|
||||||
|
Pattern p1 = Pattern.compile("\\{\\{body\\}\\}(.*?)\\{\\{/body\\}\\}",Pattern.DOTALL);
|
||||||
|
final Matcher matcher = p1.matcher(template);
|
||||||
|
final StringBuffer sb = new StringBuffer();
|
||||||
|
String ke1y="";
|
||||||
|
if(matcher.find()){
|
||||||
|
ke1y = matcher.group(1);
|
||||||
|
matcher.appendReplacement(sb, "");
|
||||||
|
}
|
||||||
|
matcher.appendTail(sb);
|
||||||
|
|
||||||
|
|
||||||
|
if(ke1y!=null && !ke1y.equals("")){
|
||||||
|
//ke1y = ke1y.toString().replaceAll("\\<.*?\\>", "");
|
||||||
|
//ke1y = ke1y.replaceAll("\t|\n|\r|\f", "");
|
||||||
|
//ke1y= ke1y.replace(" ", " ");
|
||||||
|
if(!ke1y.trim().equals("")){
|
||||||
|
this.body=ke1y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse new subject
|
||||||
|
* @param template template
|
||||||
|
* @return template with new subject
|
||||||
|
*/
|
||||||
|
protected String parseNewSubject(final String template){
|
||||||
|
if(template!=null){
|
||||||
|
Pattern p1 = Pattern.compile("\\{\\{subject\\}\\}(.*?)\\{\\{/subject\\}\\}",Pattern.DOTALL);
|
||||||
|
|
||||||
|
final Matcher matcher = p1.matcher(template);
|
||||||
|
final StringBuffer sb = new StringBuffer();
|
||||||
|
String ke1y="";
|
||||||
|
if(matcher.find()){
|
||||||
|
ke1y = matcher.group(1);
|
||||||
|
matcher.appendReplacement(sb, "");
|
||||||
|
}
|
||||||
|
matcher.appendTail(sb);
|
||||||
|
if(ke1y!=null && !ke1y.equals("")){
|
||||||
|
ke1y = ke1y.toString().replaceAll("\\<.*?\\>", "");
|
||||||
|
ke1y = ke1y.replaceAll("\t|\n|\r|\f", "");
|
||||||
|
ke1y= ke1y.replace(" ", " ");
|
||||||
|
if(!ke1y.trim().equals("")){
|
||||||
|
this.subject=ke1y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.scheduler;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.quartz.Job;
|
||||||
|
import org.quartz.JobExecutionContext;
|
||||||
|
import org.quartz.JobExecutionException;
|
||||||
|
|
||||||
|
|
||||||
|
public class TestJob implements Job {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(TestJob.class.getName());
|
||||||
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||||
|
//System.out.println("~~~~~~~~~~~~~~~~~~~~"+context.getJobDetail().getName());
|
||||||
|
//log.debug("Job Executed:"+context.getJobDetail().getName());
|
||||||
|
log.debug("Job Excecuted:"+context.getJobDetail().getJobDataMap().get("p1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
peer.sendtask.received=Task Received from server
|
||||||
|
peer.sendtask.noroom2execute=Task failed, no room for execution
|
||||||
|
peer.sendtask.unknown=Error occured, Msg:[error_message]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#test environment
|
||||||
|
|
||||||
|
|
||||||
|
alert.subject=Slow moving of Scheduler Queue
|
||||||
|
casper.commandfile=C:\\casperjs\\batchbin\\casperjs.bat
|
||||||
|
script.queue_capture=Z:\\IT\\casperjs_scripts\\capture_queue.js
|
||||||
|
scheduler.url=http://4ecapsvsg2:8080/bldb/scheduler.jsp
|
||||||
|
screenshot.folder=\\\\10.153.64.10\\Public\\IT\\casperjs_scripts\\files\\
|
||||||
|
|
||||||
|
screenshot.folder.link=\\\\10.153.64.10\\Public\\IT\\casperjs_scripts\\files\\
|
||||||
|
|
||||||
|
ssh.enable=true
|
||||||
|
ssh.ipaddress=10.153.64.47
|
||||||
|
|
||||||
|
#enable only when ssh is true;
|
||||||
|
casper.commandfile=casperjs
|
||||||
|
script.queue_capture=/mnt/public/IT/casperjs_scripts/capture_queue.js
|
||||||
|
screenshot.folder=/mnt/public/IT/casperjs_scripts/files/
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.servlet;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.fourelementscapital.db.RFunctionDB;
|
||||||
|
|
||||||
|
public class AceModeRSyntax extends HttpServlet {
|
||||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
String realpath=request.getSession().getServletContext().getRealPath("");
|
||||||
|
//System.out.println("~~~~~~~~~~realpath:"+realpath);
|
||||||
|
//FileInputStream fin=null;
|
||||||
|
|
||||||
|
String fullpath=realpath+File.separator+"ace"+File.separator+"src"+File.separator+"mode-r.js";
|
||||||
|
response.setContentType("application/javascript");
|
||||||
|
BufferedReader in = new BufferedReader(new FileReader(fullpath));
|
||||||
|
String rtn="";
|
||||||
|
String str;
|
||||||
|
while ((str = in.readLine()) != null) {
|
||||||
|
rtn+=str+"\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
RFunctionDB rfdb=RFunctionDB.getRFunctionDB();
|
||||||
|
String functionanames="";
|
||||||
|
try{
|
||||||
|
rfdb.connectDB();
|
||||||
|
List fnames=rfdb.listAllRFunctionNames();
|
||||||
|
for(Iterator i=fnames.iterator();i.hasNext();){
|
||||||
|
String fname=(String)i.next();
|
||||||
|
fname=""+fname+"";
|
||||||
|
functionanames+=functionanames.equals("")?fname: "|"+fname;
|
||||||
|
}
|
||||||
|
}catch(Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
|
||||||
|
}finally{
|
||||||
|
try{
|
||||||
|
rfdb.closeDB();
|
||||||
|
}catch(Exception e1){}
|
||||||
|
}
|
||||||
|
|
||||||
|
//rtn=replacePlaceHolders(rtn,"myfunctions","'getRACEUniverse','getContractReference','abc','eee'");
|
||||||
|
rtn=replacePlaceHolders(rtn,"myfunctions",functionanames);
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
out.write(rtn.getBytes());
|
||||||
|
out.flush();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String replacePlaceHolders(String css,String holder, String value){
|
||||||
|
//Map<String, String> data = new HashMap<String, String>();
|
||||||
|
//...
|
||||||
|
Pattern p = Pattern.compile("\\[\\[([a-zA-Z.]+)\\]\\]");
|
||||||
|
Matcher m = p.matcher(css);
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
while (m.find()) {
|
||||||
|
String reg1 = m.group(1);
|
||||||
|
if(reg1.equals("myfunctions")){
|
||||||
|
m.appendReplacement(sb, Matcher.quoteReplacement(value == null ? "" : value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.appendTail(sb);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2010 Blue Lotus Software, LLC.
|
||||||
|
* Copyright 2010 John Yeary <jyeary@bluelotussoftware.com>.
|
||||||
|
* Copyright 2010 Allan O'Driscoll
|
||||||
|
*
|
||||||
|
* Dual Licensed MIT and GPL v.2
|
||||||
|
*
|
||||||
|
* The MIT License
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The GNU General Public License (GPL) Version 2, June 1991
|
||||||
|
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||||
|
* GNU General Public License as published by the Free Software Foundation; version 2 of the License.
|
||||||
|
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||||
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
* See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
* You should have received a copy of the GNU General Public License along with this program;
|
||||||
|
* if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
package com.fe.servlet;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.servlet.ServletConfig;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads an <code>application/octet-stream</code> and writes it to a file.
|
||||||
|
* @author John Yeary <jyeary@bluelotussoftware.com>
|
||||||
|
* @author Allan O'Driscoll
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class FileUploader extends HttpServlet {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 6748857432950840322L;
|
||||||
|
private static final String DESTINATION_DIR_PATH = "temp_files_uploaded";
|
||||||
|
private static String realPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
* @param config
|
||||||
|
* @throws ServletException
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void init(ServletConfig config) throws ServletException {
|
||||||
|
super.init(config);
|
||||||
|
realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH) + "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles the HTTP <code>POST</code> method.
|
||||||
|
* @param request servlet request
|
||||||
|
* @param response servlet response
|
||||||
|
* @throws ServletException if a servlet-specific error occurs
|
||||||
|
* @throws IOException if an I/O error occurs
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||||
|
throws ServletException {
|
||||||
|
|
||||||
|
PrintWriter writer = null;
|
||||||
|
InputStream is = null;
|
||||||
|
// FileOutputStream fos = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
writer = response.getWriter();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
log(FileUploader.class.getName() + "has thrown an exception: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
String filename = request.getHeader("X-File-Name");
|
||||||
|
|
||||||
|
try {
|
||||||
|
is = request.getInputStream();
|
||||||
|
//fos = new FileOutputStream(new File(realPath + filename));
|
||||||
|
//IOUtils.copy(is, fos);
|
||||||
|
List lines=IOUtils.readLines(is);
|
||||||
|
String txt="";
|
||||||
|
for(Iterator i=lines.iterator();i.hasNext();){
|
||||||
|
txt+=(String) i.next()+"\n";
|
||||||
|
//System.out.println(i.next());
|
||||||
|
//txt
|
||||||
|
}
|
||||||
|
response.setContentType("text/plain");
|
||||||
|
response.setStatus(response.SC_OK);
|
||||||
|
//writer.print("{success: true,txt:\""+txt+"\"}");
|
||||||
|
writer.print(txt);
|
||||||
|
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
|
||||||
|
response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
writer.print("{success: false}");
|
||||||
|
log(FileUploader.class.getName() + "has thrown an exception: " + ex.getMessage());
|
||||||
|
} catch (IOException ex) {
|
||||||
|
|
||||||
|
response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
|
||||||
|
writer.print("{success: false}");
|
||||||
|
log(FileUploader.class.getName() + "has thrown an exception: " + ex.getMessage());
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
try {
|
||||||
|
//fos.close();
|
||||||
|
is.close();
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.flush();
|
||||||
|
writer.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.servlet;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContextEvent;
|
||||||
|
import javax.servlet.ServletContextListener;
|
||||||
|
import javax.servlet.ServletRequestEvent;
|
||||||
|
import javax.servlet.ServletRequestListener;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import javax.servlet.http.HttpSessionEvent;
|
||||||
|
import javax.servlet.http.HttpSessionListener;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fe.client.Authenticated;
|
||||||
|
import com.fe.common.Constant;
|
||||||
|
import com.fe.p2p.P2PServiceServlet;
|
||||||
|
import com.fourelementscapital.db.BBSyncDB;
|
||||||
|
import com.fourelementscapital.scheduler.balance.ExecutingQueueCleaner;
|
||||||
|
import com.fourelementscapital.scheduler.p2p.P2PService;
|
||||||
|
|
||||||
|
public class P2PServletContextListener implements ServletContextListener,HttpSessionListener, ServletRequestListener {
|
||||||
|
|
||||||
|
|
||||||
|
private static long sessionid=0;
|
||||||
|
private Logger log = LogManager.getLogger(P2PServletContextListener.class.getName());
|
||||||
|
|
||||||
|
|
||||||
|
private static final String ATTRIBUTE_NAME = "com.example.SessionCounter";
|
||||||
|
//private Map<HttpSession, String> sessions = new ConcurrentHashMap<HttpSession, String>();
|
||||||
|
private static ConcurrentLinkedQueue<HttpSession> sessions=new ConcurrentLinkedQueue<HttpSession>();
|
||||||
|
|
||||||
|
public void contextDestroyed(ServletContextEvent event) {
|
||||||
|
BBSyncDB syncdb=BBSyncDB.getBBSyncDB();
|
||||||
|
try{
|
||||||
|
syncdb.connectDB();
|
||||||
|
syncdb.peerStopped(P2PService.getComputerName(), P2PServletContextListener.sessionid, new Date());
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}finally{
|
||||||
|
try{syncdb.closeDB();}catch(Exception e){}
|
||||||
|
}
|
||||||
|
System.out.println("~~~~~~~~~~~~cleaning and stopping all running services.....");
|
||||||
|
new P2PServiceServlet().destroy();
|
||||||
|
ExecutingQueueCleaner.stop();
|
||||||
|
|
||||||
|
System.exit(0);
|
||||||
|
|
||||||
|
//if(RestartTomcat.proc!=null){
|
||||||
|
//RestartTomcat.proc.destroy();
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void contextInitialized(ServletContextEvent event) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
sessionid=new Date().getTime();
|
||||||
|
BBSyncDB syncdb=BBSyncDB.getBBSyncDB();
|
||||||
|
try{
|
||||||
|
syncdb.connectDB();
|
||||||
|
syncdb.peerStarted(P2PService.getComputerName(), P2PServletContextListener.sessionid, new Date());
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}finally{
|
||||||
|
try{syncdb.closeDB();}catch(Exception e){}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sessionCreated(HttpSessionEvent hse) {
|
||||||
|
|
||||||
|
HttpSession s=hse.getSession();
|
||||||
|
//String ip=(String)s.getAttribute(Authenticated.REMOTE_IP);
|
||||||
|
//log.debug("Session created:"+ip);
|
||||||
|
sessions.add(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void sessionDestroyed(HttpSessionEvent hse) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
HttpSession s=hse.getSession();
|
||||||
|
String ip=(String)s.getAttribute(Authenticated.REMOTE_IP);
|
||||||
|
|
||||||
|
log.debug("Session before destroyed:"+sessions.size());
|
||||||
|
|
||||||
|
sessions.remove(s);
|
||||||
|
|
||||||
|
log.debug("Session after destroyed:"+sessions.size());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void requestDestroyed(ServletRequestEvent arg0) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void requestInitialized(ServletRequestEvent event) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
//HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
|
||||||
|
//HttpSession session = request.getSession();
|
||||||
|
//if (session.isNew()) {
|
||||||
|
// sessions.put(session, request.getRemoteAddr());
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//public static P2PServletContextListener getInstance(ServletContext context) {
|
||||||
|
// return (P2PServletContextListener) context.getAttribute(ATTRIBUTE_NAME);
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
public static ConcurrentLinkedQueue<HttpSession> getSessions(){
|
||||||
|
return sessions;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static HttpSession getActiveSessions(String user){
|
||||||
|
HttpSession rtn=null;
|
||||||
|
for(HttpSession sess: P2PServletContextListener.getSessions()){
|
||||||
|
if(sess.getAttribute(Constant.SESSION_LOGGED_USER)!=null && sess.getAttribute(Constant.SESSION_LOGGED_USER).equals(user)){
|
||||||
|
//System.out.println("invalidating session...."+sess.getId());
|
||||||
|
//sess.invalidate();
|
||||||
|
//sess.setMaxInactiveInterval(0);
|
||||||
|
rtn=sess;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//public int getCount(String remoteAddr) {
|
||||||
|
// return Collections.frequency(sessions.values(), remoteAddr);
|
||||||
|
//}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,101 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.servlet;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.fe.client.RFunctionMgmt;
|
||||||
|
import com.fourelementscapital.db.RFunctionDB;
|
||||||
|
|
||||||
|
public class RSyntaxServlet extends HttpServlet {
|
||||||
|
|
||||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
String realpath=request.getSession().getServletContext().getRealPath("");
|
||||||
|
//System.out.println("~~~~~~~~~~realpath:"+realpath);
|
||||||
|
//FileInputStream fin=null;
|
||||||
|
|
||||||
|
String fullpath=realpath+File.separator+"editarea_0_8_2"+File.separator+"reg_syntax"+File.separator+"r.js";
|
||||||
|
response.setContentType("application/javascript");
|
||||||
|
BufferedReader in = new BufferedReader(new FileReader(fullpath));
|
||||||
|
String rtn="";
|
||||||
|
String str;
|
||||||
|
while ((str = in.readLine()) != null) {
|
||||||
|
rtn+=str+"\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
RFunctionDB rfdb=RFunctionDB.getRFunctionDB();
|
||||||
|
String functionanames="";
|
||||||
|
try{
|
||||||
|
rfdb.connectDB();
|
||||||
|
List fnames=rfdb.listAllRFunctionNames();
|
||||||
|
for(Iterator i=fnames.iterator();i.hasNext();){
|
||||||
|
String fname=(String)i.next();
|
||||||
|
fname="'"+fname+"'";
|
||||||
|
functionanames+=functionanames.equals("")?fname: ","+fname;
|
||||||
|
}
|
||||||
|
}catch(Exception ex){
|
||||||
|
ex.printStackTrace();
|
||||||
|
|
||||||
|
}finally{
|
||||||
|
try{
|
||||||
|
rfdb.closeDB();
|
||||||
|
}catch(Exception e1){}
|
||||||
|
}
|
||||||
|
|
||||||
|
//rtn=replacePlaceHolders(rtn,"myfunctions","'getRACEUniverse','getContractReference','abc','eee'");
|
||||||
|
rtn=replacePlaceHolders(rtn,"myfunctions",functionanames);
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
out.write(rtn.getBytes());
|
||||||
|
out.flush();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private String replacePlaceHolders(String css,String holder, String value){
|
||||||
|
//Map<String, String> data = new HashMap<String, String>();
|
||||||
|
//...
|
||||||
|
Pattern p = Pattern.compile("\\[\\[([a-zA-Z.]+)\\]\\]");
|
||||||
|
Matcher m = p.matcher(css);
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
while (m.find()) {
|
||||||
|
String reg1 = m.group(1);
|
||||||
|
if(reg1.equals("myfunctions")){
|
||||||
|
m.appendReplacement(sb, Matcher.quoteReplacement(value == null ? "" : value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.appendTail(sb);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.tmatesoft.svn.core.ISVNDirEntryHandler;
|
||||||
|
import org.tmatesoft.svn.core.ISVNLogEntryHandler;
|
||||||
|
import org.tmatesoft.svn.core.SVNDirEntry;
|
||||||
|
import org.tmatesoft.svn.core.SVNException;
|
||||||
|
import org.tmatesoft.svn.core.SVNLogEntry;
|
||||||
|
|
||||||
|
public class LogEntryHandler implements ISVNLogEntryHandler, ISVNDirEntryHandler{
|
||||||
|
|
||||||
|
|
||||||
|
private Vector<SVNLogEntry> messages=null;
|
||||||
|
private Vector<SVNDirEntry> dirmessages=null;
|
||||||
|
|
||||||
|
private boolean arrivalStarted=false;
|
||||||
|
public LogEntryHandler(){
|
||||||
|
this.messages=new Vector<SVNLogEntry>();
|
||||||
|
this.dirmessages=new Vector<SVNDirEntry>();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleLogEntry(SVNLogEntry arg0) throws SVNException {
|
||||||
|
|
||||||
|
this.messages.add(arg0);
|
||||||
|
arrivalStarted=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void handleDirEntry(SVNDirEntry arg0) throws SVNException {
|
||||||
|
|
||||||
|
this.dirmessages.add(arg0);
|
||||||
|
arrivalStarted=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Vector<SVNLogEntry> getLogMessages() {
|
||||||
|
return (!arrivalStarted)?null:messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector<SVNDirEntry> getLogDirMessages() {
|
||||||
|
return (!arrivalStarted)?null:dirmessages;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
import java.io.StringReader;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
public class SVNDiffPush {
|
||||||
|
|
||||||
|
private HttpServletRequest request=null;
|
||||||
|
private HttpServletResponse response=null;
|
||||||
|
|
||||||
|
public SVNDiffPush(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
this.request=request;
|
||||||
|
this.response=response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pushDiffWC() throws Exception {
|
||||||
|
try {
|
||||||
|
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=comparison.diff");
|
||||||
|
response.setContentType("application/octet-stream");
|
||||||
|
|
||||||
|
|
||||||
|
if(this.request.getParameter("scheduler_id")!=null
|
||||||
|
&& !this.request.getParameter("revision").equals("")
|
||||||
|
|
||||||
|
){
|
||||||
|
int scheduler_id=Integer.parseInt(this.request.getParameter("scheduler_id"));
|
||||||
|
long revstart=Long.parseLong(this.request.getParameter("revision"));
|
||||||
|
SVNSync sync=new SVNSync();
|
||||||
|
String diff=sync.diffWC(scheduler_id, revstart);
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
out.write(diff.getBytes());
|
||||||
|
out.flush();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//fin.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
response.setContentType("html/text");
|
||||||
|
response.setStatus(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
|
||||||
|
public class SVNIExecXML extends SVNSyncFile{
|
||||||
|
|
||||||
|
public SVNIExecXML(String user, String pwd){
|
||||||
|
super(user,pwd,Config.getString("svn_url_ie"),Config.getString("svn_local_path_ie"));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVNIExecXML(){
|
||||||
|
|
||||||
|
super(Config.getString("svn_url_ie"),Config.getString("svn_local_path_ie"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getExtension() {
|
||||||
|
|
||||||
|
return ".xml";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
public class SVNSchedulerCommitInfo {
|
||||||
|
|
||||||
|
private long revision;
|
||||||
|
private int scheduler_id;
|
||||||
|
|
||||||
|
public long getRevision() {
|
||||||
|
return revision;
|
||||||
|
}
|
||||||
|
public void setRevision(long revision) {
|
||||||
|
this.revision = revision;
|
||||||
|
}
|
||||||
|
public int getScheduler_id() {
|
||||||
|
return scheduler_id;
|
||||||
|
}
|
||||||
|
public void setScheduler_id(int scheduler_id) {
|
||||||
|
this.scheduler_id = scheduler_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,398 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.tmatesoft.svn.core.SVNCommitInfo;
|
||||||
|
import org.tmatesoft.svn.core.SVNDirEntry;
|
||||||
|
import org.tmatesoft.svn.core.SVNException;
|
||||||
|
import org.tmatesoft.svn.core.SVNLogEntry;
|
||||||
|
import org.tmatesoft.svn.core.SVNNodeKind;
|
||||||
|
import org.tmatesoft.svn.core.SVNProperties;
|
||||||
|
import org.tmatesoft.svn.core.SVNProperty;
|
||||||
|
import org.tmatesoft.svn.core.SVNURL;
|
||||||
|
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
|
||||||
|
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
|
||||||
|
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
|
||||||
|
import org.tmatesoft.svn.core.io.SVNRepository;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNClientManager;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNCommitClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNDiffClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNLogClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNRevision;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNUpdateClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNWCClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNWCUtil;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
|
||||||
|
public class SVNSync {
|
||||||
|
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(SVNSync.class.getName());
|
||||||
|
|
||||||
|
private String svnurl="svn://10.153.64.3/scheduler";
|
||||||
|
private String local="C:\\temp_repotest1\\sc3";
|
||||||
|
//private String user="svnrams";
|
||||||
|
//private String pwd="svnrams";
|
||||||
|
|
||||||
|
private File dstPath = null;
|
||||||
|
|
||||||
|
SVNClientManager cm=null;
|
||||||
|
public SVNSync(String user, String pwd){
|
||||||
|
init(user,pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void init(String user, String pwd) {
|
||||||
|
setupLibrary();
|
||||||
|
|
||||||
|
cm = SVNClientManager.newInstance(SVNWCUtil.createDefaultOptions(true),user,pwd);
|
||||||
|
|
||||||
|
this.svnurl=Config.getString("svn_url");
|
||||||
|
this.local=Config.getString("svn_local_path");
|
||||||
|
this.dstPath = new File(this.local);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVNSync(){
|
||||||
|
String user=Config.getString("svn_user");
|
||||||
|
String pwd=Config.getString("svn_pwd");
|
||||||
|
init(user,pwd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public long syncScript(int scheduler_id,String script, String message){
|
||||||
|
long revision=-1;
|
||||||
|
try {
|
||||||
|
|
||||||
|
SVNURL url = SVNURL.parseURIEncoded(this.svnurl);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SVN operations
|
||||||
|
*/
|
||||||
|
//SVNClientManager cm = SVNClientManager.newInstance(SVNWCUtil.createDefaultOptions(true),user,pwd);
|
||||||
|
SVNUpdateClient uc = this.cm.getUpdateClient();
|
||||||
|
|
||||||
|
if(!SVNWCUtil.isVersionedDirectory(dstPath)){
|
||||||
|
uc.doCheckout(url, dstPath, SVNRevision.UNDEFINED, SVNRevision.HEAD, true);
|
||||||
|
uc.doUpdate(dstPath, SVNRevision.HEAD, true);
|
||||||
|
}else{
|
||||||
|
log.debug("~~~~~~"+dstPath.getPath()+" it is already working copy....");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
creating file
|
||||||
|
*/
|
||||||
|
String line;
|
||||||
|
BufferedReader reader = new BufferedReader(new StringReader(script));
|
||||||
|
StringBuffer sb=new StringBuffer();
|
||||||
|
|
||||||
|
File file=new File(local,"script_"+scheduler_id+".R");
|
||||||
|
|
||||||
|
BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null)
|
||||||
|
{
|
||||||
|
if(line!=null && line.equals("")){
|
||||||
|
out.write(line+"\n");
|
||||||
|
}
|
||||||
|
if(line!=null && !line.equals("")){
|
||||||
|
out.write(line+"\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SVNWCClient wcc = this.cm.getWCClient();
|
||||||
|
|
||||||
|
try{
|
||||||
|
wcc.doInfo(file, SVNRevision.HEAD);
|
||||||
|
}catch(SVNException e){
|
||||||
|
if(e.getMessage().contains("is not under version control")){
|
||||||
|
wcc.doAdd(file, false, false, false, true);
|
||||||
|
log.debug("~~~~~ file:"+file+" is not under version control");
|
||||||
|
}else{
|
||||||
|
log.debug("~~~~~ file:"+file+" is under version control");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SVNCommitClient cc = cm.getCommitClient();
|
||||||
|
SVNCommitInfo info= cc.doCommit(new File[] {file}, false, message, false, true);
|
||||||
|
|
||||||
|
revision=info.getNewRevision();
|
||||||
|
//System.out.println("~~~~~~~~~~~~~~~SVNSync.syncScript() version:"+info.getNewRevision());
|
||||||
|
//System.out.println("~~~~~~~~~~~~~~~SVNSync.syncScript() toString:"+info.toString());
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return revision;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public String getLastChanged(int scheduler_id) throws Exception {
|
||||||
|
|
||||||
|
String filename="script_"+scheduler_id+".R";
|
||||||
|
File file=new File(local,filename);
|
||||||
|
|
||||||
|
TreeSet<Long> rev=revisions(file);
|
||||||
|
Vector v=new Vector(rev);
|
||||||
|
String diff=null;
|
||||||
|
if(rev.size()>0 && v.indexOf(rev.last())>0){
|
||||||
|
long prev=(Long)v.get(v.indexOf(rev.last())-1);
|
||||||
|
diff=diff(scheduler_id,prev,rev.last().longValue());
|
||||||
|
if(diff!=null){
|
||||||
|
StringTokenizer st=new StringTokenizer(diff,"\n\r");
|
||||||
|
if(st.countTokens()>=4){
|
||||||
|
st.nextToken();st.nextToken();st.nextToken();st.nextToken();//st.nextToken();
|
||||||
|
diff="";
|
||||||
|
while(st.hasMoreTokens()){
|
||||||
|
diff+=st.nextToken()+"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Vector<SVNLogEntry> log(int scheduler_id) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
File file=new File(local,"script_"+scheduler_id+".R");
|
||||||
|
|
||||||
|
//Vector v=new Vector();
|
||||||
|
Vector v=null;
|
||||||
|
if(file.exists()){
|
||||||
|
SVNLogClient logc= this.cm.getLogClient();
|
||||||
|
long limit=250;
|
||||||
|
|
||||||
|
LogEntryHandler leh=new LogEntryHandler();
|
||||||
|
|
||||||
|
logc.doLog(new File[] {file}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, true, true,limit,leh);
|
||||||
|
|
||||||
|
|
||||||
|
while(leh.getLogMessages()==null){
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
v=leh.getLogMessages();
|
||||||
|
Thread.sleep(100);
|
||||||
|
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector<SVNDirEntry> logTest() throws Exception {
|
||||||
|
|
||||||
|
SVNLogClient logc= this.cm.getLogClient();
|
||||||
|
long limit=50;
|
||||||
|
|
||||||
|
LogEntryHandler leh=new LogEntryHandler();
|
||||||
|
SVNURL url = SVNURL.parseURIEncoded(this.svnurl);
|
||||||
|
//logc.doList(url, SVNRevision.create(0), SVNRevision.HEAD, true, true,leh);
|
||||||
|
|
||||||
|
//while(leh.getLogDirMessages()==null){
|
||||||
|
// Thread.sleep(100);
|
||||||
|
//}
|
||||||
|
//Vector v=leh.getLogMessages();
|
||||||
|
logc.doLog(url,new String[] {}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, true, true,1,leh);
|
||||||
|
|
||||||
|
while(leh.getLogMessages()==null){
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
Vector v=leh.getLogMessages();
|
||||||
|
|
||||||
|
Thread.sleep(100);
|
||||||
|
return v;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String diff(int scheduler_id, long start, long end) throws Exception {
|
||||||
|
|
||||||
|
File file=new File(local,"script_"+scheduler_id+".R");
|
||||||
|
//File file1=new File(local,"script_"+scheduler_id+"_rev"+start+"_rev"+end+".diff");
|
||||||
|
String rtn=null;
|
||||||
|
if(file.exists()){
|
||||||
|
SVNDiffClient diffc= this.cm.getDiffClient();
|
||||||
|
|
||||||
|
//StringWriter sw=new StringWriter();
|
||||||
|
//BufferedWriter out = new BufferedWriter(sw);
|
||||||
|
//FileOutputStream fos=new FileOutputStream(file1) ;
|
||||||
|
ByteArrayOutputStream fos = new ByteArrayOutputStream( );
|
||||||
|
diffc.doDiff(file, SVNRevision.create(start),SVNRevision.create(start),SVNRevision.create(end), true, false,fos );
|
||||||
|
rtn=fos.toString();
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String diffWC(int scheduler_id, long rev) throws Exception {
|
||||||
|
|
||||||
|
File file=new File(local,"script_"+scheduler_id+".R");
|
||||||
|
//File file1=new File(local,"script_"+scheduler_id+"_rev"+start+"_rev"+end+".diff");
|
||||||
|
String rtn=null;
|
||||||
|
if(file.exists()){
|
||||||
|
SVNDiffClient diffc= this.cm.getDiffClient();
|
||||||
|
|
||||||
|
//StringWriter sw=new StringWriter();
|
||||||
|
//BufferedWriter out = new BufferedWriter(sw);
|
||||||
|
//FileOutputStream fos=new FileOutputStream(file1) ;
|
||||||
|
ByteArrayOutputStream fos = new ByteArrayOutputStream( );
|
||||||
|
diffc.doDiff(file, SVNRevision.create(rev),SVNRevision.create(rev),SVNRevision.HEAD, true, false,fos );
|
||||||
|
rtn=fos.toString();
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public String getScript(int scheduler_id, long revision) throws Exception {
|
||||||
|
|
||||||
|
String filepath="script_"+scheduler_id+".R";
|
||||||
|
|
||||||
|
SVNRepository repository=this.cm.createRepository( SVNURL.parseURIEncoded(this.svnurl), false);
|
||||||
|
SVNNodeKind nodeKind = repository.checkPath( filepath , -1 );
|
||||||
|
if ( nodeKind == SVNNodeKind.NONE ) {
|
||||||
|
throw new Exception( "There is no entry at '" + this.svnurl + "'." );
|
||||||
|
|
||||||
|
} else if ( nodeKind == SVNNodeKind.DIR ) {
|
||||||
|
throw new Exception( "The entry at '" + this.svnurl + "' is a directory while a file was expected." );
|
||||||
|
//System.exit( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
SVNProperties fileProperties = new SVNProperties( );
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream( );
|
||||||
|
repository.getFile( filepath , revision, fileProperties , baos );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Map fileProperties1=fileProperties.asMap();
|
||||||
|
String mimeType = (String)fileProperties1.get( SVNProperty.MIME_TYPE );
|
||||||
|
boolean isTextType = SVNProperty.isTextMimeType( mimeType );
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Iterator iterator = fileProperties1.keySet( ).iterator( );
|
||||||
|
while ( iterator.hasNext( ) ) {
|
||||||
|
String propertyName = ( String ) iterator.next( );
|
||||||
|
String propertyValue = ( String ) fileProperties1.get( propertyName );
|
||||||
|
// System.out.println( "File property: " + propertyName + "=" + propertyValue );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
String rtn=null;
|
||||||
|
|
||||||
|
if ( isTextType ) {
|
||||||
|
// System.out.println( "File contents:" );
|
||||||
|
//System.out.println( );
|
||||||
|
|
||||||
|
//baos.writeTo( System.out );
|
||||||
|
//baos.writeTo( sw );
|
||||||
|
rtn=baos.toString();
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
System.out.println( "Not a text file." );
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initializes the library to work with a repository via
|
||||||
|
* different protocols.
|
||||||
|
*/
|
||||||
|
private static void setupLibrary() {
|
||||||
|
/*
|
||||||
|
* For using over http:// and https://
|
||||||
|
*/
|
||||||
|
DAVRepositoryFactory.setup();
|
||||||
|
/*
|
||||||
|
* For using over svn:// and svn+xxx://
|
||||||
|
*/
|
||||||
|
SVNRepositoryFactoryImpl.setup();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For using over file:///
|
||||||
|
*/
|
||||||
|
FSRepositoryFactory.setup();
|
||||||
|
}
|
||||||
|
|
||||||
|
public TreeSet<Long> revisions( File file) throws Exception {
|
||||||
|
|
||||||
|
//File file=new File(local,"script_"+scheduler_id+FILE_EXTENSIION);
|
||||||
|
|
||||||
|
|
||||||
|
//Vector v=new Vector();
|
||||||
|
/*
|
||||||
|
TreeSet v=new TreeSet(new Comparator(){
|
||||||
|
|
||||||
|
public int compare(Object o1, Object o2) {
|
||||||
|
long i1=((Long)o1).longValue();
|
||||||
|
long i2=((Long)o2).longValue();
|
||||||
|
if(i1>i2) return -1;
|
||||||
|
else if(i1 > i2) return +1;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}); */
|
||||||
|
|
||||||
|
TreeSet v=new TreeSet();
|
||||||
|
|
||||||
|
if(file.exists()){
|
||||||
|
SVNLogClient logc= this.cm.getLogClient();
|
||||||
|
|
||||||
|
LogEntryHandler leh=new LogEntryHandler();
|
||||||
|
|
||||||
|
logc.doLog(new File[] {file}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, true, true,0,leh);
|
||||||
|
|
||||||
|
|
||||||
|
while(leh.getLogMessages()==null){
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
Vector logs=leh.getLogMessages();
|
||||||
|
|
||||||
|
Thread.sleep(100);
|
||||||
|
|
||||||
|
for(Iterator it=logs.iterator();it.hasNext(); ){
|
||||||
|
SVNLogEntry log=(SVNLogEntry)it.next();
|
||||||
|
v.add(log.getRevision());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
|
||||||
|
public class SVNSync4RFunction extends SVNSyncFile{
|
||||||
|
|
||||||
|
|
||||||
|
public SVNSync4RFunction(String user, String pwd){
|
||||||
|
super(user,pwd,Config.getString("svn_url_r"),Config.getString("svn_local_path_r"));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVNSync4RFunction(){
|
||||||
|
|
||||||
|
super(Config.getString("svn_url_r"),Config.getString("svn_local_path_r"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getExtension() {
|
||||||
|
|
||||||
|
return ".r";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,569 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.svn;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.TreeSet;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.tmatesoft.svn.core.SVNDirEntry;
|
||||||
|
import org.tmatesoft.svn.core.SVNException;
|
||||||
|
import org.tmatesoft.svn.core.SVNLogEntry;
|
||||||
|
import org.tmatesoft.svn.core.SVNNodeKind;
|
||||||
|
import org.tmatesoft.svn.core.SVNProperties;
|
||||||
|
import org.tmatesoft.svn.core.SVNProperty;
|
||||||
|
import org.tmatesoft.svn.core.SVNURL;
|
||||||
|
import org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory;
|
||||||
|
import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
|
||||||
|
import org.tmatesoft.svn.core.internal.io.svn.SVNRepositoryFactoryImpl;
|
||||||
|
import org.tmatesoft.svn.core.io.SVNRepository;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNClientManager;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNCommitClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNDiffClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNLogClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNMoveClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNRevision;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNUpdateClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNWCClient;
|
||||||
|
import org.tmatesoft.svn.core.wc.SVNWCUtil;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.config.Config;
|
||||||
|
|
||||||
|
public abstract class SVNSyncFile {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(SVNSync4RFunction.class.getName());
|
||||||
|
|
||||||
|
private String svnurl=null ;//"svn://10.153.64.3/rfunctions_test";
|
||||||
|
|
||||||
|
private String local ;//="C:\\temp_repotest1\\rfunctions";
|
||||||
|
//private static String FILE_EXTENSIION=".r";
|
||||||
|
|
||||||
|
//private String user="svnrams";
|
||||||
|
//private String pwd="svnrams";
|
||||||
|
|
||||||
|
private File dstPath = null;
|
||||||
|
|
||||||
|
public abstract String getExtension();
|
||||||
|
|
||||||
|
SVNClientManager cm=null;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
private void init(String user, String pwd) {
|
||||||
|
setupLibrary();
|
||||||
|
|
||||||
|
cm = SVNClientManager.newInstance(SVNWCUtil.createDefaultOptions(true),user,pwd);
|
||||||
|
|
||||||
|
this.svnurl=Config.getString("svn_url_r");
|
||||||
|
this.local=Config.getString("svn_local_path_r");
|
||||||
|
this.dstPath = new File(this.local);
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
private void init(String user, String pwd, String svnurl, String svn_path) {
|
||||||
|
setupLibrary();
|
||||||
|
|
||||||
|
cm = SVNClientManager.newInstance(SVNWCUtil.createDefaultOptions(true),user,pwd);
|
||||||
|
|
||||||
|
this.svnurl=svnurl;
|
||||||
|
this.local=svn_path;
|
||||||
|
this.dstPath = new File(this.local);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVNSyncFile(String user, String pwd, String svn_url, String local_path ){
|
||||||
|
|
||||||
|
init(user,pwd,svn_url,local_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SVNSyncFile(String svn_url, String local_path ){
|
||||||
|
String user=Config.getString("svn_user");
|
||||||
|
String pwd=Config.getString("svn_pwd");
|
||||||
|
init(user,pwd,svn_url,local_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void syncFile(String function_name,String script, String message){
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
SVNURL url = SVNURL.parseURIEncoded(this.svnurl);
|
||||||
|
|
||||||
|
log.debug("this.svnurl:"+this.svnurl);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SVN operations
|
||||||
|
*/
|
||||||
|
//SVNClientManager cm = SVNClientManager.newInstance(SVNWCUtil.createDefaultOptions(true),user,pwd);
|
||||||
|
SVNUpdateClient uc = this.cm.getUpdateClient();
|
||||||
|
|
||||||
|
if(!SVNWCUtil.isVersionedDirectory(dstPath)){
|
||||||
|
uc.doCheckout(url, dstPath, SVNRevision.UNDEFINED, SVNRevision.HEAD, true);
|
||||||
|
uc.doUpdate(dstPath, SVNRevision.HEAD, true);
|
||||||
|
}else{
|
||||||
|
log.debug("~~~~~~"+dstPath.getPath()+" it is already working copy....");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
creating file
|
||||||
|
*/
|
||||||
|
String line;
|
||||||
|
BufferedReader reader = new BufferedReader(new StringReader(script));
|
||||||
|
StringBuffer sb=new StringBuffer();
|
||||||
|
|
||||||
|
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension());
|
||||||
|
|
||||||
|
BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null)
|
||||||
|
{
|
||||||
|
if(line!=null && line.equals("")){
|
||||||
|
out.write(line+"\n");
|
||||||
|
}
|
||||||
|
if(line!=null && !line.equals("")){
|
||||||
|
out.write(line+"\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
SVNWCClient wcc = this.cm.getWCClient();
|
||||||
|
|
||||||
|
try{
|
||||||
|
wcc.doInfo(file, SVNRevision.HEAD);
|
||||||
|
}catch(SVNException e){
|
||||||
|
if(e.getMessage().contains("is not under version control")){
|
||||||
|
wcc.doAdd(file, false, false, false, true);
|
||||||
|
log.debug("~~~~~ file:"+file+" is not under version control");
|
||||||
|
}else{
|
||||||
|
log.debug("~~~~~ file:"+file+" is under version control");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SVNCommitClient cc = cm.getCommitClient();
|
||||||
|
cc.doCommit(new File[] {file}, false, message, false, true);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void deleteFile(String function_name){
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
SVNURL url = SVNURL.parseURIEncoded(this.svnurl);
|
||||||
|
|
||||||
|
log.debug("this.svnurl:"+this.svnurl);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SVNWCClient wcc = this.cm.getWCClient();
|
||||||
|
|
||||||
|
try{
|
||||||
|
wcc.doDelete(file, true,false);
|
||||||
|
}catch(SVNException e){
|
||||||
|
log.error("Error occured while deleting, Error:"+e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
SVNCommitClient cc = cm.getCommitClient();
|
||||||
|
cc.doCommit(new File[] {file}, false, "deleted", false, true);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void renameFile(String old_function, String new_function,String script, String message){
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
SVNURL url = SVNURL.parseURIEncoded(this.svnurl);
|
||||||
|
|
||||||
|
log.debug("this.svnurl:"+this.svnurl);
|
||||||
|
|
||||||
|
File n_file=new File((local.endsWith(File.separator)? local:local+File.separator),new_function+getExtension());
|
||||||
|
File o_file=new File((local.endsWith(File.separator)? local:local+File.separator),old_function+getExtension());
|
||||||
|
|
||||||
|
|
||||||
|
String line;
|
||||||
|
BufferedReader reader = new BufferedReader(new StringReader(script));
|
||||||
|
StringBuffer sb=new StringBuffer();
|
||||||
|
|
||||||
|
BufferedWriter out = new BufferedWriter(new FileWriter(o_file));
|
||||||
|
|
||||||
|
while ((line = reader.readLine()) != null)
|
||||||
|
{
|
||||||
|
if(line!=null && line.equals("")){
|
||||||
|
out.write(line+"\n");
|
||||||
|
}
|
||||||
|
if(line!=null && !line.equals("")){
|
||||||
|
out.write(line+"\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.close();
|
||||||
|
reader.close();
|
||||||
|
|
||||||
|
|
||||||
|
SVNWCClient wcc = this.cm.getWCClient();
|
||||||
|
|
||||||
|
try{
|
||||||
|
wcc.doInfo(o_file, SVNRevision.HEAD);
|
||||||
|
}catch(SVNException e){
|
||||||
|
if(e.getMessage().contains("is not under version control")){
|
||||||
|
wcc.doAdd(o_file, false, false, false, true);
|
||||||
|
log.debug("~~~~~ file:"+n_file+" is not under version control");
|
||||||
|
}else{
|
||||||
|
log.debug("~~~~~ file:"+n_file+" is under version control");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SVNMoveClient mc = this.cm.getMoveClient();
|
||||||
|
mc.doMove(o_file, n_file);
|
||||||
|
|
||||||
|
SVNCommitClient cc = cm.getCommitClient();
|
||||||
|
cc.doCommit(new File[] {o_file,n_file}, false, message, false, true);
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public Vector<SVNLogEntry> log(String function_name) throws Exception {
|
||||||
|
|
||||||
|
|
||||||
|
//File file=new File(local,"script_"+scheduler_id+FILE_EXTENSIION);
|
||||||
|
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension());
|
||||||
|
|
||||||
|
|
||||||
|
//Vector v=new Vector();
|
||||||
|
Vector v=null;
|
||||||
|
if(file.exists()){
|
||||||
|
SVNLogClient logc= this.cm.getLogClient();
|
||||||
|
long limit=250;
|
||||||
|
|
||||||
|
LogEntryHandler leh=new LogEntryHandler();
|
||||||
|
|
||||||
|
logc.doLog(new File[] {file}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, false, true,limit,leh);
|
||||||
|
|
||||||
|
|
||||||
|
while(leh.getLogMessages()==null){
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
v=leh.getLogMessages();
|
||||||
|
Thread.sleep(100);
|
||||||
|
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public TreeSet<Long> revisions(String function_name) throws Exception {
|
||||||
|
|
||||||
|
//File file=new File(local,"script_"+scheduler_id+FILE_EXTENSIION);
|
||||||
|
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension());
|
||||||
|
|
||||||
|
|
||||||
|
//Vector v=new Vector();
|
||||||
|
/*
|
||||||
|
TreeSet v=new TreeSet(new Comparator(){
|
||||||
|
|
||||||
|
public int compare(Object o1, Object o2) {
|
||||||
|
long i1=((Long)o1).longValue();
|
||||||
|
long i2=((Long)o2).longValue();
|
||||||
|
if(i1>i2) return -1;
|
||||||
|
else if(i1 > i2) return +1;
|
||||||
|
else return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}); */
|
||||||
|
TreeSet v=new TreeSet();
|
||||||
|
|
||||||
|
if(file.exists()){
|
||||||
|
SVNLogClient logc= this.cm.getLogClient();
|
||||||
|
|
||||||
|
LogEntryHandler leh=new LogEntryHandler();
|
||||||
|
|
||||||
|
logc.doLog(new File[] {file}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, true, true,0,leh);
|
||||||
|
|
||||||
|
|
||||||
|
while(leh.getLogMessages()==null){
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
Vector logs=leh.getLogMessages();
|
||||||
|
|
||||||
|
Thread.sleep(100);
|
||||||
|
|
||||||
|
for(Iterator it=logs.iterator();it.hasNext(); ){
|
||||||
|
SVNLogEntry log=(SVNLogEntry)it.next();
|
||||||
|
v.add(log.getRevision());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Long firstRevision(String function_name) throws Exception {
|
||||||
|
TreeSet<Long> rev=revisions(function_name);
|
||||||
|
return rev.size()>0?rev.first():0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long lastRevision(String function_name) throws Exception {
|
||||||
|
TreeSet<Long> rev=revisions(function_name);
|
||||||
|
return rev.size()>0?rev.last():0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWhatChanged(String function_name, Long c_rev) throws Exception {
|
||||||
|
TreeSet<Long> rev=revisions(function_name);
|
||||||
|
Vector v=new Vector(rev);
|
||||||
|
String diff=null;
|
||||||
|
if(v.indexOf(c_rev)>0){
|
||||||
|
long prev=(Long)v.get(v.indexOf(c_rev)-1);
|
||||||
|
diff=diff(function_name,prev,c_rev.longValue());
|
||||||
|
if(diff!=null){
|
||||||
|
StringTokenizer st=new StringTokenizer(diff,"\n\r");
|
||||||
|
if(st.countTokens()>=4){
|
||||||
|
st.nextToken();st.nextToken();st.nextToken();st.nextToken();//st.nextToken();
|
||||||
|
diff="";
|
||||||
|
while(st.hasMoreTokens()){
|
||||||
|
diff+=st.nextToken()+"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLastChanged(String function_name) throws Exception {
|
||||||
|
TreeSet<Long> rev=revisions(function_name);
|
||||||
|
Vector v=new Vector(rev);
|
||||||
|
String diff=null;
|
||||||
|
if(rev.size()>0 && v.indexOf(rev.last())>0){
|
||||||
|
long prev=(Long)v.get(v.indexOf(rev.last())-1);
|
||||||
|
diff=diff(function_name,prev,rev.last().longValue());
|
||||||
|
if(diff!=null){
|
||||||
|
StringTokenizer st=new StringTokenizer(diff,"\n\r");
|
||||||
|
if(st.countTokens()>=4){
|
||||||
|
st.nextToken();st.nextToken();st.nextToken();st.nextToken();//st.nextToken();
|
||||||
|
diff="";
|
||||||
|
while(st.hasMoreTokens()){
|
||||||
|
diff+=st.nextToken()+"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Vector<SVNDirEntry> logTest() throws Exception {
|
||||||
|
|
||||||
|
SVNLogClient logc= this.cm.getLogClient();
|
||||||
|
long limit=50;
|
||||||
|
|
||||||
|
LogEntryHandler leh=new LogEntryHandler();
|
||||||
|
SVNURL url = SVNURL.parseURIEncoded(this.svnurl);
|
||||||
|
//logc.doList(url, SVNRevision.create(0), SVNRevision.HEAD, true, true,leh);
|
||||||
|
|
||||||
|
//while(leh.getLogDirMessages()==null){
|
||||||
|
// Thread.sleep(100);
|
||||||
|
//}
|
||||||
|
//Vector v=leh.getLogMessages();
|
||||||
|
logc.doLog(url,new String[] {}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, true, true,1,leh);
|
||||||
|
|
||||||
|
while(leh.getLogMessages()==null){
|
||||||
|
Thread.sleep(100);
|
||||||
|
}
|
||||||
|
Vector v=leh.getLogMessages();
|
||||||
|
|
||||||
|
Thread.sleep(100);
|
||||||
|
return v;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public String diff(String function_name, long start, long end) throws Exception {
|
||||||
|
|
||||||
|
//File file=new File(local,"script_"+scheduler_id+".R");
|
||||||
|
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension());
|
||||||
|
|
||||||
|
//File file1=new File(local,"script_"+scheduler_id+"_rev"+start+"_rev"+end+".diff");
|
||||||
|
String rtn=null;
|
||||||
|
if(file.exists()){
|
||||||
|
SVNDiffClient diffc= this.cm.getDiffClient();
|
||||||
|
|
||||||
|
//StringWriter sw=new StringWriter();
|
||||||
|
//BufferedWriter out = new BufferedWriter(sw);
|
||||||
|
//FileOutputStream fos=new FileOutputStream(file1) ;
|
||||||
|
ByteArrayOutputStream fos = new ByteArrayOutputStream( );
|
||||||
|
diffc.doDiff(file, SVNRevision.create(start),SVNRevision.create(start),SVNRevision.create(end), true, false,fos );
|
||||||
|
rtn=fos.toString();
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String diffWC(String function_name, long rev) throws Exception {
|
||||||
|
|
||||||
|
//File file=new File(local,"script_"+scheduler_id+".R");
|
||||||
|
//File file1=new File(local,"script_"+scheduler_id+"_rev"+start+"_rev"+end+".diff");
|
||||||
|
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension());
|
||||||
|
|
||||||
|
String rtn=null;
|
||||||
|
if(file.exists()){
|
||||||
|
SVNDiffClient diffc= this.cm.getDiffClient();
|
||||||
|
|
||||||
|
//StringWriter sw=new StringWriter();
|
||||||
|
//BufferedWriter out = new BufferedWriter(sw);
|
||||||
|
//FileOutputStream fos=new FileOutputStream(file1) ;
|
||||||
|
ByteArrayOutputStream fos = new ByteArrayOutputStream( );
|
||||||
|
diffc.doDiff(file, SVNRevision.create(rev),SVNRevision.create(rev),SVNRevision.HEAD, true, false,fos );
|
||||||
|
rtn=fos.toString();
|
||||||
|
}else{
|
||||||
|
throw new Exception("File:"+file.getPath()+" doesn't exist");
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public String getScript(String function_name, long revision,String path) throws Exception {
|
||||||
|
|
||||||
|
SVNRepository repository=this.cm.createRepository( SVNURL.parseURIEncoded(this.svnurl), false);
|
||||||
|
|
||||||
|
String filepath=function_name+getExtension();
|
||||||
|
if(path!=null && !path.trim().equals("")){
|
||||||
|
if(path.indexOf(",")>=0){
|
||||||
|
StringTokenizer st=new StringTokenizer(path,",");
|
||||||
|
boolean found=false;
|
||||||
|
while(st.hasMoreTokens() && !found){
|
||||||
|
String thispath=st.nextToken();
|
||||||
|
SVNNodeKind nodeKind1 = repository.checkPath( thispath ,revision );
|
||||||
|
if(nodeKind1==SVNNodeKind.FILE){
|
||||||
|
filepath=thispath;
|
||||||
|
found=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
filepath=path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log.debug("filepath:"+filepath);
|
||||||
|
|
||||||
|
SVNNodeKind nodeKind = repository.checkPath( filepath ,revision );
|
||||||
|
|
||||||
|
if ( nodeKind == SVNNodeKind.NONE ) {
|
||||||
|
throw new Exception( "There is no entry at '" + this.svnurl + "'." );
|
||||||
|
|
||||||
|
} else if ( nodeKind == SVNNodeKind.DIR ) {
|
||||||
|
throw new Exception( "The entry at '" + this.svnurl + "' is a directory while a file was expected." );
|
||||||
|
//System.exit( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SVNProperties fileProperties = new SVNProperties( );
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream( );
|
||||||
|
repository.getFile( filepath , revision, fileProperties , baos );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Map fileProperties1=fileProperties.asMap();
|
||||||
|
String mimeType = (String)fileProperties1.get( SVNProperty.MIME_TYPE );
|
||||||
|
boolean isTextType = SVNProperty.isTextMimeType( mimeType );
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Iterator iterator = fileProperties1.keySet( ).iterator( );
|
||||||
|
while ( iterator.hasNext( ) ) {
|
||||||
|
String propertyName = ( String ) iterator.next( );
|
||||||
|
String propertyValue = ( String ) fileProperties1.get( propertyName );
|
||||||
|
// System.out.println( "File property: " + propertyName + "=" + propertyValue );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
String rtn=null;
|
||||||
|
|
||||||
|
if ( isTextType ) {
|
||||||
|
// System.out.println( "File contents:" );
|
||||||
|
//System.out.println( );
|
||||||
|
|
||||||
|
//baos.writeTo( System.out );
|
||||||
|
//baos.writeTo( sw );
|
||||||
|
rtn=baos.toString();
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
System.out.println( "Not a text file." );
|
||||||
|
}
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initializes the library to work with a repository via
|
||||||
|
* different protocols.
|
||||||
|
*/
|
||||||
|
private static void setupLibrary() {
|
||||||
|
/*
|
||||||
|
* For using over http:// and https://
|
||||||
|
*/
|
||||||
|
DAVRepositoryFactory.setup();
|
||||||
|
/*
|
||||||
|
* For using over svn:// and svn+xxx://
|
||||||
|
*/
|
||||||
|
SVNRepositoryFactoryImpl.setup();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* For using over file:///
|
||||||
|
*/
|
||||||
|
FSRepositoryFactory.setup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.util;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Image Loader
|
||||||
|
*/
|
||||||
|
public class ImageLoader {
|
||||||
|
|
||||||
|
private HttpServletRequest request=null;
|
||||||
|
private HttpServletResponse response=null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param request request
|
||||||
|
* @param response response
|
||||||
|
*/
|
||||||
|
public ImageLoader(HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
this.request=request;
|
||||||
|
this.response=response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push Image
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void pushImage() throws Exception {
|
||||||
|
try {
|
||||||
|
|
||||||
|
response.setHeader("Content-Disposition", "inline");
|
||||||
|
|
||||||
|
FileInputStream fin=null;
|
||||||
|
if(this.request.getParameter("file")!=null && !this.request.getParameter("file").equals("")){
|
||||||
|
fin = new FileInputStream(this.request.getParameter("file"));
|
||||||
|
if(this.request.getParameter("file").toLowerCase().endsWith(".svg")){
|
||||||
|
response.setContentType("image/svg+xml");
|
||||||
|
|
||||||
|
}else{
|
||||||
|
response.setContentType("image/png");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
fin = new FileInputStream("/home/fileserv/Sharing/Public/Research/Monitors/SchedulerActivityMonitor.png");
|
||||||
|
response.setContentType("image/png");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
||||||
|
byte[] buf = new byte[1024];
|
||||||
|
int len;
|
||||||
|
while ((len = fin.read(buf)) > 0) {
|
||||||
|
// instead of writing to a ByteArrayOutputStream you can
|
||||||
|
// write to the FileOutputStream here (see the comments later
|
||||||
|
// after creating the byte[] variable called data
|
||||||
|
bos.write(buf, 0, len);
|
||||||
|
}
|
||||||
|
byte[] data = bos.toByteArray();
|
||||||
|
OutputStream out = response.getOutputStream();
|
||||||
|
out.write(data);
|
||||||
|
out.flush();
|
||||||
|
fin.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
//e.printStackTrace();
|
||||||
|
response.setContentType("html/text");
|
||||||
|
response.setStatus(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.util;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
|
||||||
|
import sun.misc.BASE64Encoder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Password encrypting
|
||||||
|
*/
|
||||||
|
public class PasswordService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Private constructor
|
||||||
|
*/
|
||||||
|
private PasswordService()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encrypt text
|
||||||
|
* @param plaintext plain text
|
||||||
|
* @return encrypted text
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static synchronized String encrypt(String plaintext) throws Exception {
|
||||||
|
MessageDigest md = null;
|
||||||
|
try {
|
||||||
|
md = MessageDigest.getInstance("SHA"); //step 2
|
||||||
|
}catch(NoSuchAlgorithmException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
md.update(plaintext.getBytes("UTF-8")); //step 3
|
||||||
|
}catch(UnsupportedEncodingException e) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte raw[] = md.digest(); //step 4
|
||||||
|
String hash = (new BASE64Encoder()).encode(raw); //step 5
|
||||||
|
return hash; //step 6
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.util;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.HttpClient;
|
||||||
|
import org.apache.commons.httpclient.methods.GetMethod;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import com.fourelementscapital.scheduler.error.ClientError;
|
||||||
|
|
||||||
|
public class ProxifyURL {
|
||||||
|
|
||||||
|
|
||||||
|
private static HttpClient httpclient = new HttpClient();
|
||||||
|
private HttpServletRequest request;
|
||||||
|
private HttpServletResponse response;
|
||||||
|
private Logger log = LogManager.getLogger(ProxifyURL.class.getName());
|
||||||
|
|
||||||
|
public ProxifyURL(HttpServletRequest request, HttpServletResponse response){
|
||||||
|
this.request=request;
|
||||||
|
this.response=response;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isProxified(String url_prefix){
|
||||||
|
String queryString=this.request.getQueryString();
|
||||||
|
String tpf=this.request.getRequestURL().toString().replace(queryString,"");
|
||||||
|
log.debug("request url p:"+tpf);
|
||||||
|
return !tpf.equalsIgnoreCase(url_prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void proxifyGet(String url_prefix,String overwrite_qs) {
|
||||||
|
try{
|
||||||
|
|
||||||
|
String queryString=overwrite_qs==null?this.request.getQueryString():overwrite_qs;
|
||||||
|
String redirecting=url_prefix+"?"+queryString;
|
||||||
|
log.debug("redirecting to:"+redirecting);
|
||||||
|
GetMethod httpget = new GetMethod(redirecting);
|
||||||
|
|
||||||
|
int respo = httpclient.executeMethod(httpget);
|
||||||
|
//saveCookie(httpget);
|
||||||
|
this.response.getOutputStream().write(httpget.getResponseBody());
|
||||||
|
httpget.releaseConnection();
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
ClientError.reportError(e, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.util;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fe.scheduler.SchedulerInitServlet;
|
||||||
|
import com.fourelementscapital.scheduler.peer.QueueFactory;
|
||||||
|
|
||||||
|
public class RestartTomcat {
|
||||||
|
|
||||||
|
|
||||||
|
private static Vector ignoredIds4Restart=new Vector();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void restartPeerLater(){
|
||||||
|
//thse 2 lines commented because, apart from scheduler task, there will be tasks also running, which will not have id.
|
||||||
|
//Vector executingIds=new QueueFactory().getExecutingIDs();
|
||||||
|
//if(executingIds.size()==0) {
|
||||||
|
int count=new QueueFactory().countExcTasksInPeer();
|
||||||
|
if(count==0) {
|
||||||
|
|
||||||
|
RestartTomcat.restartPeerNow();
|
||||||
|
}else{
|
||||||
|
Vector executingIds=new QueueFactory().getExecutingIDs();
|
||||||
|
System.out.println("RestartTomcat.java:: executingIds:"+executingIds+" ignoredIds4Restart:"+ignoredIds4Restart);
|
||||||
|
if(executingIds.containsAll(ignoredIds4Restart) && executingIds.size()==ignoredIds4Restart.size()){
|
||||||
|
RestartTomcat.restartPeerNow();
|
||||||
|
//System.out.println("RestartTomcat.java:: restarting now, it has killed id");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void restartPeerLater(int task_2b_killed){
|
||||||
|
//System.out.println("RestartTomcat.java:: restartPeerLater("+task_2b_killed+") called");
|
||||||
|
|
||||||
|
QueueFactory.setRestartRequested();
|
||||||
|
if(task_2b_killed>0){
|
||||||
|
ignoredIds4Restart.add(task_2b_killed);
|
||||||
|
}
|
||||||
|
RestartTomcat.restartPeerLater();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static void restartPeerNow(){
|
||||||
|
|
||||||
|
try{
|
||||||
|
String tempDir = System.getProperty("java.io.tmpdir");
|
||||||
|
File file=new File(tempDir+File.separator+"restart.bat");
|
||||||
|
String line;
|
||||||
|
BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
||||||
|
|
||||||
|
String service="Tomcat6";
|
||||||
|
out.write("net stop \""+service+"\" \n");
|
||||||
|
|
||||||
|
out.write("ping -n 8 localhost > nul\n");
|
||||||
|
|
||||||
|
// killing tasks in case of the related services are not stoppeed.
|
||||||
|
out.write("taskkill /f /t /im Rserve.exe \n");
|
||||||
|
out.write("taskkill /f /t /im tomcat6.exe \n");
|
||||||
|
|
||||||
|
out.write("ping -n 3 localhost > nul\n");
|
||||||
|
|
||||||
|
//copy the peer code from repository
|
||||||
|
out.write("xcopy \\\\4ecapsvsg2\\Public\\IT\\TomcatDev\\peer_classes\\. "+SchedulerInitServlet.getAppPath()+"\\WEB-INF /S /Y /D \n");
|
||||||
|
|
||||||
|
out.write("net start \""+service+"\"\n");
|
||||||
|
out.write("ping -n 3 localhost > nul\n");
|
||||||
|
|
||||||
|
out.write("EXIT \n");
|
||||||
|
out.close();
|
||||||
|
|
||||||
|
Runtime rt = Runtime.getRuntime();
|
||||||
|
String[] commandArgs = new String[]{"cmd", "/C", "start", file.getPath() };
|
||||||
|
// String[] commandArgs = new String[]{"cmd", "/C", file.getPath()};
|
||||||
|
Process proc = rt.exec(commandArgs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void restartMainServer(){
|
||||||
|
|
||||||
|
try{
|
||||||
|
//String tempDir = System.getProperty("java.io.tmpdir");
|
||||||
|
//File file=new File(tempDir+File.separator+"restart.bat");
|
||||||
|
//String line;
|
||||||
|
//BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
||||||
|
//out.write("rem restarting of service..\n");
|
||||||
|
//out.write("net stop \"Tomcat6\"\n");
|
||||||
|
//out.write("ping -n 5 localhost > nul\n");
|
||||||
|
//out.write("xcopy \\\\4ecapsvsg2\\Public\\IT\\TomcatDev\\peer_classes\\. "+SchedulerInitServlet.getAppPath()+"\\WEB-INF /S /Y \n");
|
||||||
|
//out.write("net start \"Tomcat6\"\n");
|
||||||
|
//out.close();
|
||||||
|
|
||||||
|
|
||||||
|
//Process p = Runtime.getRuntime().exec(file.getPath());
|
||||||
|
Runtime rt = Runtime.getRuntime();
|
||||||
|
String[] commandArgs = new String[]{"nohup", "/home/p2pserver/restart.sh", "&"};
|
||||||
|
Process proc = rt.exec(commandArgs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.util;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.fourelementscapital.fileutils.StringPlaceHolder;
|
||||||
|
|
||||||
|
public class StringPlaceHolder4ChildStrategy {
|
||||||
|
|
||||||
|
public static final String PATTERN = "\\{\\{(.*?)\\}\\}";
|
||||||
|
public static final String PATTERN_ATTR = "\\\"\\{\\{(.*?)\\}\\}\\\"";
|
||||||
|
|
||||||
|
public static Vector<String> getAttributePH(final String template) {
|
||||||
|
return StringPlaceHolder.getAttributePH(template, StringPlaceHolder4ChildStrategy.PATTERN_ATTR);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Vector<String> getElementPH(final String template) {
|
||||||
|
return StringPlaceHolder.getElementPH(template, StringPlaceHolder4ChildStrategy.PATTERN);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String parse(final String template, final Map values){
|
||||||
|
return StringPlaceHolder.parse(template, values, StringPlaceHolder4ChildStrategy.PATTERN);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,335 @@
|
|||||||
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package com.fe.util;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.Cookie;
|
||||||
|
import org.apache.commons.httpclient.Header;
|
||||||
|
import org.apache.commons.httpclient.HttpClient;
|
||||||
|
import org.apache.commons.httpclient.HttpMethod;
|
||||||
|
import org.apache.commons.httpclient.HttpState;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.apache.commons.httpclient.cookie.CookiePolicy;
|
||||||
|
import org.apache.commons.httpclient.methods.GetMethod;
|
||||||
|
import org.apache.commons.httpclient.methods.PostMethod;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.jsoup.Jsoup;
|
||||||
|
import org.jsoup.nodes.Document;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get RFunction Manual from Wiki
|
||||||
|
*/
|
||||||
|
public class WikiRFunctionManual {
|
||||||
|
|
||||||
|
private Logger log = LogManager.getLogger(WikiRFunctionManual.class.getName());
|
||||||
|
|
||||||
|
private String function;
|
||||||
|
private static HttpClient httpclient = new HttpClient();
|
||||||
|
|
||||||
|
//public WikiRFunctionManual(String function){
|
||||||
|
//this.function=function;
|
||||||
|
//}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public WikiRFunctionManual( ){
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Wiki HTML (old)
|
||||||
|
* @param selector selector
|
||||||
|
* @return Wiki HTML
|
||||||
|
*/
|
||||||
|
public String getWikiHTML_old(String selector) throws Exception {
|
||||||
|
try{
|
||||||
|
|
||||||
|
httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
|
||||||
|
HttpState initialState = new HttpState();
|
||||||
|
initialState.addCookie(new Cookie(".4ecap.com", "mycookie", "stuff", "/", null, false));
|
||||||
|
initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidbUserName", "Rams", "/", null, false));
|
||||||
|
// initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidb_session", "", "/", null, false));
|
||||||
|
//initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidbLoggedOut", "", "/", null, false));
|
||||||
|
initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidbUserID", "4", "/", null, false));
|
||||||
|
|
||||||
|
httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
|
||||||
|
httpclient.setState(initialState);
|
||||||
|
|
||||||
|
|
||||||
|
GetMethod httpget = new GetMethod("http://wiki.4ecap.com/4ECwiki/"+this.function);
|
||||||
|
|
||||||
|
int respo = httpclient.executeMethod(httpget);
|
||||||
|
//saveCookie(httpget);
|
||||||
|
Document doc =Jsoup.parse( httpget.getResponseBodyAsString());
|
||||||
|
httpget.releaseConnection();
|
||||||
|
saveCookie(httpget);
|
||||||
|
if(doc.select("h1.firstHeading").text().trim().equals("Login Required")){
|
||||||
|
|
||||||
|
log.debug("~~~ logging in ~~~~~~~~");
|
||||||
|
//PostMethod method = new PostMethod("http://wiki.4ecap.com/4ecapwiki/index.php?title=Special:UserLogin&action=submitlogin&type=login");
|
||||||
|
PostMethod method = new PostMethod("http://wiki.4ecap.com/4ecapwiki/index.php?title=Special:UserLogin&wpCookieCheck=login");
|
||||||
|
method.getParams().setCookiePolicy(CookiePolicy.RFC_2109);
|
||||||
|
method.addParameter("wpName", "rams");
|
||||||
|
method.addParameter("wpPassword", "FECrams");
|
||||||
|
|
||||||
|
int returnCode = httpclient.executeMethod(method);
|
||||||
|
System.out.println("!!!!!!!!!!:"+method.getResponseBodyAsString());
|
||||||
|
|
||||||
|
|
||||||
|
//Header[] h=method.getResponseHeaders();
|
||||||
|
//for(int i=0;i<h.length;i++){
|
||||||
|
// System.out.println("name:"+h[i].getName()+" value:"+h[i].getValue());
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
//System.out.println("!!!!!!!!!!:"+method.getResponseBodyAsString());
|
||||||
|
|
||||||
|
//if(returnCode==HttpStatus.SC_ACCEPTED){
|
||||||
|
saveCookie(method);
|
||||||
|
respo = httpclient.executeMethod(httpget);
|
||||||
|
doc =Jsoup.parse( httpget.getResponseBodyAsString());
|
||||||
|
//}
|
||||||
|
// System.out.println(":"+method.getResponseBodyAsString());
|
||||||
|
|
||||||
|
method.releaseConnection();
|
||||||
|
}else{
|
||||||
|
log.debug("~~~ already logged in~~~~~~~~");
|
||||||
|
}
|
||||||
|
//System.out.println("page"+content);
|
||||||
|
//HttpEntity entity = response.getEntity();
|
||||||
|
//System.out.println("content:"+doc.select("body"));
|
||||||
|
return doc.select(selector).toString() ;
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Wiki HTML
|
||||||
|
* @param wikiUsername wiki username
|
||||||
|
* @param wikiPassword wiki password
|
||||||
|
* @param wikiUrl wiki url
|
||||||
|
* @param function_name function name
|
||||||
|
* @return Wiki HTML
|
||||||
|
*/
|
||||||
|
public String getWikiHTML(String wikiUsername, String wikiPassword, String wikiUrl, String function_name) throws Exception {
|
||||||
|
try{
|
||||||
|
|
||||||
|
String rtn=null;
|
||||||
|
|
||||||
|
//String username=Config.getString("wiki.username");
|
||||||
|
//String password=Config.getString("wiki.password");
|
||||||
|
//String wikiurl=Config.getString("wiki.wikiurl");
|
||||||
|
|
||||||
|
String username=wikiUsername;
|
||||||
|
String password=wikiPassword;
|
||||||
|
String wikiurl=wikiUrl;
|
||||||
|
|
||||||
|
String url = wikiurl+"api.php?action=login&lgname="+username+"&lgpassword="+password+"&format=xml";
|
||||||
|
//System.out.println(">>> url : " + url);
|
||||||
|
|
||||||
|
|
||||||
|
//PostMethod method = new PostMethod("http://wiki.4ecap.com/4ecapwiki/api.php?action=login&lgname=Rams&lgpassword=FECrams");
|
||||||
|
PostMethod method = new PostMethod(url);
|
||||||
|
|
||||||
|
int returnCode = httpclient.executeMethod(method);
|
||||||
|
|
||||||
|
if(returnCode==HttpStatus.SC_OK){
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//String st=getToken(method,"4ecapwikidbToken");
|
||||||
|
|
||||||
|
String st=getToken(method.getResponseBodyAsString());
|
||||||
|
|
||||||
|
log.debug("output:"+st);
|
||||||
|
|
||||||
|
PostMethod method1 = new PostMethod(wikiurl+"api.php?action=login&lgname="+username+"&lgpassword="+password+"&lgtoken="+st);
|
||||||
|
|
||||||
|
returnCode = httpclient.executeMethod(method1);
|
||||||
|
method1.releaseConnection();
|
||||||
|
if(returnCode ==HttpStatus.SC_OK){
|
||||||
|
PostMethod method2 = new PostMethod(wikiurl+"index.php?action=render&title="+function_name);
|
||||||
|
returnCode = httpclient.executeMethod(method2);
|
||||||
|
rtn=method2.getResponseBodyAsString();
|
||||||
|
method2.releaseConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
method.releaseConnection();
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}catch(Exception e){
|
||||||
|
//e.printStackTrace();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* new wiki api pushes the token in body, earlier it used to be in header as cookie
|
||||||
|
* @param response
|
||||||
|
* @return token
|
||||||
|
*/
|
||||||
|
private String getToken(String response){
|
||||||
|
//Pattern p=Pattern.compile("^(.*?token=\")(.*?)(\".*?)$");
|
||||||
|
Pattern p=Pattern.compile("(token=\")(.*?)(\")"); //simplified
|
||||||
|
Matcher matcher = p.matcher(response);
|
||||||
|
String token=null;
|
||||||
|
if(matcher.find() && matcher.groupCount()>2){
|
||||||
|
token=matcher.group(2);
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get token
|
||||||
|
* @param method method
|
||||||
|
* @param tokenname token name
|
||||||
|
* @return token
|
||||||
|
*/
|
||||||
|
private String getToken2 (HttpMethod method, String tokenname) {
|
||||||
|
|
||||||
|
Header[] h=method.getResponseHeaders();
|
||||||
|
|
||||||
|
String rtn="";
|
||||||
|
|
||||||
|
for(int i=0;i<h.length;i++){
|
||||||
|
String headerName = h[i].getName();
|
||||||
|
String headerValue = h[i].getValue();
|
||||||
|
|
||||||
|
log.debug("header:"+headerName+" headerValue:"+headerValue);
|
||||||
|
|
||||||
|
|
||||||
|
if (headerName == null && headerValue == null) {
|
||||||
|
// No more headers
|
||||||
|
//break;
|
||||||
|
}
|
||||||
|
if ("Set-Cookie".equalsIgnoreCase(headerName)) {
|
||||||
|
// Parse cookie
|
||||||
|
String[] fields = headerValue.split(";\\s*");
|
||||||
|
|
||||||
|
String cookieValue = fields[0];
|
||||||
|
String[] cookieValues=cookieValue.split("=");
|
||||||
|
String expires = null;
|
||||||
|
String path = null;
|
||||||
|
String domain = null;
|
||||||
|
boolean secure = false;
|
||||||
|
|
||||||
|
// Parse each field
|
||||||
|
for (int j=1; j<fields.length; j++) {
|
||||||
|
if ("secure".equalsIgnoreCase(fields[j])) {
|
||||||
|
secure = true;
|
||||||
|
} else if (fields[j].indexOf('=') > 0) {
|
||||||
|
|
||||||
|
String[] f = fields[j].split("=");
|
||||||
|
if ("expires".equalsIgnoreCase(f[0])) {
|
||||||
|
expires = f[1];
|
||||||
|
} else if ("domain".equalsIgnoreCase(f[0])) {
|
||||||
|
domain = f[1];
|
||||||
|
} else if ("path".equalsIgnoreCase(f[0])) {
|
||||||
|
path = f[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//if(cookieValues.length==2 && cookieValues[0].equals("4ecapwikidbToken") ){
|
||||||
|
if(cookieValues.length==2 && cookieValues[0].equals(tokenname) ){
|
||||||
|
//httpclient.getState().addCookie(new Cookie(".4ecap.com", cookieValues[0], cookieValues[1], "/", null, false) );
|
||||||
|
rtn=cookieValues[1];
|
||||||
|
}
|
||||||
|
// Save the cookie...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rtn;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save cookie
|
||||||
|
* @param method method
|
||||||
|
*/
|
||||||
|
private void saveCookie(HttpMethod method) {
|
||||||
|
|
||||||
|
Header[] h=method.getResponseHeaders();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<h.length;i++){
|
||||||
|
String headerName = h[i].getName();
|
||||||
|
String headerValue = h[i].getValue();
|
||||||
|
|
||||||
|
if (headerName == null && headerValue == null) {
|
||||||
|
// No more headers
|
||||||
|
//break;
|
||||||
|
}
|
||||||
|
if ("Set-Cookie".equalsIgnoreCase(headerName)) {
|
||||||
|
// Parse cookie
|
||||||
|
String[] fields = headerValue.split(";\\s*");
|
||||||
|
|
||||||
|
String cookieValue = fields[0];
|
||||||
|
String[] cookieValues=cookieValue.split("=");
|
||||||
|
String expires = null;
|
||||||
|
String path = null;
|
||||||
|
String domain = null;
|
||||||
|
boolean secure = false;
|
||||||
|
|
||||||
|
// Parse each field
|
||||||
|
for (int j=1; j<fields.length; j++) {
|
||||||
|
if ("secure".equalsIgnoreCase(fields[j])) {
|
||||||
|
secure = true;
|
||||||
|
} else if (fields[j].indexOf('=') > 0) {
|
||||||
|
|
||||||
|
String[] f = fields[j].split("=");
|
||||||
|
if ("expires".equalsIgnoreCase(f[0])) {
|
||||||
|
expires = f[1];
|
||||||
|
} else if ("domain".equalsIgnoreCase(f[0])) {
|
||||||
|
domain = f[1];
|
||||||
|
} else if ("path".equalsIgnoreCase(f[0])) {
|
||||||
|
path = f[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(cookieValues.length==2){
|
||||||
|
httpclient.getState().addCookie(new Cookie(".4ecap.com", cookieValues[0], cookieValues[1], "/", null, false) );
|
||||||
|
}
|
||||||
|
// Save the cookie...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Cookie[] cookies = httpclient.getState().getCookies();
|
||||||
|
for (int i = 0; i < cookies.length; i++) {
|
||||||
|
Cookie cookie = cookies[i];
|
||||||
|
System.err.println(
|
||||||
|
"Cookie: " + cookie.getName() +
|
||||||
|
", Value: " + cookie.getValue() +
|
||||||
|
//", IsPersistent?: " + cookie.isPersistent() +
|
||||||
|
", Expiry Date: " + cookie.getExpiryDate() +
|
||||||
|
//", Comment: " + cookie.getComment()+
|
||||||
|
", path: " + cookie.getPath()+
|
||||||
|
", domain: " + cookie.getDomain());
|
||||||
|
|
||||||
|
//cookie.setValue("My own value");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# DEFAULT CACHE REGION
|
||||||
|
jcs.default=DC
|
||||||
|
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
|
||||||
|
jcs.default.cacheattributes.MaxObjects=1000
|
||||||
|
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
|
||||||
|
jcs.default.cacheattributes.UseMemoryShrinker=false
|
||||||
|
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
|
||||||
|
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
|
||||||
|
jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes
|
||||||
|
jcs.default.elementattributes.IsEternal=false
|
||||||
|
jcs.default.elementattributes.MaxLifeSeconds=21600
|
||||||
|
jcs.default.elementattributes.IdleTime=1800
|
||||||
|
jcs.default.elementattributes.IsSpool=true
|
||||||
|
jcs.default.elementattributes.IsRemote=true
|
||||||
|
jcs.default.elementattributes.IsLateral=true
|
||||||
|
|
||||||
|
# PRE-DEFINED CACHE REGIONS
|
||||||
|
jcs.region.testCache1=DC
|
||||||
|
jcs.region.testCache1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
|
||||||
|
jcs.region.testCache1.cacheattributes.MaxObjects=1000
|
||||||
|
jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
|
||||||
|
jcs.region.testCache1.cacheattributes.UseMemoryShrinker=false
|
||||||
|
jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600
|
||||||
|
jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60
|
||||||
|
jcs.region.testCache1.cacheattributes.MaxSpoolPerRun=500
|
||||||
|
jcs.region.testCache1.elementattributes=org.apache.jcs.engine.ElementAttributes
|
||||||
|
jcs.region.testCache1.elementattributes.IsEternal=false
|
||||||
|
|
||||||
|
# AVAILABLE AUXILIARY CACHES
|
||||||
|
jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
|
||||||
|
jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
|
||||||
|
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
|
||||||
|
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000
|
||||||
|
jcs.auxiliary.DC.attributes.MaxKeySize=1000000
|
||||||
|
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=5000
|
||||||
|
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
|
||||||
|
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{{subject}}R Function [[function_name]] modified by [[current_user]]
|
||||||
|
{{/subject}}The following changes were made by [[current_user]] on R Function [[function_name]]
|
||||||
|
|
||||||
|
|
||||||
|
<div style='border:1px solid grey;padding:10px;margin-bottom:20px;'>
|
||||||
|
<pre>
|
||||||
|
[[diff]]
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
User comments:
|
||||||
|
<div style='background-color:#e0e0e0;border:none;padding:10px; color:#0064EA;'>
|
||||||
|
[[comments]]
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div style='border:0px solid #b0b0b0;margin-top:10px;'>
|
||||||
|
<small style='font-size:.7em'>To stop this alert remove your name on "Notification of Changes" column on Themes and Notification tab of the function</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{{subject}}R Function [[task_name]] modified by [[current_user]]
|
||||||
|
{{/subject}}The following changes were made by [[current_user]] on Scheduler Script [[task_name]] (ID [[scheduler_id]])
|
||||||
|
|
||||||
|
|
||||||
|
<div style='border:1px solid grey;padding:10px;margin-bottom:20px;'>
|
||||||
|
<pre>
|
||||||
|
[[diff]]
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
User comments:
|
||||||
|
<div style='background-color:#e0e0e0;border:none;padding:10px; color:#0064EA;'>
|
||||||
|
[[comments]]
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div style='border:0px solid #b0b0b0;margin-top:10px;'>
|
||||||
|
<small style='font-size:.7em'>To stop this alert remove your name on "Notification of Changes" column on Themes and Notification tab of the script</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
#should be used only in test server
|
||||||
|
#db_testing_version=[Development snapshot & Live data ]
|
||||||
|
|
||||||
|
#production server color #EDF5FF //l.blue
|
||||||
|
#test server color #FBEFFB //l.red
|
||||||
|
#tab_body_bg=#FBEFFB
|
||||||
|
|
||||||
|
load_balancing_server=4ecapsvsg2
|
||||||
|
|
||||||
|
log_error_folder=/home/p2pserver/logs/
|
||||||
|
lucene_index_folder=/home/p2pserver/lucene/
|
||||||
|
|
||||||
|
log_error_to_console=yes
|
||||||
|
log_error_to_console_full=yes
|
||||||
|
|
||||||
|
r_script_init=/mnt/public/Libs/Rinit.r
|
||||||
|
|
||||||
|
r_function_source_folder=/home/fileserv/Sharing/Public/Libs/R Libs/4ECAPFunctions/
|
||||||
|
r_function_path_url_prefix=\\\\10.153.64.10\\Public\\Libs\\R Libs\\4ECAPFunctions
|
||||||
|
|
||||||
|
r_auto_source_inc_folder=/home/fileserv/Sharing/Public/Libs/
|
||||||
|
r_auto_source_inc_prefix=//10.153.64.10/Public/Libs/R Libs/4ECAPFunctions/
|
||||||
|
|
||||||
|
#follwing file will be updated whenever user change the order of the folder.
|
||||||
|
r_source_4e_function_file=/home/fileserv/Sharing/Public/Libs/source_R_editor_modifed.r
|
||||||
|
r_source_4e_function_file_path_perfix=\\\\\\\\10.153.64.10\\\\Public\\\\Libs\\\\
|
||||||
|
|
||||||
|
wiki.username=Rams
|
||||||
|
wiki.password=FECrams
|
||||||
|
wiki.wikiurl=https://wiki.4ecap.com/4ecapwiki/
|
||||||
|
|
||||||
|
#p2p.taskpip=taskpip11
|
||||||
|
#p2p.groupname=DiscoveryServer11
|
||||||
|
p2p.ignorejri=true
|
||||||
|
|
||||||
|
bloomberg.server.servletAPI.url=http://10.153.64.11:9090/bldb/schedulerAPI
|
||||||
|
|
||||||
|
iexec_source_folder=/home/p2pserver/iexec_source/
|
||||||
|
|
||||||
|
hsql.queue.datafile=/home/p2pserver/queue/queue2
|
||||||
|
|
||||||
|
scheduler.report.folder=Z:/Research/Monitors/Scheduler/MonitorTab/
|
||||||
|
|
||||||
|
package.repository.unix=/home/fileserv/Sharing/Public/Libs/R Libs/4ECAPPackageUNIX
|
||||||
|
package.repository.win=/home/fileserv/Sharing/Public/Libs/R Libs/4ECAPPackage
|
||||||
|
|
||||||
|
#not case sensitive
|
||||||
|
superuser.enable=rams,xavier,ls,be,andy,ari
|
||||||
|
|
||||||
|
#make this as NIO Server (ExecuteR Server)
|
||||||
|
#true or false
|
||||||
|
#nio.server.mode=true
|
||||||
|
|
||||||
|
#needed for peer to connect
|
||||||
|
#nio.server.address=10.153.64.45
|
||||||
|
#needed both by server and peer bind the port on server side and open port on peerside.
|
||||||
|
#nio.server.port=1818
|
||||||
|
|
||||||
|
svn_user=svn4Euser
|
||||||
|
svn_pwd=4ESVN052011
|
||||||
|
svn_url=svn://10.153.64.10/bldb
|
||||||
|
svn_local_path=/bldb
|
||||||
|
|
||||||
|
svn_user_r=svn4Euser
|
||||||
|
svn_pwd_r=4ESVN052011
|
||||||
|
svn_url_r=svn://10.153.64.10/rfunctions
|
||||||
|
svn_local_path_r=/rfunctions
|
||||||
|
|
||||||
|
svn_url_ie=svn://10.153.64.10/iexec
|
||||||
|
svn_local_path_ie=/iexec
|
||||||
|
|
||||||
|
#ignore phone alarm for these error codes
|
||||||
|
ignore.phone.alarm=2315,2317,2318,2319
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------@deprecated---------------------------------------------------------------
|
||||||
|
#the followings are redundant and no longer being actively used.
|
||||||
|
|
||||||
|
rtrs_download_xml_reqfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Queries/
|
||||||
|
rtrs_download_xml_resfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Responses/
|
||||||
|
rtrs_download_xml_statusfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Status/
|
||||||
|
|
||||||
|
bloomberg_synchronization=no
|
||||||
|
#scheduler_services_on=rhinoscript,rhinoscript1,rscriptlowpriority
|
||||||
|
#scheduler_services_on=bb_download,rscript,rhinoscript,rscript4reuters,rscriptlowpriority,rscript4bb,rscript4rserve,rscript4rservelow,rscript4rserveunix
|
||||||
|
scheduler_services_on=rhinoscript1,rhinoscript4priority
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
#should be used only in test server
|
||||||
|
#db_testing_version=[Development snapshot & Live data ]
|
||||||
|
|
||||||
|
#production server color #EDF5FF //l.blue
|
||||||
|
#test server color #FBEFFB //l.red
|
||||||
|
#tab_body_bg=#FBEFFB
|
||||||
|
|
||||||
|
load_balancing_server=4ecappcsg21
|
||||||
|
|
||||||
|
log_error_folder=c:\\tomcat\\bldb_logs\\
|
||||||
|
lucene_index_folder=c:\\tomcat\\index\\
|
||||||
|
|
||||||
|
log_error_to_console=yes
|
||||||
|
log_error_to_console_full=yes
|
||||||
|
|
||||||
|
r_script_init=c:\\rJava\\r_init.txt
|
||||||
|
|
||||||
|
r_function_source_folder=c:\\testing_data\\r_functions\\
|
||||||
|
r_function_path_url_prefix=\\\\10.153.64.10\\Public\\Libs\\R Libs\\test2remove_4ECAPFunctions
|
||||||
|
|
||||||
|
r_auto_source_inc_folder=//10.153.64.10/Public/Libs/R Libs/test2remove_4ECAPFunctions/Libs/
|
||||||
|
r_auto_source_inc_prefix=//10.153.64.10/Public/Libs/R Libs/4ECAPFunctions/
|
||||||
|
|
||||||
|
#follwing file will be updated whenever user change the order of the folder.
|
||||||
|
r_source_4e_function_file=//10.153.64.10/Public/Libs/source_R_editor_modifed_tmp_2delete.r
|
||||||
|
r_source_4e_function_file_path_perfix=\\\\\\\\10.153.64.10\\\\Public\\\\Libs\\\\
|
||||||
|
|
||||||
|
wiki.username=Scheduler
|
||||||
|
wiki.password=Wd2MMjh4eBy4xVEGz4PVMagWUPszdSqKhNSe25HkqzdbEQS47B
|
||||||
|
wiki.wikiurl=https://wiki.4ecap.com/4ecapwiki/
|
||||||
|
|
||||||
|
p2p.taskpip=taskpip22
|
||||||
|
p2p.groupname=DiscoveryServer22
|
||||||
|
#p2p.taskpip.helper=taskpip_helper22
|
||||||
|
p2p.cachepath=C:\\tomcat\\
|
||||||
|
#p2p.ignorejri=false
|
||||||
|
|
||||||
|
bloomberg.server.servletAPI.url=http://4ecapsvsg2:8080/bldb/schedulerAPI
|
||||||
|
|
||||||
|
iexec_source_folder=c:\\testing_data\\iexec\\
|
||||||
|
|
||||||
|
hsql.queue.datafile=c:\\rnd\\hsqldb-2.2.9\\scheduler_data\\queue
|
||||||
|
|
||||||
|
scheduler.report.folder=Z:/Research/Monitors/Scheduler/MonitorTab/
|
||||||
|
|
||||||
|
package.repository.unix=Z:\\Libs\\R Libs\\4ECAPPackageUNIX
|
||||||
|
package.repository.win=Z:\\Libs\\R Libs\\4ECAPPackage
|
||||||
|
|
||||||
|
#not case sensitive
|
||||||
|
superuser.enable=raMs,xavier,be,ls
|
||||||
|
|
||||||
|
#make this as NIO Server (ExecuteR Server)
|
||||||
|
#true or false
|
||||||
|
nio.server.mode=false
|
||||||
|
|
||||||
|
#needed for peer to connect
|
||||||
|
#nio.server.address=10.153.64.19
|
||||||
|
#needed both by server and peer bind the port on server side and open port on peerside.
|
||||||
|
#nio.server.port=1818
|
||||||
|
|
||||||
|
svn_user=svn4Euser
|
||||||
|
svn_pwd=4ESVN052011
|
||||||
|
svn_url=svn://10.153.64.10/scheduler_test
|
||||||
|
svn_local_path=C:\\temp_repotest1\\sc5
|
||||||
|
|
||||||
|
svn_user_r=svn4Euser
|
||||||
|
svn_pwd_r=4ESVN052011
|
||||||
|
svn_url_r=svn://10.153.64.10/rfunctions_test
|
||||||
|
svn_local_path_r=C:\\temp_repotest1\\rfunctions
|
||||||
|
|
||||||
|
#svn_url_ie=svn://10.153.64.10/iexec
|
||||||
|
#svn_local_path_ie=C:\\temp_repotest1\\iexec
|
||||||
|
svn_url_ie=svn://10.153.64.10/iexec
|
||||||
|
svn_local_path_ie=C:\\temp_repotest1\\iexec
|
||||||
|
|
||||||
|
|
||||||
|
#for peers executing R Engine and RServe scripts.
|
||||||
|
r_script_console_logs=\\\\10.153.64.10\\Public\\Logs\\scheduler_rscripts\\
|
||||||
|
|
||||||
|
log_executeR_folder=c:\\tomcat\\webapps\\bldb\\executeRlogs\\
|
||||||
|
|
||||||
|
peer_home=C:\\4E_Peer\\
|
||||||
|
|
||||||
|
#ignore.authentication=true
|
||||||
|
#ignore.authentication=false;
|
||||||
|
#p2p.nomulticast=true
|
||||||
|
p2p.nomulticast=false
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------@deprecated---------------------------------------------------------------
|
||||||
|
#the followings are redundant and no longer being actively used.
|
||||||
|
|
||||||
|
rtrs_download_xml_reqfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Queries/
|
||||||
|
rtrs_download_xml_resfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Responses/
|
||||||
|
rtrs_download_xml_statusfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Status/
|
||||||
|
|
||||||
|
bloomberg_synchronization=no
|
||||||
|
scheduler_services_on=rhinoscript1,rhinoscript4priority
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE jxta:PGA>
|
||||||
|
<jxta:PGA xmlns:jxta="http://jxta.org">
|
||||||
|
<GID>
|
||||||
|
urn:jxta:uuid-2810413B3CC24DB483F4BAE601CF875002
|
||||||
|
</GID>
|
||||||
|
<MSID>
|
||||||
|
urn:jxta:uuid-29974C1D718F4E79A3A5E196818448850426E2ACBCB04EF6BF8F83B2A2C2E5CC06
|
||||||
|
</MSID>
|
||||||
|
<Name>
|
||||||
|
Tomcat Bridge Group
|
||||||
|
</Name>
|
||||||
|
<Desc>
|
||||||
|
Prototype app for demonstrating Tomcat Bridge Group
|
||||||
|
</Desc>
|
||||||
|
</jxta:PGA>
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
peer.sendtask.received=Task Received from server
|
||||||
|
peer.sendtask.noroom2execute=Task failed, no room for execution
|
||||||
|
peer.sendtask.unknown=Error occured, Msg:[error_message]
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<!-- STRATEGY DESCRIPTION: -->
|
||||||
|
<STRATEGY name="[[name]]" expireonfullfill="true" automate="AUT1">
|
||||||
|
|
||||||
|
<QUANTITY>
|
||||||
|
</QUANTITY>
|
||||||
|
|
||||||
|
<PRICE>
|
||||||
|
</PRICE>
|
||||||
|
|
||||||
|
<MAXQUANTITY>
|
||||||
|
</MAXQUANTITY>
|
||||||
|
|
||||||
|
<MAXQTYPRICE>
|
||||||
|
</MAXQTYPRICE>
|
||||||
|
</STRATEGY>
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
<mapping>
|
||||||
|
<scheduler>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
valid settings
|
||||||
|
days=possitive numbers only i.e 2 is yesterday and today (last value of today)
|
||||||
|
hour: 00-23
|
||||||
|
minute: 00-59
|
||||||
|
weekday
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!-- uncomment to activate scheduled job
|
||||||
|
<job days="2" hour="08" minute="20" weekday="MONDAY"/>
|
||||||
|
<job days="2" hour="08" minute="20" weekday="TUESDAY"/>
|
||||||
|
<job days="2" hour="08" minute="42" weekday="WEDNESDAY"/>
|
||||||
|
<job days="2" hour="08" minute="20" weekday="THURSDAY"/>
|
||||||
|
<job days="2" hour="08" minute="20" weekday="FRIDAY"/>
|
||||||
|
<job days="5" hour="08" minute="20" weekday="SATURDAY"/>
|
||||||
|
-->
|
||||||
|
|
||||||
|
</scheduler>
|
||||||
|
|
||||||
|
<commodity name="CL" bloombergmarketsector="Comdty">
|
||||||
|
<!--
|
||||||
|
Use comma for multiple tickers
|
||||||
|
-->
|
||||||
|
<ticker>
|
||||||
|
CLX8,CLZ8,CLF9,CLG9,CLH9,CLJ9,CLK9,CLM9,CLN9,
|
||||||
|
CLQ9,CLU9,CLV9,CLX9,CLZ9,CLF0
|
||||||
|
</ticker>
|
||||||
|
<field bloomberg="PX_LAST" sqlserver="Close Price"/>
|
||||||
|
<field bloomberg="PX_VOLUME" sqlserver="Volume"/>
|
||||||
|
<field bloomberg="OPEN_INT" sqlserver="Open Interest"/>
|
||||||
|
|
||||||
|
</commodity>
|
||||||
|
|
||||||
|
<commodity name="CL" bloombergmarketsector="Index">
|
||||||
|
<ticker>
|
||||||
|
NYM1CNCL
|
||||||
|
</ticker>
|
||||||
|
<field bloomberg="PX_LAST" sqlserver="Commercial Long"/>
|
||||||
|
</commodity>
|
||||||
|
|
||||||
|
</mapping>
|
||||||
|
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
ignore.alarm=false
|
||||||
|
|
||||||
|
#imonitor.url=http://10.153.64.31:5001/iMonitor/Responder.aspx
|
||||||
|
imonitor.ip=10.153.64.31
|
||||||
|
imonitor.port=5655
|
||||||
|
|
||||||
|
#dump XML to file instead of sending it to iMonitor API
|
||||||
|
#alarm.dump=false
|
||||||
|
alarm.dump=true
|
||||||
|
alarm.dump.folder=/temp/scheduler-alarm/
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
database_wiki_connstring=jdbc:mysql://wiki.4ecap.com/4EwikiDB1?user=4ecremoteuser&password=4ecrmt2011
|
||||||
|
database_wiki_driver=com.mysql.jdbc.Driver
|
||||||
|
|
||||||
|
wiki_login_url=https://wiki.4ecap.com
|
||||||
|
|
||||||
|
#superuser_password_folder=/home/p2pserver/logs/
|
||||||
|
superuser_password_folder=c:\\tmp\\
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
db_close_timeout=20
|
||||||
|
db_config_path=/mnt/public/Libs/.4E.config
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
### This log4j.properties is to handle DWR (directwebremoting) only. DWR doesn't support log4j2. ###
|
||||||
|
### Without this, DWR will generate text to console (level:TRACE?). ###
|
||||||
|
|
||||||
|
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||||
|
log4j.appender.stdout.Target=System.out
|
||||||
|
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.stdout.layout.ConversionPattern=%4p %d{HH:mm:ss,SSS} %C - %m%n
|
||||||
|
|
||||||
|
log4j.rootLogger=ERROR
|
||||||
|
log4j.logger.org.directwebremoting=ERROR,stdout
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Configuration status="WARN">
|
||||||
|
<Appenders>
|
||||||
|
<Console name="CONSOLE" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="%4p %d{HH:mm:ss,SSS} %C - %m%n" />
|
||||||
|
</Console>
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<Root level="ERROR">
|
||||||
|
<AppenderRef ref="CONSOLE"/>
|
||||||
|
</Root>
|
||||||
|
<Logger name="log4j.logger.com.fe" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.com.fourelementscapital.scheduler.config.Config" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.com.fe.client.SchedulerMgmt" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.com.fe.client.LoginMgmt" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.com.fe.scheduler.balance.hsqldb" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.net.bull.javamelody" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.org.quartz" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.org.lobobrowser" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="log4j.logger.org.directwebremoting" level="ERROR" additivity="false">
|
||||||
|
<Appender-ref ref="CONSOLE" />
|
||||||
|
</Logger>
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
#============================================================================
|
||||||
|
# Configure Main Scheduler Properties
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
org.quartz.scheduler.instanceName = CakeNoteScheduler
|
||||||
|
org.quartz.scheduler.instanceId = AUTO
|
||||||
|
org.quartz.scheduler.rmi.export = false
|
||||||
|
org.quartz.scheduler.rmi.proxy = false
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# Configure ThreadPool
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
|
||||||
|
org.quartz.threadPool.threadCount = 12
|
||||||
|
org.quartz.threadPool.threadPriority = 5
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# Configure JobStore
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
org.quartz.jobStore.misfireThreshold = 60000
|
||||||
|
|
||||||
|
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
|
||||||
|
|
||||||
|
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
|
||||||
|
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
|
||||||
|
#org.quartz.jobStore.useProperties = false
|
||||||
|
#org.quartz.jobStore.dataSource = myDS
|
||||||
|
#org.quartz.jobStore.tablePrefix = QRTZ_
|
||||||
|
#org.quartz.jobStore.isClustered = false
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# Configure Datasources
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver
|
||||||
|
#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev
|
||||||
|
#org.quartz.dataSource.myDS.user = jhouse
|
||||||
|
#org.quartz.dataSource.myDS.password =
|
||||||
|
#org.quartz.dataSource.myDS.maxConnections = 5
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# JobInitializationPlugin (xml declarative way to trigger jobs)
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
|
||||||
|
#org.quartz.plugin.jobInitializer.fileName = quartz_jobs.xml
|
||||||
|
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
|
||||||
|
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# Configure JobStore
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
#org.quartz.jobStore.misfireThreshold = 60000
|
||||||
|
|
||||||
|
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
|
||||||
|
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
|
||||||
|
#org.quartz.jobStore.useProperties = false
|
||||||
|
#org.quartz.jobStore.dataSource = myDS
|
||||||
|
#org.quartz.jobStore.tablePrefix = QRTZ_
|
||||||
|
#org.quartz.jobStore.isClustered = false
|
||||||
|
|
||||||
|
#org.quartz.jobStore.clusterCheckinInterval = 20000
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# Configure Datasources
|
||||||
|
#============================================================================
|
||||||
|
|
||||||
|
org.quartz.dataSource.myDS.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
|
||||||
|
org.quartz.dataSource.myDS.URL = jdbc:sqlserver://10.153.64.3:1433;databaseName=quartz_scheduler;integratedSecurity=false
|
||||||
|
org.quartz.dataSource.myDS.user = dbuser11
|
||||||
|
org.quartz.dataSource.myDS.password = dbuser11
|
||||||
|
org.quartz.dataSource.myDS.maxConnections = 5
|
||||||
|
org.quartz.dataSource.myDS.validationQuery=select 0 from dual
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData
|
||||||
|
http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"
|
||||||
|
version="1.5" overwrite-existing-jobs="true">
|
||||||
|
<job>
|
||||||
|
<job-detail1>
|
||||||
|
<name>testjob</name>
|
||||||
|
<group>CAKENOTE_GROUP</group>
|
||||||
|
<description>Basic test job</description>
|
||||||
|
<job-class>com.fe.scheduler.TestJob</job-class>
|
||||||
|
<job-data-map allows-transient-data="false">
|
||||||
|
<entry>
|
||||||
|
<key>param1</key>
|
||||||
|
<value>value1</value>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<key>param2</key>
|
||||||
|
<value>value2</value>
|
||||||
|
</entry>
|
||||||
|
</job-data-map>
|
||||||
|
</job-detail1>
|
||||||
|
<trigger1>
|
||||||
|
<simple>
|
||||||
|
<name>my-trigger</name>
|
||||||
|
<group>MYTRIGGER_GROUP</group>
|
||||||
|
<job-name>testjob</job-name>
|
||||||
|
<job-group>CAKENOTE_GROUP</job-group>
|
||||||
|
<!-- repeat indefinitely every 5 seconds -->
|
||||||
|
<repeat-count>-1</repeat-count>
|
||||||
|
<repeat-interval>5000</repeat-interval>
|
||||||
|
</simple>
|
||||||
|
</trigger1>
|
||||||
|
</job>
|
||||||
|
</quartz>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{{subject}}R Function [[task_name]] modified by [[current_user]]
|
||||||
|
{{/subject}}The following changes were made by [[current_user]] on Scheduler Script [[task_name]] (ID [[scheduler_id]])
|
||||||
|
|
||||||
|
|
||||||
|
<div style='border:1px solid grey;padding:10px;margin-bottom:20px;'>
|
||||||
|
<pre>
|
||||||
|
[[diff]]
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
User comments:
|
||||||
|
<div style='background-color:#e0e0e0;border:none;padding:10px; color:#0064EA;'>
|
||||||
|
[[comments]]
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div style='border:0px solid #b0b0b0;margin-top:10px;'>
|
||||||
|
<small style='font-size:.7em'>To stop this alert remove your name on "Notification of Changes" column on Themes and Notification tab of the script</small>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
Release Notes for version 2.2.0
|
||||||
|
|
||||||
|
iTASK RELATED
|
||||||
|
==============
|
||||||
|
o :
|
||||||
|
|
||||||
|
|
||||||
|
Release Notes for version 2.1.0
|
||||||
|
|
||||||
|
iTASK RELATED
|
||||||
|
==============
|
||||||
|
|
||||||
|
o 7535 : Improve the handling of scheduler errors (Skip phone alert for error codes : 2315, 2317, 2318, 2319).
|
||||||
|
o 7569 : Port queries to MariaDB nomenclature, move queries to DAL.
|
||||||
|
o 7745 : If script name contains '&' then no alarm is sent to iMonitor (replace escape chars for XML).
|
||||||
|
o 7858 : Add release note.
|
||||||
|
o 8169 : Remove hardcoding of infrastructure from scheduler code and move it to config.
|
||||||
|
o 8195 : Move database timeout to config.
|
||||||
|
o 8207 : Optimize scheduler queries.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Release Notes for version 2.0.0
|
||||||
|
|
||||||
|
This is the original production version
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
<!DOCTYPE dwr PUBLIC
|
||||||
|
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
|
||||||
|
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">
|
||||||
|
|
||||||
|
<dwr>
|
||||||
|
<allow>
|
||||||
|
|
||||||
|
<create creator="new" javascript="AdminMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.AdminMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
<create creator="new" javascript="SchedulerMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.SchedulerMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
<create creator="new" javascript="RFunctionMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.RFunctionMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
<create creator="new" javascript="ExecuteRMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.ExecuteRMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
<create creator="new" javascript="IExecMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.IExecMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
<create creator="new" javascript="LoginMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.LoginMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
<create creator="new" javascript="MenuMgmt" scope="page">
|
||||||
|
<param name="class" value="com.fe.client.MenuMgmt"/>
|
||||||
|
</create>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- convert match="com.fe.ValueObject" converter="bean"/ -->
|
||||||
|
<convert converter="bean" match="com.fourelementscapital.db.vo.*"/>
|
||||||
|
|
||||||
|
<convert match="java.lang.Exception" converter="exception"/>
|
||||||
|
<convert match="java.lang.StackTraceElement" converter="bean"/>
|
||||||
|
<convert match="com.fourelementscapital.scheduler.rscript.RScript" converter="bean"/>
|
||||||
|
<convert match="com.fourelementscapital.scheduler.pluggin.PlugginData" converter="bean"/>
|
||||||
|
<convert match="com.fourelementscapital.scheduler.engines.ScheduledTaskField" converter="bean"/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</allow>
|
||||||
|
|
||||||
|
|
||||||
|
</dwr>
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
|
||||||
|
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Configuration file for UrlRewriteFilter
|
||||||
|
http://tuckey.org/urlrewrite/
|
||||||
|
|
||||||
|
-->
|
||||||
|
<urlrewrite>
|
||||||
|
|
||||||
|
<rule>
|
||||||
|
<note>
|
||||||
|
The rule means that requests to /test/status/ will be redirected to /rewrite-status
|
||||||
|
the url will be rewritten.
|
||||||
|
</note>
|
||||||
|
<from>/test/status/</from>
|
||||||
|
<to type="redirect">%{context-path}/rewrite-status</to>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
|
||||||
|
<outbound-rule>
|
||||||
|
<note>
|
||||||
|
The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url)
|
||||||
|
the url /rewrite-status will be rewritten to /test/status/.
|
||||||
|
|
||||||
|
The above rule and this outbound-rule means that end users should never see the
|
||||||
|
url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks
|
||||||
|
in your pages.
|
||||||
|
</note>
|
||||||
|
<from>/rewrite-status</from>
|
||||||
|
<to>/test/status/</to>
|
||||||
|
</outbound-rule>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
|
||||||
|
in your web.xml add...
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<filter-name>UrlRewriteFilter</filter-name>
|
||||||
|
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
|
||||||
|
<init-param>
|
||||||
|
<param-name>logLevel</param-name>
|
||||||
|
<param-value>WARN</param-value>
|
||||||
|
</init-param>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>UrlRewriteFilter</filter-name>
|
||||||
|
<url-pattern>/*</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
|
||||||
|
Redirect one url
|
||||||
|
<rule>
|
||||||
|
<from>/some/old/page.html</from>
|
||||||
|
<to type="redirect">/very/new/page.html</to>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
Redirect a directory
|
||||||
|
<rule>
|
||||||
|
<from>/some/olddir/(.*)</from>
|
||||||
|
<to type="redirect">/very/newdir/$1</to>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
Clean a url
|
||||||
|
<rule>
|
||||||
|
<from>/products/([0-9]+)</from>
|
||||||
|
<to>/products/index.jsp?product_id=$1</to>
|
||||||
|
</rule>
|
||||||
|
eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing.
|
||||||
|
|
||||||
|
Browser detection
|
||||||
|
<rule>
|
||||||
|
<condition name="user-agent">Mozilla/[1-4]</condition>
|
||||||
|
<from>/some/page.html</from>
|
||||||
|
<to>/some/page-for-old-browsers.html</to>
|
||||||
|
</rule>
|
||||||
|
eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older
|
||||||
|
browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4.
|
||||||
|
|
||||||
|
Centralised browser detection
|
||||||
|
<rule>
|
||||||
|
<condition name="user-agent">Mozilla/[1-4]</condition>
|
||||||
|
<set type="request" name="browser">moz</set>
|
||||||
|
</rule>
|
||||||
|
eg, all requests will be checked against the condition and if matched
|
||||||
|
request.setAttribute("browser", "moz") will be called.
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
</urlrewrite>
|
||||||
|
|
||||||
@@ -0,0 +1,168 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
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
|
||||||
|
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
|
||||||
|
version="2.5">
|
||||||
|
|
||||||
|
<display-name>Welcome to Tomcat</display-name>
|
||||||
|
<description>
|
||||||
|
Welcome to Tomcat
|
||||||
|
</description>
|
||||||
|
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>dwr-invoker</servlet-name>
|
||||||
|
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
|
||||||
|
<!--
|
||||||
|
<init-param>
|
||||||
|
<param-name>debug</param-name>
|
||||||
|
<param-value>false</param-value>
|
||||||
|
</init-param>
|
||||||
|
-->
|
||||||
|
<init-param>
|
||||||
|
<param-name>logLevel</param-name>
|
||||||
|
<param-value>ERROR</param-value>
|
||||||
|
</init-param>
|
||||||
|
<init-param>
|
||||||
|
<param-name>allowScriptTagRemoting</param-name>
|
||||||
|
<param-value>true</param-value>
|
||||||
|
</init-param>
|
||||||
|
<init-param>
|
||||||
|
<param-name>crossDomainSessionSecurity</param-name>
|
||||||
|
<param-value>false</param-value>
|
||||||
|
</init-param>
|
||||||
|
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>servletinit</servlet-name>
|
||||||
|
<servlet-class>com.fe.scheduler.SchedulerInitServlet</servlet-class>
|
||||||
|
<load-on-startup>0</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>p2pinit</servlet-name>
|
||||||
|
<servlet-class>com.fe.p2p.P2PServiceServlet</servlet-class>
|
||||||
|
<load-on-startup>0</load-on-startup>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>SchedulerAPIServlet</servlet-name>
|
||||||
|
<servlet-class>com.fe.client.SchedulerAPIServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>rsyntax</servlet-name>
|
||||||
|
<servlet-class>com.fe.servlet.RSyntaxServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>fileuploader1</servlet-name>
|
||||||
|
<servlet-class>com.fe.servlet.FileUploader</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>ace_mode_r</servlet-name>
|
||||||
|
<servlet-class>com.fe.servlet.AceModeRSyntax</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<listener>
|
||||||
|
<listener-class>com.fe.servlet.P2PServletContextListener</listener-class>
|
||||||
|
</listener>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>TomcatWSServer</servlet-name>
|
||||||
|
<servlet-class>com.fourelementscapital.scheduler.p2p.websocket.TomcatWSServer</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>TomcatWSServer</servlet-name>
|
||||||
|
<url-pattern>/ws/TomcatWSServer</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>TomcatWSExecuteRService</servlet-name>
|
||||||
|
<servlet-class>com.fe.p2p.websocket.TomcatWSExecuteRService</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>TomcatWSExecuteRService</servlet-name>
|
||||||
|
<url-pattern>/ws/TomcatWSExecuteRService</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>TomcatWSConsole</servlet-name>
|
||||||
|
<servlet-class>com.fourelementscapital.scheduler.p2p.websocket.TomcatWSConsole</servlet-class>
|
||||||
|
</servlet>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>TomcatWSConsole</servlet-name>
|
||||||
|
<url-pattern>/ws/TomcatWSConsole</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>dwr-invoker</servlet-name>
|
||||||
|
<url-pattern>/dwr/*</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>SchedulerAPIServlet</servlet-name>
|
||||||
|
<url-pattern>/schedulerAPI</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>fileuploader1</servlet-name>
|
||||||
|
<url-pattern>/fileuploader</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>rsyntax</servlet-name>
|
||||||
|
<url-pattern>/editarea_0_8_2/reg_syntax/r.js</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>ace_mode_r</servlet-name>
|
||||||
|
<url-pattern>/ace/src/mode-r.js</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<filter>
|
||||||
|
<filter-name>monitoring</filter-name>
|
||||||
|
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
|
||||||
|
</filter>
|
||||||
|
<filter-mapping>
|
||||||
|
<filter-name>monitoring</filter-name>
|
||||||
|
<url-pattern>/*</url-pattern>
|
||||||
|
</filter-mapping>
|
||||||
|
<listener>
|
||||||
|
<listener-class>net.bull.javamelody.SessionListener</listener-class>
|
||||||
|
</listener>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</web-app>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
04917953ffdb7c700a64cc179b252fafeb0f0854
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
2012.09.17, Version 1.0.0
|
||||||
|
|
||||||
|
* New Features
|
||||||
|
- Multiple cursors and selections (https://c9.io/site/blog/2012/08/be-an-armenian-warrior-with-block-selection-on-steroids/)
|
||||||
|
- Fold buttons displayed in the gutter
|
||||||
|
- Indent Guides
|
||||||
|
- Completely reworked vim mode (Sergi Mansilla)
|
||||||
|
- Improved emacs keybindings
|
||||||
|
- Autoclosing of html tags (danyaPostfactum)
|
||||||
|
|
||||||
|
* 20 New language modes
|
||||||
|
- Coldfusion (Russ)
|
||||||
|
- Diff
|
||||||
|
- GLSL (Ed Mackey)
|
||||||
|
- Go (Davide Saurino)
|
||||||
|
- Haxe (Jason O'Neil)
|
||||||
|
- Jade (Garen Torikian)
|
||||||
|
- jsx (Syu Kato)
|
||||||
|
- LaTeX (James Allen)
|
||||||
|
- Less (John Roepke)
|
||||||
|
- Liquid (Bernie Telles)
|
||||||
|
- Lua (Lee Gao)
|
||||||
|
- LuaPage (Choonster)
|
||||||
|
- Markdown (Chris Spencer)
|
||||||
|
- PostgreSQL (John DeSoi)
|
||||||
|
- Powershell (John Kane)
|
||||||
|
- Sh (Richo Healey)
|
||||||
|
- SQL (Jonathan Camile)
|
||||||
|
- Tcl (Cristoph Hochreiner)
|
||||||
|
- XQuery (William Candillion)
|
||||||
|
- Yaml (Meg Sharkey)
|
||||||
|
|
||||||
|
* Live syntax checks
|
||||||
|
- for XQuery and JSON
|
||||||
|
|
||||||
|
* New Themes
|
||||||
|
- Ambiance (Irakli Gozalishvili)
|
||||||
|
- Dreamweaver (Adam Jimenez)
|
||||||
|
- Github (bootstraponline)
|
||||||
|
- Tommorrow themes (https://github.com/chriskempson/tomorrow-theme)
|
||||||
|
- XCode
|
||||||
|
|
||||||
|
* Many Small Enhancements and Bugfixes
|
||||||
|
|
||||||
|
2011.08.02, Version 0.2.0
|
||||||
|
|
||||||
|
* Split view (Julian Viereck)
|
||||||
|
- split editor area horizontally or vertivally to show two files at the same
|
||||||
|
time
|
||||||
|
|
||||||
|
* Code Folding (Julian Viereck)
|
||||||
|
- Unstructured code folding
|
||||||
|
- Will be the basis for language aware folding
|
||||||
|
|
||||||
|
* Mode behaviours (Chris Spencer)
|
||||||
|
- Adds mode specific hooks which allow transformations of entered text
|
||||||
|
- Autoclosing of braces, paranthesis and quotation marks in C style modes
|
||||||
|
- Autoclosing of angular brackets in XML style modes
|
||||||
|
|
||||||
|
* New language modes
|
||||||
|
- Clojure (Carin Meier)
|
||||||
|
- C# (Rob Conery)
|
||||||
|
- Groovy (Ben Tilford)
|
||||||
|
- Scala (Ben Tilford)
|
||||||
|
- JSON
|
||||||
|
- OCaml (Sergi Mansilla)
|
||||||
|
- Perl (Panagiotis Astithas)
|
||||||
|
- SCSS/SASS (Andreas Madsen)
|
||||||
|
- SVG
|
||||||
|
- Textile (Kelley van Evert)
|
||||||
|
- SCAD (Jacob Hansson)
|
||||||
|
|
||||||
|
* Live syntax checks
|
||||||
|
- Lint for CSS using CSS Lint <http://csslint.net/>
|
||||||
|
- CoffeeScript
|
||||||
|
|
||||||
|
* New Themes
|
||||||
|
- Crimson Editor (iebuggy)
|
||||||
|
- Merbivore (Michael Schwartz)
|
||||||
|
- Merbivore soft (Michael Schwartz)
|
||||||
|
- Solarized dark/light <http://ethanschoonover.com/solarized> (David Alan Hjelle)
|
||||||
|
- Vibrant Ink (Michael Schwartz)
|
||||||
|
|
||||||
|
* Small Features/Enhancements
|
||||||
|
- Lots of render performance optimizations (Harutyun Amirjanyan)
|
||||||
|
- Improved Ruby highlighting (Chris Wanstrath, Trent Ogren)
|
||||||
|
- Improved PHP highlighting (Thomas Hruska)
|
||||||
|
- Improved CSS highlighting (Sean Kellogg)
|
||||||
|
- Clicks which cause the editor to be focused don't reset the selection
|
||||||
|
- Make padding text layer specific so that print margin and active line
|
||||||
|
highlight are not affected (Irakli Gozalishvili)
|
||||||
|
- Added setFontSize method
|
||||||
|
- Improved vi keybindings (Trent Ogren)
|
||||||
|
- When unfocused make cursor transparent instead of removing it (Harutyun Amirjanyan)
|
||||||
|
- Support for matching groups in tokenizer with arrays of tokens (Chris Spencer)
|
||||||
|
|
||||||
|
* Bug fixes
|
||||||
|
- Add support for the new OSX scroll bars
|
||||||
|
- Properly highlight JavaScript regexp literals
|
||||||
|
- Proper handling of unicode characters in JavaScript identifiers
|
||||||
|
- Fix remove lines command on last line (Harutyun Amirjanyan)
|
||||||
|
- Fix scroll wheel sluggishness in Safari
|
||||||
|
- Make keyboard infrastructure route keys like []^$ the right way (Julian Viereck)
|
||||||
|
|
||||||
|
2011.02.14, Version 0.1.6
|
||||||
|
|
||||||
|
* Floating Anchors
|
||||||
|
- An Anchor is a floating pointer in the document.
|
||||||
|
- Whenever text is inserted or deleted before the cursor, the position of
|
||||||
|
the cursor is updated
|
||||||
|
- Usesd for the cursor and selection
|
||||||
|
- Basis for bookmarks, multiple cursors and snippets in the future
|
||||||
|
* Extensive support for Cocoa style keybindings on the Mac <https://github.com/ajaxorg/ace/issues/closed#issue/116/comment/767803>
|
||||||
|
* New commands:
|
||||||
|
- center selection in viewport
|
||||||
|
- remove to end/start of line
|
||||||
|
- split line
|
||||||
|
- transpose letters
|
||||||
|
* Refator markers
|
||||||
|
- Custom code can be used to render markers
|
||||||
|
- Markers can be in front or behind the text
|
||||||
|
- Markers are now stored in the session (was in the renderer)
|
||||||
|
* Lots of IE8 fixes including copy, cut and selections
|
||||||
|
* Unit tests can also be run in the browser
|
||||||
|
<https://github.com/ajaxorg/ace/blob/master/lib/ace/test/tests.html>
|
||||||
|
* Soft wrap can adapt to the width of the editor (Mike Ratcliffe, Joe Cheng)
|
||||||
|
* Add minimal node server server.js to run the Ace demo in Chrome
|
||||||
|
* The top level editor.html demo has been renamed to index.html
|
||||||
|
* Bug fixes
|
||||||
|
- Fixed gotoLine to consider wrapped lines when calculating where to scroll to (James Allen)
|
||||||
|
- Fixed isues when the editor was scrolled in the web page (Eric Allam)
|
||||||
|
- Highlighting of Python string literals
|
||||||
|
- Syntax rule for PHP comments
|
||||||
|
|
||||||
|
2011.02.08, Version 0.1.5
|
||||||
|
|
||||||
|
* Add Coffeescript Mode (Satoshi Murakami)
|
||||||
|
* Fix word wrap bug (Julian Viereck)
|
||||||
|
* Fix packaged version of the Eclipse mode
|
||||||
|
* Loading of workers is more robust
|
||||||
|
* Fix "click selection"
|
||||||
|
* Allow tokizing empty lines (Daniel Krech)
|
||||||
|
* Make PageUp/Down behavior more consistent with native OS (Joe Cheng)
|
||||||
|
|
||||||
|
2011.02.04, Version 0.1.4
|
||||||
|
|
||||||
|
* Add C/C++ mode contributed by Gastón Kleiman
|
||||||
|
* Fix exception in key input
|
||||||
|
|
||||||
|
2011.02.04, Version 0.1.3
|
||||||
|
|
||||||
|
* Let the packaged version play nice with requireJS
|
||||||
|
* Add Ruby mode contributed by Shlomo Zalman Heigh
|
||||||
|
* Add Java mode contributed by Tom Tasche
|
||||||
|
* Fix annotation bug
|
||||||
|
* Changing a document added a new empty line at the end
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
Copyright (c) 2010, Ajax.org B.V.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of Ajax.org B.V. nor the
|
||||||
|
names of its contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
||||||
|
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
Ace (Ajax.org Cloud9 Editor)
|
||||||
|
============================
|
||||||
|
|
||||||
|
Ace is a code editor written in JavaScript.
|
||||||
|
|
||||||
|
This repository has only generated files.
|
||||||
|
If you want to work on ace please go to https://github.com/ajaxorg/ace instead.
|
||||||
|
|
||||||
|
|
||||||
|
here you can find pre-built files for convenience of embedding.
|
||||||
|
it contains 4 versions
|
||||||
|
* [src](https://github.com/ajaxorg/ace-builds/tree/master/src) concatenated but not minified
|
||||||
|
* [src-min](https://github.com/ajaxorg/ace-builds/tree/master/src-min) concatenated and minified with uglify.js
|
||||||
|
* [src-noconflict](https://github.com/ajaxorg/ace-builds/tree/master/src-noconflict) uses ace.require instead of require
|
||||||
|
* [src-min-noconflict](https://github.com/ajaxorg/ace-builds/tree/master/src-min-noconflict) -
|
||||||
|
|
||||||
|
|
||||||
|
For a simple way of embedding ace into webpage see https://github.com/ajaxorg/ace-builds/blob/master/editor.html
|
||||||
|
To see ace in action go to [kitchen-sink-demo](http://ajaxorg.github.com/ace-builds/kitchen-sink.html), [scrollable-page-demo](http://ajaxorg.github.com/ace-builds/scrollable-page.html), or [minimal demo](http://ajaxorg.github.com/ace-builds/editor.html)
|
||||||
|
|
||||||
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,47 @@
|
|||||||
|
/*PACKAGE
|
||||||
|
@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono);
|
||||||
|
PACKAGE*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
background: rgb(14, 98, 165);
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#logo {
|
||||||
|
padding: 15px;
|
||||||
|
margin-left: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#editor {
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
left: 280px;
|
||||||
|
bottom: 0px;
|
||||||
|
right: 0px;
|
||||||
|
background: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#controls {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#controls td {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#controls td + td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<title>Editor</title>
|
||||||
|
<style type="text/css" media="screen">
|
||||||
|
body {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#editor {
|
||||||
|
margin: 0;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<pre id="editor">function foo(items) {
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < items.length; i++) {
|
||||||
|
alert("Ace Rocks " + items[i]);
|
||||||
|
}
|
||||||
|
}</pre>
|
||||||
|
|
||||||
|
<script src="src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script>
|
||||||
|
var editor = ace.edit("editor");
|
||||||
|
editor.setTheme("ace/theme/twilight");
|
||||||
|
editor.getSession().setMode("ace/mode/javascript");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,268 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
||||||
|
"http://www.w3.org/TR/html4/strict.dtd">
|
||||||
|
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<title>Ace Kitchen Sink</title>
|
||||||
|
<meta name="author" content="Fabian Jakobs">
|
||||||
|
<!--
|
||||||
|
|
||||||
|
Ace
|
||||||
|
version
|
||||||
|
commit
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="kitchen-sink/styles.css" type="text/css" media="screen" charset="utf-8">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<a href="http://ajaxorg.github.com/ace/" >
|
||||||
|
<img id="logo" src="kitchen-sink/logo.png">
|
||||||
|
</a>
|
||||||
|
<table id="controls">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="doc">Document</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="doc" size="1">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="mode">Mode</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="mode" size="1">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="split">Split</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="split" size="1">
|
||||||
|
<option value="none">None</option>
|
||||||
|
<option value="below">Below</option>
|
||||||
|
<option value="beside">Beside</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="theme">Theme</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="theme" size="1">
|
||||||
|
<optgroup label="Bright">
|
||||||
|
<option value="ace/theme/chrome">Chrome</option>
|
||||||
|
<option value="ace/theme/clouds">Clouds</option>
|
||||||
|
<option value="ace/theme/crimson_editor">Crimson Editor</option>
|
||||||
|
<option value="ace/theme/dawn">Dawn</option>
|
||||||
|
<option value="ace/theme/dreamweaver">Dreamweaver</option>
|
||||||
|
<option value="ace/theme/eclipse">Eclipse</option>
|
||||||
|
<option value="ace/theme/github">GitHub</option>
|
||||||
|
<option value="ace/theme/solarized_light">Solarized Light</option>
|
||||||
|
<option value="ace/theme/textmate" selected="selected">TextMate</option>
|
||||||
|
<option value="ace/theme/tomorrow">Tomorrow</option>
|
||||||
|
<option value="ace/theme/xcode">XCode</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Dark">
|
||||||
|
<option value="ace/theme/ambiance">Ambiance</option>
|
||||||
|
<option value="ace/theme/chaos">Chaos</option>
|
||||||
|
<option value="ace/theme/clouds_midnight">Clouds Midnight</option>
|
||||||
|
<option value="ace/theme/cobalt">Cobalt</option>
|
||||||
|
<option value="ace/theme/idle_fingers">idleFingers</option>
|
||||||
|
<option value="ace/theme/kr_theme">krTheme</option>
|
||||||
|
<option value="ace/theme/merbivore">Merbivore</option>
|
||||||
|
<option value="ace/theme/merbivore_soft">Merbivore Soft</option>
|
||||||
|
<option value="ace/theme/mono_industrial">Mono Industrial</option>
|
||||||
|
<option value="ace/theme/monokai">Monokai</option>
|
||||||
|
<option value="ace/theme/pastel_on_dark">Pastel on dark</option>
|
||||||
|
<option value="ace/theme/solarized_dark">Solarized Dark</option>
|
||||||
|
<option value="ace/theme/twilight">Twilight</option>
|
||||||
|
<option value="ace/theme/tomorrow_night">Tomorrow Night</option>
|
||||||
|
<option value="ace/theme/tomorrow_night_blue">Tomorrow Night Blue</option>
|
||||||
|
<option value="ace/theme/tomorrow_night_bright">Tomorrow Night Bright</option>
|
||||||
|
<option value="ace/theme/tomorrow_night_eighties">Tomorrow Night 80s</option>
|
||||||
|
<option value="ace/theme/vibrant_ink">Vibrant Ink</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="fontsize">Font Size</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="fontsize" size="1">
|
||||||
|
<option value="10px">10px</option>
|
||||||
|
<option value="11px">11px</option>
|
||||||
|
<option value="12px" selected="selected">12px</option>
|
||||||
|
<option value="14px">14px</option>
|
||||||
|
<option value="16px">16px</option>
|
||||||
|
<option value="20px">20px</option>
|
||||||
|
<option value="24px">24px</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="folding">Code Folding</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="folding" size="1">
|
||||||
|
<option value="manual">manual</option>
|
||||||
|
<option value="markbegin" selected="selected">mark begin</option>
|
||||||
|
<option value="markbeginend">mark begin and end</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="keybinding">Key Binding</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="keybinding" size="1">
|
||||||
|
<option value="ace">Ace</option>
|
||||||
|
<option value="vim">Vim</option>
|
||||||
|
<option value="emacs">Emacs</option>
|
||||||
|
<option value="custom">Custom</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="soft_wrap">Soft Wrap</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="soft_wrap" size="1">
|
||||||
|
<option value="off">Off</option>
|
||||||
|
<option value="40">40 Chars</option>
|
||||||
|
<option value="80">80 Chars</option>
|
||||||
|
<option value="free">Free</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr><td colspan="2">
|
||||||
|
<table id="more-controls">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="select_style">Full Line Selection</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="select_style" id="select_style" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="highlight_active">Highlight Active Line</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="highlight_active" id="highlight_active" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_hidden">Show Invisibles</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="show_hidden" id="show_hidden" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="display_indent_guides">Show Indent Guides</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="display_indent_guides" id="display_indent_guides" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_hscroll">Persistent HScroll</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="show_hscroll" id="show_hscroll">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="animate_scroll">Animate scrolling</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="animate_scroll" id="animate_scroll">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_gutter">Show Gutter</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" id="show_gutter" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_print_margin">Show Print Margin</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" id="show_print_margin" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="soft_tab">Use Soft Tab</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" id="soft_tab" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="highlight_selected_word">Highlight selected word</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="highlight_selected_word" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="enable_behaviours">Enable Behaviours</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="enable_behaviours">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="fade_fold_widgets">Fade Fold Widgets</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="fade_fold_widgets">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="highlight_token">Show token info</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="highlight_token">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="editor-container"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="../demo/kitchen-sink/require.js"></script>
|
||||||
|
<script src="src/ace.js" data-ace-base="src"></script>
|
||||||
|
<script src="src/keybinding-vim.js"></script>
|
||||||
|
<script src="src/keybinding-emacs.js"></script>
|
||||||
|
<script src="kitchen-sink/demo.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
require(["kitchen-sink/demo", "ace/ace"])
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<title>Ace Kitchen Sink</title>
|
||||||
|
<meta name="author" content="Fabian Jakobs">
|
||||||
|
<!--
|
||||||
|
Ace
|
||||||
|
version
|
||||||
|
commit
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<link href="./doc/site/images/favicon.ico" rel="icon" type="image/x-icon">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="kitchen-sink/styles.css" type="text/css" media="screen" charset="utf-8">
|
||||||
|
<script async="true" src="http://use.edgefonts.net/source-code-pro.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="optionsPanel" style="position:absolute;height:100%;width:260px">
|
||||||
|
<a href="http://ajaxorg.github.com/ace/" >
|
||||||
|
<img id="logo" src="kitchen-sink/logo.png">
|
||||||
|
</a>
|
||||||
|
<div style="position: absolute; overflow: hidden; top:80px; bottom:0">
|
||||||
|
<div style="width: 120%; height:100%; overflow-y: scroll">
|
||||||
|
|
||||||
|
<table id="controls">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="doc">Document</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="doc" size="1">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="mode">Mode</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="mode" size="1">
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="split">Split</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="split" size="1">
|
||||||
|
<option value="none">None</option>
|
||||||
|
<option value="below">Below</option>
|
||||||
|
<option value="beside">Beside</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="theme">Theme</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="theme" size="1">
|
||||||
|
<optgroup label="Bright">
|
||||||
|
<option value="ace/theme/chrome">Chrome</option>
|
||||||
|
<option value="ace/theme/clouds">Clouds</option>
|
||||||
|
<option value="ace/theme/crimson_editor">Crimson Editor</option>
|
||||||
|
<option value="ace/theme/dawn">Dawn</option>
|
||||||
|
<option value="ace/theme/dreamweaver">Dreamweaver</option>
|
||||||
|
<option value="ace/theme/eclipse">Eclipse</option>
|
||||||
|
<option value="ace/theme/github">GitHub</option>
|
||||||
|
<option value="ace/theme/solarized_light">Solarized Light</option>
|
||||||
|
<option value="ace/theme/textmate" selected="selected">TextMate</option>
|
||||||
|
<option value="ace/theme/tomorrow">Tomorrow</option>
|
||||||
|
<option value="ace/theme/xcode">XCode</option>
|
||||||
|
</optgroup>
|
||||||
|
<optgroup label="Dark">
|
||||||
|
<option value="ace/theme/ambiance">Ambiance</option>
|
||||||
|
<option value="ace/theme/chaos">Chaos</option>
|
||||||
|
<option value="ace/theme/clouds_midnight">Clouds Midnight</option>
|
||||||
|
<option value="ace/theme/cobalt">Cobalt</option>
|
||||||
|
<option value="ace/theme/idle_fingers">idleFingers</option>
|
||||||
|
<option value="ace/theme/kr_theme">krTheme</option>
|
||||||
|
<option value="ace/theme/merbivore">Merbivore</option>
|
||||||
|
<option value="ace/theme/merbivore_soft">Merbivore Soft</option>
|
||||||
|
<option value="ace/theme/mono_industrial">Mono Industrial</option>
|
||||||
|
<option value="ace/theme/monokai">Monokai</option>
|
||||||
|
<option value="ace/theme/pastel_on_dark">Pastel on dark</option>
|
||||||
|
<option value="ace/theme/solarized_dark">Solarized Dark</option>
|
||||||
|
<option value="ace/theme/twilight">Twilight</option>
|
||||||
|
<option value="ace/theme/tomorrow_night">Tomorrow Night</option>
|
||||||
|
<option value="ace/theme/tomorrow_night_blue">Tomorrow Night Blue</option>
|
||||||
|
<option value="ace/theme/tomorrow_night_bright">Tomorrow Night Bright</option>
|
||||||
|
<option value="ace/theme/tomorrow_night_eighties">Tomorrow Night 80s</option>
|
||||||
|
<option value="ace/theme/vibrant_ink">Vibrant Ink</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="fontsize">Font Size</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="fontsize" size="1">
|
||||||
|
<option value="10px">10px</option>
|
||||||
|
<option value="11px">11px</option>
|
||||||
|
<option value="12px" selected="selected">12px</option>
|
||||||
|
<option value="13px">13px</option>
|
||||||
|
<option value="14px">14px</option>
|
||||||
|
<option value="16px">16px</option>
|
||||||
|
<option value="18px">18px</option>
|
||||||
|
<option value="20px">20px</option>
|
||||||
|
<option value="24px">24px</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="folding">Code Folding</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="folding" size="1">
|
||||||
|
<option value="manual">manual</option>
|
||||||
|
<option value="markbegin" selected="selected">mark begin</option>
|
||||||
|
<option value="markbeginend">mark begin and end</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="keybinding">Key Binding</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="keybinding" size="1">
|
||||||
|
<option value="ace">Ace</option>
|
||||||
|
<option value="vim">Vim</option>
|
||||||
|
<option value="emacs">Emacs</option>
|
||||||
|
<option value="custom">Custom</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="soft_wrap">Soft Wrap</label>
|
||||||
|
</td><td>
|
||||||
|
<select id="soft_wrap" size="1">
|
||||||
|
<option value="off">Off</option>
|
||||||
|
<option value="40">40 Chars</option>
|
||||||
|
<option value="80">80 Chars</option>
|
||||||
|
<option value="free">Free</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr><td colspan="2">
|
||||||
|
<table id="more-controls">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="select_style">Full Line Selection</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="select_style" id="select_style" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="highlight_active">Highlight Active Line</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="highlight_active" id="highlight_active" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_hidden">Show Invisibles</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="show_hidden" id="show_hidden" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="display_indent_guides">Show Indent Guides</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="display_indent_guides" id="display_indent_guides" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_hscroll">Persistent HScroll</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="show_hscroll" id="show_hscroll">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="animate_scroll">Animate scrolling</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" name="animate_scroll" id="animate_scroll">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_gutter">Show Gutter</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" id="show_gutter" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="show_print_margin">Show Print Margin</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" id="show_print_margin" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="soft_tab">Use Soft Tab</label>
|
||||||
|
</td><td>
|
||||||
|
<input type="checkbox" id="soft_tab" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="highlight_selected_word">Highlight selected word</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="highlight_selected_word" checked>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="enable_behaviours">Enable Behaviours</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="enable_behaviours">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="fade_fold_widgets">Fade Fold Widgets</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="fade_fold_widgets">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="elastic_tabstops">Enable Elastic Tabstops</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="elastic_tabstops">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="highlight_token">Show token info</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="highlight_token">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >
|
||||||
|
<label for="read_only">Read-only</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="read_only">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="editor-container"></div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script src="src/ace.js" data-ace-base="src" type="text/javascript" charset="utf-8"></script>
|
||||||
|
<script src="src/keybinding-vim.js"></script>
|
||||||
|
<script src="src/keybinding-emacs.js"></script>
|
||||||
|
<script src="kitchen-sink/demo.js"></script>
|
||||||
|
<script type="text/javascript" charset="utf-8">
|
||||||
|
require("kitchen-sink/demo");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,17 @@
|
|||||||
|
class Haxe
|
||||||
|
{
|
||||||
|
public static function main()
|
||||||
|
{
|
||||||
|
// Say Hello!
|
||||||
|
var greeting:String = "Hello World";
|
||||||
|
trace(greeting);
|
||||||
|
|
||||||
|
var targets:Array<String> = ["Flash","Javascript","PHP","Neko","C++","iOS","Android","webOS"];
|
||||||
|
trace("Haxe is a great language that can target:");
|
||||||
|
for (target in targets)
|
||||||
|
{
|
||||||
|
trace (" - " + target);
|
||||||
|
}
|
||||||
|
trace("And many more!");
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user