Bernarto P Tjahjono
2 years ago
2171 changed files with 849575 additions and 1 deletions
@ -1,3 +1,4 @@
|
||||
# scheduler4e |
||||
|
||||
This is the repository of 4E scheduler moved from Alphien github |
||||
This is the repository of 4E scheduler moved from Alphien github. |
||||
FourElements scheduler from release 2.1.2 plus source and target setup for java8 |
||||
|
@ -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; |
||||
} |
||||
|
||||
} |
||||
|
||||
|
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():0L; |
||||
} |
||||
|
||||
public Long lastRevision(String function_name) throws Exception { |
||||
TreeSet<Long> rev=revisions(function_name); |
||||
return rev.size()>0?rev.last():0L; |
||||
} |
||||
|
||||
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) |
||||
|
||||
|
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
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue