Bernarto P Tjahjono
3 years ago
2168 changed files with 849329 additions and 0 deletions
@ -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():0; |
||||
} |
||||
|
||||
public Long lastRevision(String function_name) throws Exception { |
||||
TreeSet<Long> rev=revisions(function_name); |
||||
return rev.size()>0?rev.last():0; |
||||
} |
||||
|
||||
public String getWhatChanged(String function_name, Long c_rev) throws Exception { |
||||
TreeSet<Long> rev=revisions(function_name); |
||||
Vector v=new Vector(rev); |
||||
String diff=null; |
||||
if(v.indexOf(c_rev)>0){ |
||||
long prev=(Long)v.get(v.indexOf(c_rev)-1); |
||||
diff=diff(function_name,prev,c_rev.longValue()); |
||||
if(diff!=null){ |
||||
StringTokenizer st=new StringTokenizer(diff,"\n\r"); |
||||
if(st.countTokens()>=4){ |
||||
st.nextToken();st.nextToken();st.nextToken();st.nextToken();//st.nextToken();
|
||||
diff=""; |
||||
while(st.hasMoreTokens()){ |
||||
diff+=st.nextToken()+"\n"; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return diff; |
||||
} |
||||
|
||||
public String getLastChanged(String function_name) throws Exception { |
||||
TreeSet<Long> rev=revisions(function_name); |
||||
Vector v=new Vector(rev); |
||||
String diff=null; |
||||
if(rev.size()>0 && v.indexOf(rev.last())>0){ |
||||
long prev=(Long)v.get(v.indexOf(rev.last())-1); |
||||
diff=diff(function_name,prev,rev.last().longValue()); |
||||
if(diff!=null){ |
||||
StringTokenizer st=new StringTokenizer(diff,"\n\r"); |
||||
if(st.countTokens()>=4){ |
||||
st.nextToken();st.nextToken();st.nextToken();st.nextToken();//st.nextToken();
|
||||
diff=""; |
||||
while(st.hasMoreTokens()){ |
||||
diff+=st.nextToken()+"\n"; |
||||
} |
||||
} |
||||
|
||||
} |
||||
} |
||||
return diff; |
||||
} |
||||
|
||||
|
||||
public Vector<SVNDirEntry> logTest() throws Exception { |
||||
|
||||
SVNLogClient logc= this.cm.getLogClient(); |
||||
long limit=50; |
||||
|
||||
LogEntryHandler leh=new LogEntryHandler(); |
||||
SVNURL url = SVNURL.parseURIEncoded(this.svnurl); |
||||
//logc.doList(url, SVNRevision.create(0), SVNRevision.HEAD, true, true,leh);
|
||||
|
||||
//while(leh.getLogDirMessages()==null){
|
||||
// Thread.sleep(100);
|
||||
//}
|
||||
//Vector v=leh.getLogMessages();
|
||||
logc.doLog(url,new String[] {}, SVNRevision.create(0),SVNRevision.create(0), SVNRevision.HEAD, true, true,1,leh); |
||||
|
||||
while(leh.getLogMessages()==null){ |
||||
Thread.sleep(100); |
||||
} |
||||
Vector v=leh.getLogMessages(); |
||||
|
||||
Thread.sleep(100); |
||||
return v; |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
public String diff(String function_name, long start, long end) throws Exception { |
||||
|
||||
//File file=new File(local,"script_"+scheduler_id+".R");
|
||||
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension()); |
||||
|
||||
//File file1=new File(local,"script_"+scheduler_id+"_rev"+start+"_rev"+end+".diff");
|
||||
String rtn=null; |
||||
if(file.exists()){ |
||||
SVNDiffClient diffc= this.cm.getDiffClient(); |
||||
|
||||
//StringWriter sw=new StringWriter();
|
||||
//BufferedWriter out = new BufferedWriter(sw);
|
||||
//FileOutputStream fos=new FileOutputStream(file1) ;
|
||||
ByteArrayOutputStream fos = new ByteArrayOutputStream( ); |
||||
diffc.doDiff(file, SVNRevision.create(start),SVNRevision.create(start),SVNRevision.create(end), true, false,fos ); |
||||
rtn=fos.toString(); |
||||
} |
||||
return rtn; |
||||
} |
||||
|
||||
|
||||
public String diffWC(String function_name, long rev) throws Exception { |
||||
|
||||
//File file=new File(local,"script_"+scheduler_id+".R");
|
||||
//File file1=new File(local,"script_"+scheduler_id+"_rev"+start+"_rev"+end+".diff");
|
||||
File file=new File((local.endsWith(File.separator)? local:local+File.separator),function_name+getExtension()); |
||||
|
||||
String rtn=null; |
||||
if(file.exists()){ |
||||
SVNDiffClient diffc= this.cm.getDiffClient(); |
||||
|
||||
//StringWriter sw=new StringWriter();
|
||||
//BufferedWriter out = new BufferedWriter(sw);
|
||||
//FileOutputStream fos=new FileOutputStream(file1) ;
|
||||
ByteArrayOutputStream fos = new ByteArrayOutputStream( ); |
||||
diffc.doDiff(file, SVNRevision.create(rev),SVNRevision.create(rev),SVNRevision.HEAD, true, false,fos ); |
||||
rtn=fos.toString(); |
||||
}else{ |
||||
throw new Exception("File:"+file.getPath()+" doesn't exist"); |
||||
} |
||||
return rtn; |
||||
} |
||||
|
||||
|
||||
|
||||
public String getScript(String function_name, long revision,String path) throws Exception { |
||||
|
||||
SVNRepository repository=this.cm.createRepository( SVNURL.parseURIEncoded(this.svnurl), false); |
||||
|
||||
String filepath=function_name+getExtension(); |
||||
if(path!=null && !path.trim().equals("")){ |
||||
if(path.indexOf(",")>=0){ |
||||
StringTokenizer st=new StringTokenizer(path,","); |
||||
boolean found=false; |
||||
while(st.hasMoreTokens() && !found){ |
||||
String thispath=st.nextToken(); |
||||
SVNNodeKind nodeKind1 = repository.checkPath( thispath ,revision ); |
||||
if(nodeKind1==SVNNodeKind.FILE){ |
||||
filepath=thispath; |
||||
found=true; |
||||
} |
||||
} |
||||
}else{ |
||||
filepath=path; |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
log.debug("filepath:"+filepath); |
||||
|
||||
SVNNodeKind nodeKind = repository.checkPath( filepath ,revision ); |
||||
|
||||
if ( nodeKind == SVNNodeKind.NONE ) { |
||||
throw new Exception( "There is no entry at '" + this.svnurl + "'." ); |
||||
|
||||
} else if ( nodeKind == SVNNodeKind.DIR ) { |
||||
throw new Exception( "The entry at '" + this.svnurl + "' is a directory while a file was expected." ); |
||||
//System.exit( 1 );
|
||||
} |
||||
|
||||
|
||||
|
||||
SVNProperties fileProperties = new SVNProperties( ); |
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream( ); |
||||
repository.getFile( filepath , revision, fileProperties , baos ); |
||||
|
||||
|
||||
|
||||
Map fileProperties1=fileProperties.asMap(); |
||||
String mimeType = (String)fileProperties1.get( SVNProperty.MIME_TYPE ); |
||||
boolean isTextType = SVNProperty.isTextMimeType( mimeType ); |
||||
|
||||
|
||||
/* |
||||
|
||||
Iterator iterator = fileProperties1.keySet( ).iterator( ); |
||||
while ( iterator.hasNext( ) ) { |
||||
String propertyName = ( String ) iterator.next( ); |
||||
String propertyValue = ( String ) fileProperties1.get( propertyName ); |
||||
// System.out.println( "File property: " + propertyName + "=" + propertyValue );
|
||||
} |
||||
*/ |
||||
|
||||
String rtn=null; |
||||
|
||||
if ( isTextType ) { |
||||
// System.out.println( "File contents:" );
|
||||
//System.out.println( );
|
||||
|
||||
//baos.writeTo( System.out );
|
||||
//baos.writeTo( sw );
|
||||
rtn=baos.toString(); |
||||
|
||||
|
||||
} else { |
||||
System.out.println( "Not a text file." ); |
||||
} |
||||
return rtn; |
||||
|
||||
} |
||||
|
||||
|
||||
/* |
||||
* Initializes the library to work with a repository via |
||||
* different protocols. |
||||
*/ |
||||
private static void setupLibrary() { |
||||
/* |
||||
* For using over http:// and https://
|
||||
*/ |
||||
DAVRepositoryFactory.setup(); |
||||
/* |
||||
* For using over svn:// and svn+xxx://
|
||||
*/ |
||||
SVNRepositoryFactoryImpl.setup(); |
||||
|
||||
/* |
||||
* For using over file:///
|
||||
*/ |
||||
FSRepositoryFactory.setup(); |
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,82 @@
|
||||
/****************************************************************************** |
||||
* |
||||
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
||||
* All rights reserved. |
||||
* |
||||
******************************************************************************/ |
||||
|
||||
package com.fe.util; |
||||
|
||||
import java.io.ByteArrayOutputStream; |
||||
import java.io.FileInputStream; |
||||
import java.io.OutputStream; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
/** |
||||
* Image Loader |
||||
*/ |
||||
public class ImageLoader { |
||||
|
||||
private HttpServletRequest request=null; |
||||
private HttpServletResponse response=null; |
||||
|
||||
/** |
||||
* Constructor |
||||
* @param request request |
||||
* @param response response |
||||
*/ |
||||
public ImageLoader(HttpServletRequest request, HttpServletResponse response) { |
||||
this.request=request; |
||||
this.response=response; |
||||
} |
||||
|
||||
/** |
||||
* Push Image |
||||
* @throws Exception |
||||
*/ |
||||
public void pushImage() throws Exception { |
||||
try { |
||||
|
||||
response.setHeader("Content-Disposition", "inline"); |
||||
|
||||
FileInputStream fin=null; |
||||
if(this.request.getParameter("file")!=null && !this.request.getParameter("file").equals("")){ |
||||
fin = new FileInputStream(this.request.getParameter("file")); |
||||
if(this.request.getParameter("file").toLowerCase().endsWith(".svg")){ |
||||
response.setContentType("image/svg+xml"); |
||||
|
||||
}else{ |
||||
response.setContentType("image/png"); |
||||
} |
||||
}else{ |
||||
fin = new FileInputStream("/home/fileserv/Sharing/Public/Research/Monitors/SchedulerActivityMonitor.png"); |
||||
response.setContentType("image/png"); |
||||
|
||||
} |
||||
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); |
||||
byte[] buf = new byte[1024]; |
||||
int len; |
||||
while ((len = fin.read(buf)) > 0) { |
||||
// instead of writing to a ByteArrayOutputStream you can
|
||||
// write to the FileOutputStream here (see the comments later
|
||||
// after creating the byte[] variable called data
|
||||
bos.write(buf, 0, len); |
||||
} |
||||
byte[] data = bos.toByteArray(); |
||||
OutputStream out = response.getOutputStream(); |
||||
out.write(data); |
||||
out.flush(); |
||||
fin.close(); |
||||
} catch (Exception e) { |
||||
//e.printStackTrace();
|
||||
response.setContentType("html/text"); |
||||
response.setStatus(500); |
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
|
@ -0,0 +1,55 @@
|
||||
/****************************************************************************** |
||||
* |
||||
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
||||
* All rights reserved. |
||||
* |
||||
******************************************************************************/ |
||||
|
||||
package com.fe.util; |
||||
|
||||
import java.io.UnsupportedEncodingException; |
||||
import java.security.MessageDigest; |
||||
import java.security.NoSuchAlgorithmException; |
||||
|
||||
import sun.misc.BASE64Encoder; |
||||
|
||||
/** |
||||
* Password encrypting |
||||
*/ |
||||
public class PasswordService { |
||||
|
||||
/** |
||||
* Private constructor |
||||
*/ |
||||
private PasswordService() |
||||
{ |
||||
} |
||||
|
||||
/** |
||||
* Encrypt text |
||||
* @param plaintext plain text |
||||
* @return encrypted text |
||||
* @throws Exception |
||||
*/ |
||||
public static synchronized String encrypt(String plaintext) throws Exception { |
||||
MessageDigest md = null; |
||||
try { |
||||
md = MessageDigest.getInstance("SHA"); //step 2
|
||||
}catch(NoSuchAlgorithmException e) { |
||||
throw e; |
||||
} |
||||
|
||||
try { |
||||
md.update(plaintext.getBytes("UTF-8")); //step 3
|
||||
}catch(UnsupportedEncodingException e) { |
||||
throw e; |
||||
} |
||||
|
||||
byte raw[] = md.digest(); //step 4
|
||||
String hash = (new BASE64Encoder()).encode(raw); //step 5
|
||||
return hash; //step 6
|
||||
} |
||||
|
||||
} |
||||
|
||||
|
@ -0,0 +1,59 @@
|
||||
/****************************************************************************** |
||||
* |
||||
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
||||
* All rights reserved. |
||||
* |
||||
******************************************************************************/ |
||||
|
||||
package com.fe.util; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
import org.apache.commons.httpclient.HttpClient; |
||||
import org.apache.commons.httpclient.methods.GetMethod; |
||||
import org.apache.logging.log4j.LogManager; |
||||
import org.apache.logging.log4j.Logger; |
||||
|
||||
import com.fourelementscapital.scheduler.error.ClientError; |
||||
|
||||
public class ProxifyURL { |
||||
|
||||
|
||||
private static HttpClient httpclient = new HttpClient(); |
||||
private HttpServletRequest request; |
||||
private HttpServletResponse response; |
||||
private Logger log = LogManager.getLogger(ProxifyURL.class.getName()); |
||||
|
||||
public ProxifyURL(HttpServletRequest request, HttpServletResponse response){ |
||||
this.request=request; |
||||
this.response=response; |
||||
} |
||||
|
||||
public boolean isProxified(String url_prefix){ |
||||
String queryString=this.request.getQueryString(); |
||||
String tpf=this.request.getRequestURL().toString().replace(queryString,""); |
||||
log.debug("request url p:"+tpf); |
||||
return !tpf.equalsIgnoreCase(url_prefix); |
||||
} |
||||
|
||||
public void proxifyGet(String url_prefix,String overwrite_qs) { |
||||
try{ |
||||
|
||||
String queryString=overwrite_qs==null?this.request.getQueryString():overwrite_qs; |
||||
String redirecting=url_prefix+"?"+queryString; |
||||
log.debug("redirecting to:"+redirecting); |
||||
GetMethod httpget = new GetMethod(redirecting); |
||||
|
||||
int respo = httpclient.executeMethod(httpget); |
||||
//saveCookie(httpget);
|
||||
this.response.getOutputStream().write(httpget.getResponseBody()); |
||||
httpget.releaseConnection(); |
||||
|
||||
}catch(Exception e){ |
||||
ClientError.reportError(e, null); |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,139 @@
|
||||
/****************************************************************************** |
||||
* |
||||
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
||||
* All rights reserved. |
||||
* |
||||
******************************************************************************/ |
||||
|
||||
package com.fe.util; |
||||
|
||||
import java.io.BufferedWriter; |
||||
import java.io.File; |
||||
import java.io.FileWriter; |
||||
import java.util.Vector; |
||||
|
||||
import com.fe.scheduler.SchedulerInitServlet; |
||||
import com.fourelementscapital.scheduler.peer.QueueFactory; |
||||
|
||||
public class RestartTomcat { |
||||
|
||||
|
||||
private static Vector ignoredIds4Restart=new Vector(); |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static void restartPeerLater(){ |
||||
//thse 2 lines commented because, apart from scheduler task, there will be tasks also running, which will not have id.
|
||||
//Vector executingIds=new QueueFactory().getExecutingIDs();
|
||||
//if(executingIds.size()==0) {
|
||||
int count=new QueueFactory().countExcTasksInPeer(); |
||||
if(count==0) { |
||||
|
||||
RestartTomcat.restartPeerNow(); |
||||
}else{ |
||||
Vector executingIds=new QueueFactory().getExecutingIDs(); |
||||
System.out.println("RestartTomcat.java:: executingIds:"+executingIds+" ignoredIds4Restart:"+ignoredIds4Restart); |
||||
if(executingIds.containsAll(ignoredIds4Restart) && executingIds.size()==ignoredIds4Restart.size()){ |
||||
RestartTomcat.restartPeerNow(); |
||||
//System.out.println("RestartTomcat.java:: restarting now, it has killed id");
|
||||
} |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
public static void restartPeerLater(int task_2b_killed){ |
||||
//System.out.println("RestartTomcat.java:: restartPeerLater("+task_2b_killed+") called");
|
||||
|
||||
QueueFactory.setRestartRequested(); |
||||
if(task_2b_killed>0){ |
||||
ignoredIds4Restart.add(task_2b_killed); |
||||
} |
||||
RestartTomcat.restartPeerLater(); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static void restartPeerNow(){ |
||||
|
||||
try{ |
||||
String tempDir = System.getProperty("java.io.tmpdir"); |
||||
File file=new File(tempDir+File.separator+"restart.bat"); |
||||
String line; |
||||
BufferedWriter out = new BufferedWriter(new FileWriter(file)); |
||||
|
||||
String service="Tomcat6"; |
||||
out.write("net stop \""+service+"\" \n"); |
||||
|
||||
out.write("ping -n 8 localhost > nul\n"); |
||||
|
||||
// killing tasks in case of the related services are not stoppeed.
|
||||
out.write("taskkill /f /t /im Rserve.exe \n"); |
||||
out.write("taskkill /f /t /im tomcat6.exe \n"); |
||||
|
||||
out.write("ping -n 3 localhost > nul\n"); |
||||
|
||||
//copy the peer code from repository
|
||||
out.write("xcopy \\\\4ecapsvsg2\\Public\\IT\\TomcatDev\\peer_classes\\. "+SchedulerInitServlet.getAppPath()+"\\WEB-INF /S /Y /D \n"); |
||||
|
||||
out.write("net start \""+service+"\"\n"); |
||||
out.write("ping -n 3 localhost > nul\n"); |
||||
|
||||
out.write("EXIT \n"); |
||||
out.close(); |
||||
|
||||
Runtime rt = Runtime.getRuntime(); |
||||
String[] commandArgs = new String[]{"cmd", "/C", "start", file.getPath() }; |
||||
// String[] commandArgs = new String[]{"cmd", "/C", file.getPath()};
|
||||
Process proc = rt.exec(commandArgs); |
||||
|
||||
|
||||
|
||||
}catch(Exception e){ |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
public static void restartMainServer(){ |
||||
|
||||
try{ |
||||
//String tempDir = System.getProperty("java.io.tmpdir");
|
||||
//File file=new File(tempDir+File.separator+"restart.bat");
|
||||
//String line;
|
||||
//BufferedWriter out = new BufferedWriter(new FileWriter(file));
|
||||
//out.write("rem restarting of service..\n");
|
||||
//out.write("net stop \"Tomcat6\"\n");
|
||||
//out.write("ping -n 5 localhost > nul\n");
|
||||
//out.write("xcopy \\\\4ecapsvsg2\\Public\\IT\\TomcatDev\\peer_classes\\. "+SchedulerInitServlet.getAppPath()+"\\WEB-INF /S /Y \n");
|
||||
//out.write("net start \"Tomcat6\"\n");
|
||||
//out.close();
|
||||
|
||||
|
||||
//Process p = Runtime.getRuntime().exec(file.getPath());
|
||||
Runtime rt = Runtime.getRuntime(); |
||||
String[] commandArgs = new String[]{"nohup", "/home/p2pserver/restart.sh", "&"}; |
||||
Process proc = rt.exec(commandArgs); |
||||
|
||||
|
||||
|
||||
|
||||
}catch(Exception e){ |
||||
e.printStackTrace(); |
||||
} |
||||
|
||||
|
||||
|
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,35 @@
|
||||
/****************************************************************************** |
||||
* |
||||
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
||||
* All rights reserved. |
||||
* |
||||
******************************************************************************/ |
||||
|
||||
package com.fe.util; |
||||
|
||||
import java.util.Map; |
||||
import java.util.Vector; |
||||
|
||||
import com.fourelementscapital.fileutils.StringPlaceHolder; |
||||
|
||||
public class StringPlaceHolder4ChildStrategy { |
||||
|
||||
public static final String PATTERN = "\\{\\{(.*?)\\}\\}"; |
||||
public static final String PATTERN_ATTR = "\\\"\\{\\{(.*?)\\}\\}\\\""; |
||||
|
||||
public static Vector<String> getAttributePH(final String template) { |
||||
return StringPlaceHolder.getAttributePH(template, StringPlaceHolder4ChildStrategy.PATTERN_ATTR); |
||||
} |
||||
|
||||
public static Vector<String> getElementPH(final String template) { |
||||
return StringPlaceHolder.getElementPH(template, StringPlaceHolder4ChildStrategy.PATTERN); |
||||
} |
||||
|
||||
public static String parse(final String template, final Map values){ |
||||
return StringPlaceHolder.parse(template, values, StringPlaceHolder4ChildStrategy.PATTERN); |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
|
@ -0,0 +1,335 @@
|
||||
/****************************************************************************** |
||||
* |
||||
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore. |
||||
* All rights reserved. |
||||
* |
||||
******************************************************************************/ |
||||
|
||||
package com.fe.util; |
||||
|
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
import org.apache.commons.httpclient.Cookie; |
||||
import org.apache.commons.httpclient.Header; |
||||
import org.apache.commons.httpclient.HttpClient; |
||||
import org.apache.commons.httpclient.HttpMethod; |
||||
import org.apache.commons.httpclient.HttpState; |
||||
import org.apache.commons.httpclient.HttpStatus; |
||||
import org.apache.commons.httpclient.cookie.CookiePolicy; |
||||
import org.apache.commons.httpclient.methods.GetMethod; |
||||
import org.apache.commons.httpclient.methods.PostMethod; |
||||
import org.apache.logging.log4j.LogManager; |
||||
import org.apache.logging.log4j.Logger; |
||||
import org.jsoup.Jsoup; |
||||
import org.jsoup.nodes.Document; |
||||
|
||||
/** |
||||
* Get RFunction Manual from Wiki |
||||
*/ |
||||
public class WikiRFunctionManual { |
||||
|
||||
private Logger log = LogManager.getLogger(WikiRFunctionManual.class.getName()); |
||||
|
||||
private String function; |
||||
private static HttpClient httpclient = new HttpClient(); |
||||
|
||||
//public WikiRFunctionManual(String function){
|
||||
//this.function=function;
|
||||
//}
|
||||
|
||||
/** |
||||
* Constructor |
||||
*/ |
||||
public WikiRFunctionManual( ){ |
||||
} |
||||
|
||||
/** |
||||
* Get Wiki HTML (old) |
||||
* @param selector selector |
||||
* @return Wiki HTML |
||||
*/ |
||||
public String getWikiHTML_old(String selector) throws Exception { |
||||
try{ |
||||
|
||||
httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109); |
||||
HttpState initialState = new HttpState(); |
||||
initialState.addCookie(new Cookie(".4ecap.com", "mycookie", "stuff", "/", null, false)); |
||||
initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidbUserName", "Rams", "/", null, false)); |
||||
// initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidb_session", "", "/", null, false));
|
||||
//initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidbLoggedOut", "", "/", null, false));
|
||||
initialState.addCookie(new Cookie(".4ecap.com", "4ecapwikidbUserID", "4", "/", null, false)); |
||||
|
||||
httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(30000); |
||||
httpclient.setState(initialState); |
||||
|
||||
|
||||
GetMethod httpget = new GetMethod("http://wiki.4ecap.com/4ECwiki/"+this.function); |
||||
|
||||
int respo = httpclient.executeMethod(httpget); |
||||
//saveCookie(httpget);
|
||||
Document doc =Jsoup.parse( httpget.getResponseBodyAsString()); |
||||
httpget.releaseConnection(); |
||||
saveCookie(httpget); |
||||
if(doc.select("h1.firstHeading").text().trim().equals("Login Required")){ |
||||
|
||||
log.debug("~~~ logging in ~~~~~~~~"); |
||||
//PostMethod method = new PostMethod("http://wiki.4ecap.com/4ecapwiki/index.php?title=Special:UserLogin&action=submitlogin&type=login");
|
||||
PostMethod method = new PostMethod("http://wiki.4ecap.com/4ecapwiki/index.php?title=Special:UserLogin&wpCookieCheck=login"); |
||||
method.getParams().setCookiePolicy(CookiePolicy.RFC_2109); |
||||
method.addParameter("wpName", "rams"); |
||||
method.addParameter("wpPassword", "FECrams"); |
||||
|
||||
int returnCode = httpclient.executeMethod(method); |
||||
System.out.println("!!!!!!!!!!:"+method.getResponseBodyAsString()); |
||||
|
||||
|
||||
//Header[] h=method.getResponseHeaders();
|
||||
//for(int i=0;i<h.length;i++){
|
||||
// System.out.println("name:"+h[i].getName()+" value:"+h[i].getValue());
|
||||
//}
|
||||
|
||||
|
||||
//System.out.println("!!!!!!!!!!:"+method.getResponseBodyAsString());
|
||||
|
||||
//if(returnCode==HttpStatus.SC_ACCEPTED){
|
||||
saveCookie(method); |
||||
respo = httpclient.executeMethod(httpget); |
||||
doc =Jsoup.parse( httpget.getResponseBodyAsString()); |
||||
//}
|
||||
// System.out.println(":"+method.getResponseBodyAsString());
|
||||
|
||||
method.releaseConnection(); |
||||
}else{ |
||||
log.debug("~~~ already logged in~~~~~~~~"); |
||||
} |
||||
//System.out.println("page"+content);
|
||||
//HttpEntity entity = response.getEntity();
|
||||
//System.out.println("content:"+doc.select("body"));
|
||||
return doc.select(selector).toString() ; |
||||
|
||||
}catch(Exception e){ |
||||
e.printStackTrace(); |
||||
throw e; |
||||
} |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get Wiki HTML |
||||
* @param wikiUsername wiki username |
||||
* @param wikiPassword wiki password |
||||
* @param wikiUrl wiki url |
||||
* @param function_name function name |
||||
* @return Wiki HTML |
||||
*/ |
||||
public String getWikiHTML(String wikiUsername, String wikiPassword, String wikiUrl, String function_name) throws Exception { |
||||
try{ |
||||
|
||||
String rtn=null; |
||||
|
||||
//String username=Config.getString("wiki.username");
|
||||
//String password=Config.getString("wiki.password");
|
||||
//String wikiurl=Config.getString("wiki.wikiurl");
|
||||
|
||||
String username=wikiUsername; |
||||
String password=wikiPassword; |
||||
String wikiurl=wikiUrl; |
||||
|
||||
String url = wikiurl+"api.php?action=login&lgname="+username+"&lgpassword="+password+"&format=xml"; |
||||
//System.out.println(">>> url : " + url);
|
||||
|
||||
|
||||
//PostMethod method = new PostMethod("http://wiki.4ecap.com/4ecapwiki/api.php?action=login&lgname=Rams&lgpassword=FECrams");
|
||||
PostMethod method = new PostMethod(url); |
||||
|
||||
int returnCode = httpclient.executeMethod(method); |
||||
|
||||
if(returnCode==HttpStatus.SC_OK){ |
||||
|
||||
|
||||
|
||||
//String st=getToken(method,"4ecapwikidbToken");
|
||||
|
||||
String st=getToken(method.getResponseBodyAsString()); |
||||
|
||||
log.debug("output:"+st); |
||||
|
||||
PostMethod method1 = new PostMethod(wikiurl+"api.php?action=login&lgname="+username+"&lgpassword="+password+"&lgtoken="+st); |
||||
|
||||
returnCode = httpclient.executeMethod(method1); |
||||
method1.releaseConnection(); |
||||
if(returnCode ==HttpStatus.SC_OK){ |
||||
PostMethod method2 = new PostMethod(wikiurl+"index.php?action=render&title="+function_name); |
||||
returnCode = httpclient.executeMethod(method2); |
||||
rtn=method2.getResponseBodyAsString(); |
||||
method2.releaseConnection(); |
||||
} |
||||
|
||||
} |
||||
method.releaseConnection(); |
||||
return rtn; |
||||
|
||||
}catch(Exception e){ |
||||
//e.printStackTrace();
|
||||
throw e; |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* new wiki api pushes the token in body, earlier it used to be in header as cookie |
||||
* @param response |
||||
* @return token |
||||
*/ |
||||
private String getToken(String response){ |
||||
//Pattern p=Pattern.compile("^(.*?token=\")(.*?)(\".*?)$");
|
||||
Pattern p=Pattern.compile("(token=\")(.*?)(\")"); //simplified
|
||||
Matcher matcher = p.matcher(response); |
||||
String token=null; |
||||
if(matcher.find() && matcher.groupCount()>2){ |
||||
token=matcher.group(2); |
||||
} |
||||
return token; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get token |
||||
* @param method method |
||||
* @param tokenname token name |
||||
* @return token |
||||
*/ |
||||
private String getToken2 (HttpMethod method, String tokenname) { |
||||
|
||||
Header[] h=method.getResponseHeaders(); |
||||
|
||||
String rtn=""; |
||||
|
||||
for(int i=0;i<h.length;i++){ |
||||
String headerName = h[i].getName(); |
||||
String headerValue = h[i].getValue(); |
||||
|
||||
log.debug("header:"+headerName+" headerValue:"+headerValue); |
||||
|
||||
|
||||
if (headerName == null && headerValue == null) { |
||||
// No more headers
|
||||
//break;
|
||||
} |
||||
if ("Set-Cookie".equalsIgnoreCase(headerName)) { |
||||
// Parse cookie
|
||||
String[] fields = headerValue.split(";\\s*"); |
||||
|
||||
String cookieValue = fields[0]; |
||||
String[] cookieValues=cookieValue.split("="); |
||||
String expires = null; |
||||
String path = null; |
||||
String domain = null; |
||||
boolean secure = false; |
||||
|
||||
// Parse each field
|
||||
for (int j=1; j<fields.length; j++) { |
||||
if ("secure".equalsIgnoreCase(fields[j])) { |
||||
secure = true; |
||||
} else if (fields[j].indexOf('=') > 0) { |
||||
|
||||
String[] f = fields[j].split("="); |
||||
if ("expires".equalsIgnoreCase(f[0])) { |
||||
expires = f[1]; |
||||
} else if ("domain".equalsIgnoreCase(f[0])) { |
||||
domain = f[1]; |
||||
} else if ("path".equalsIgnoreCase(f[0])) { |
||||
path = f[1]; |
||||
} |
||||
} |
||||
} |
||||
|
||||
|
||||
//if(cookieValues.length==2 && cookieValues[0].equals("4ecapwikidbToken") ){
|
||||
if(cookieValues.length==2 && cookieValues[0].equals(tokenname) ){ |
||||
//httpclient.getState().addCookie(new Cookie(".4ecap.com", cookieValues[0], cookieValues[1], "/", null, false) );
|
||||
rtn=cookieValues[1]; |
||||
} |
||||
// Save the cookie...
|
||||
} |
||||
} |
||||
|
||||
return rtn; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* Save cookie |
||||
* @param method method |
||||
*/ |
||||
private void saveCookie(HttpMethod method) { |
||||
|
||||
Header[] h=method.getResponseHeaders(); |
||||
|
||||
|
||||
|
||||
for(int i=0;i<h.length;i++){ |
||||
String headerName = h[i].getName(); |
||||
String headerValue = h[i].getValue(); |
||||
|
||||
if (headerName == null && headerValue == null) { |
||||
// No more headers
|
||||
//break;
|
||||
} |
||||
if ("Set-Cookie".equalsIgnoreCase(headerName)) { |
||||
// Parse cookie
|
||||
String[] fields = headerValue.split(";\\s*"); |
||||
|
||||
String cookieValue = fields[0]; |
||||
String[] cookieValues=cookieValue.split("="); |
||||
String expires = null; |
||||
String path = null; |
||||
String domain = null; |
||||
boolean secure = false; |
||||
|
||||
// Parse each field
|
||||
for (int j=1; j<fields.length; j++) { |
||||
if ("secure".equalsIgnoreCase(fields[j])) { |
||||
secure = true; |
||||
} else if (fields[j].indexOf('=') > 0) { |
||||
|
||||
String[] f = fields[j].split("="); |
||||
if ("expires".equalsIgnoreCase(f[0])) { |
||||
expires = f[1]; |
||||
} else if ("domain".equalsIgnoreCase(f[0])) { |
||||
domain = f[1]; |
||||
} else if ("path".equalsIgnoreCase(f[0])) { |
||||
path = f[1]; |
||||
} |
||||
} |
||||
} |
||||
if(cookieValues.length==2){ |
||||
httpclient.getState().addCookie(new Cookie(".4ecap.com", cookieValues[0], cookieValues[1], "/", null, false) ); |
||||
} |
||||
// Save the cookie...
|
||||
} |
||||
} |
||||
|
||||
Cookie[] cookies = httpclient.getState().getCookies(); |
||||
for (int i = 0; i < cookies.length; i++) { |
||||
Cookie cookie = cookies[i]; |
||||
System.err.println( |
||||
"Cookie: " + cookie.getName() + |
||||
", Value: " + cookie.getValue() + |
||||
//", IsPersistent?: " + cookie.isPersistent() +
|
||||
", Expiry Date: " + cookie.getExpiryDate() + |
||||
//", Comment: " + cookie.getComment()+
|
||||
", path: " + cookie.getPath()+ |
||||
", domain: " + cookie.getDomain()); |
||||
|
||||
//cookie.setValue("My own value");
|
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
|
@ -0,0 +1,37 @@
|
||||
# DEFAULT CACHE REGION |
||||
jcs.default=DC |
||||
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes |
||||
jcs.default.cacheattributes.MaxObjects=1000 |
||||
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache |
||||
jcs.default.cacheattributes.UseMemoryShrinker=false |
||||
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600 |
||||
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60 |
||||
jcs.default.elementattributes=org.apache.jcs.engine.ElementAttributes |
||||
jcs.default.elementattributes.IsEternal=false |
||||
jcs.default.elementattributes.MaxLifeSeconds=21600 |
||||
jcs.default.elementattributes.IdleTime=1800 |
||||
jcs.default.elementattributes.IsSpool=true |
||||
jcs.default.elementattributes.IsRemote=true |
||||
jcs.default.elementattributes.IsLateral=true |
||||
|
||||
# PRE-DEFINED CACHE REGIONS |
||||
jcs.region.testCache1=DC |
||||
jcs.region.testCache1.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes |
||||
jcs.region.testCache1.cacheattributes.MaxObjects=1000 |
||||
jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache |
||||
jcs.region.testCache1.cacheattributes.UseMemoryShrinker=false |
||||
jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600 |
||||
jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60 |
||||
jcs.region.testCache1.cacheattributes.MaxSpoolPerRun=500 |
||||
jcs.region.testCache1.elementattributes=org.apache.jcs.engine.ElementAttributes |
||||
jcs.region.testCache1.elementattributes.IsEternal=false |
||||
|
||||
# AVAILABLE AUXILIARY CACHES |
||||
jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory |
||||
jcs.auxiliary.DC.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes |
||||
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap |
||||
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000 |
||||
jcs.auxiliary.DC.attributes.MaxKeySize=1000000 |
||||
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=5000 |
||||
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000 |
||||
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60 |
@ -0,0 +1,23 @@
|
||||
{{subject}}R Function [[function_name]] modified by [[current_user]] |
||||
{{/subject}}The following changes were made by [[current_user]] on R Function [[function_name]] |
||||
|
||||
|
||||
<div style='border:1px solid grey;padding:10px;margin-bottom:20px;'> |
||||
<pre> |
||||
[[diff]] |
||||
</pre> |
||||
</div> |
||||
|
||||
|
||||
User comments: |
||||
<div style='background-color:#e0e0e0;border:none;padding:10px; color:#0064EA;'> |
||||
[[comments]] |
||||
</div> |
||||
|
||||
|
||||
|
||||
<div style='border:0px solid #b0b0b0;margin-top:10px;'> |
||||
<small style='font-size:.7em'>To stop this alert remove your name on "Notification of Changes" column on Themes and Notification tab of the function</small> |
||||
</div> |
||||
|
||||
|
@ -0,0 +1,24 @@
|
||||
{{subject}}R Function [[task_name]] modified by [[current_user]] |
||||
{{/subject}}The following changes were made by [[current_user]] on Scheduler Script [[task_name]] (ID [[scheduler_id]]) |
||||
|
||||
|
||||
<div style='border:1px solid grey;padding:10px;margin-bottom:20px;'> |
||||
<pre> |
||||
[[diff]] |
||||
</pre> |
||||
</div> |
||||
|
||||
|
||||
User comments: |
||||
<div style='background-color:#e0e0e0;border:none;padding:10px; color:#0064EA;'> |
||||
[[comments]] |
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
<div style='border:0px solid #b0b0b0;margin-top:10px;'> |
||||
<small style='font-size:.7em'>To stop this alert remove your name on "Notification of Changes" column on Themes and Notification tab of the script</small> |
||||
</div> |
||||
|
||||
|
@ -0,0 +1,86 @@
|
||||
#should be used only in test server |
||||
#db_testing_version=[Development snapshot & Live data ] |
||||
|
||||
#production server color #EDF5FF //l.blue |
||||
#test server color #FBEFFB //l.red |
||||
#tab_body_bg=#FBEFFB |
||||
|
||||
load_balancing_server=4ecapsvsg2 |
||||
|
||||
log_error_folder=/home/p2pserver/logs/ |
||||
lucene_index_folder=/home/p2pserver/lucene/ |
||||
|
||||
log_error_to_console=yes |
||||
log_error_to_console_full=yes |
||||
|
||||
r_script_init=/mnt/public/Libs/Rinit.r |
||||
|
||||
r_function_source_folder=/home/fileserv/Sharing/Public/Libs/R Libs/4ECAPFunctions/ |
||||
r_function_path_url_prefix=\\\\10.153.64.10\\Public\\Libs\\R Libs\\4ECAPFunctions |
||||
|
||||
r_auto_source_inc_folder=/home/fileserv/Sharing/Public/Libs/ |
||||
r_auto_source_inc_prefix=//10.153.64.10/Public/Libs/R Libs/4ECAPFunctions/ |
||||
|
||||
#follwing file will be updated whenever user change the order of the folder. |
||||
r_source_4e_function_file=/home/fileserv/Sharing/Public/Libs/source_R_editor_modifed.r |
||||
r_source_4e_function_file_path_perfix=\\\\\\\\10.153.64.10\\\\Public\\\\Libs\\\\ |
||||
|
||||
wiki.username=Rams |
||||
wiki.password=FECrams |
||||
wiki.wikiurl=https://wiki.4ecap.com/4ecapwiki/ |
||||
|
||||
#p2p.taskpip=taskpip11 |
||||
#p2p.groupname=DiscoveryServer11 |
||||
p2p.ignorejri=true |
||||
|
||||
bloomberg.server.servletAPI.url=http://10.153.64.11:9090/bldb/schedulerAPI |
||||
|
||||
iexec_source_folder=/home/p2pserver/iexec_source/ |
||||
|
||||
hsql.queue.datafile=/home/p2pserver/queue/queue2 |
||||
|
||||
scheduler.report.folder=Z:/Research/Monitors/Scheduler/MonitorTab/ |
||||
|
||||
package.repository.unix=/home/fileserv/Sharing/Public/Libs/R Libs/4ECAPPackageUNIX |
||||
package.repository.win=/home/fileserv/Sharing/Public/Libs/R Libs/4ECAPPackage |
||||
|
||||
#not case sensitive |
||||
superuser.enable=rams,xavier,ls,be,andy,ari |
||||
|
||||
#make this as NIO Server (ExecuteR Server) |
||||
#true or false |
||||
#nio.server.mode=true |
||||
|
||||
#needed for peer to connect |
||||
#nio.server.address=10.153.64.45 |
||||
#needed both by server and peer bind the port on server side and open port on peerside. |
||||
#nio.server.port=1818 |
||||
|
||||
svn_user=svn4Euser |
||||
svn_pwd=4ESVN052011 |
||||
svn_url=svn://10.153.64.10/bldb |
||||
svn_local_path=/bldb |
||||
|
||||
svn_user_r=svn4Euser |
||||
svn_pwd_r=4ESVN052011 |
||||
svn_url_r=svn://10.153.64.10/rfunctions |
||||
svn_local_path_r=/rfunctions |
||||
|
||||
svn_url_ie=svn://10.153.64.10/iexec |
||||
svn_local_path_ie=/iexec |
||||
|
||||
#ignore phone alarm for these error codes |
||||
ignore.phone.alarm=2315,2317,2318,2319 |
||||
|
||||
|
||||
#-------------------------------------------------------@deprecated--------------------------------------------------------------- |
||||
#the followings are redundant and no longer being actively used. |
||||
|
||||
rtrs_download_xml_reqfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Queries/ |
||||
rtrs_download_xml_resfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Responses/ |
||||
rtrs_download_xml_statusfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Status/ |
||||
|
||||
bloomberg_synchronization=no |
||||
#scheduler_services_on=rhinoscript,rhinoscript1,rscriptlowpriority |
||||
#scheduler_services_on=bb_download,rscript,rhinoscript,rscript4reuters,rscriptlowpriority,rscript4bb,rscript4rserve,rscript4rservelow,rscript4rserveunix |
||||
scheduler_services_on=rhinoscript1,rhinoscript4priority |
@ -0,0 +1,98 @@
|
||||
#should be used only in test server |
||||
#db_testing_version=[Development snapshot & Live data ] |
||||
|
||||
#production server color #EDF5FF //l.blue |
||||
#test server color #FBEFFB //l.red |
||||
#tab_body_bg=#FBEFFB |
||||
|
||||
load_balancing_server=4ecappcsg21 |
||||
|
||||
log_error_folder=c:\\tomcat\\bldb_logs\\ |
||||
lucene_index_folder=c:\\tomcat\\index\\ |
||||
|
||||
log_error_to_console=yes |
||||
log_error_to_console_full=yes |
||||
|
||||
r_script_init=c:\\rJava\\r_init.txt |
||||
|
||||
r_function_source_folder=c:\\testing_data\\r_functions\\ |
||||
r_function_path_url_prefix=\\\\10.153.64.10\\Public\\Libs\\R Libs\\test2remove_4ECAPFunctions |
||||
|
||||
r_auto_source_inc_folder=//10.153.64.10/Public/Libs/R Libs/test2remove_4ECAPFunctions/Libs/ |
||||
r_auto_source_inc_prefix=//10.153.64.10/Public/Libs/R Libs/4ECAPFunctions/ |
||||
|
||||
#follwing file will be updated whenever user change the order of the folder. |
||||
r_source_4e_function_file=//10.153.64.10/Public/Libs/source_R_editor_modifed_tmp_2delete.r |
||||
r_source_4e_function_file_path_perfix=\\\\\\\\10.153.64.10\\\\Public\\\\Libs\\\\ |
||||
|
||||
wiki.username=Scheduler |
||||
wiki.password=Wd2MMjh4eBy4xVEGz4PVMagWUPszdSqKhNSe25HkqzdbEQS47B |
||||
wiki.wikiurl=https://wiki.4ecap.com/4ecapwiki/ |
||||
|
||||
p2p.taskpip=taskpip22 |
||||
p2p.groupname=DiscoveryServer22 |
||||
#p2p.taskpip.helper=taskpip_helper22 |
||||
p2p.cachepath=C:\\tomcat\\ |
||||
#p2p.ignorejri=false |
||||
|
||||
bloomberg.server.servletAPI.url=http://4ecapsvsg2:8080/bldb/schedulerAPI |
||||
|
||||
iexec_source_folder=c:\\testing_data\\iexec\\ |
||||
|
||||
hsql.queue.datafile=c:\\rnd\\hsqldb-2.2.9\\scheduler_data\\queue |
||||
|
||||
scheduler.report.folder=Z:/Research/Monitors/Scheduler/MonitorTab/ |
||||
|
||||
package.repository.unix=Z:\\Libs\\R Libs\\4ECAPPackageUNIX |
||||
package.repository.win=Z:\\Libs\\R Libs\\4ECAPPackage |
||||
|
||||
#not case sensitive |
||||
superuser.enable=raMs,xavier,be,ls |
||||
|
||||
#make this as NIO Server (ExecuteR Server) |
||||
#true or false |
||||
nio.server.mode=false |
||||
|
||||
#needed for peer to connect |
||||
#nio.server.address=10.153.64.19 |
||||
#needed both by server and peer bind the port on server side and open port on peerside. |
||||
#nio.server.port=1818 |
||||
|
||||
svn_user=svn4Euser |
||||
svn_pwd=4ESVN052011 |
||||
svn_url=svn://10.153.64.10/scheduler_test |
||||
svn_local_path=C:\\temp_repotest1\\sc5 |
||||
|
||||
svn_user_r=svn4Euser |
||||
svn_pwd_r=4ESVN052011 |
||||
svn_url_r=svn://10.153.64.10/rfunctions_test |
||||
svn_local_path_r=C:\\temp_repotest1\\rfunctions |
||||
|
||||
#svn_url_ie=svn://10.153.64.10/iexec |
||||
#svn_local_path_ie=C:\\temp_repotest1\\iexec |
||||
svn_url_ie=svn://10.153.64.10/iexec |
||||
svn_local_path_ie=C:\\temp_repotest1\\iexec |
||||
|
||||
|
||||
#for peers executing R Engine and RServe scripts. |
||||
r_script_console_logs=\\\\10.153.64.10\\Public\\Logs\\scheduler_rscripts\\ |
||||
|
||||
log_executeR_folder=c:\\tomcat\\webapps\\bldb\\executeRlogs\\ |
||||
|
||||
peer_home=C:\\4E_Peer\\ |
||||
|
||||
#ignore.authentication=true |
||||
#ignore.authentication=false; |
||||
#p2p.nomulticast=true |
||||
p2p.nomulticast=false |
||||
|
||||
|
||||
#-------------------------------------------------------@deprecated--------------------------------------------------------------- |
||||
#the followings are redundant and no longer being actively used. |
||||
|
||||
rtrs_download_xml_reqfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Queries/ |
||||
rtrs_download_xml_resfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Responses/ |
||||
rtrs_download_xml_statusfolder=smb://info:info@10.153.64.10/Public/IT/Reuters/Status/ |
||||
|
||||
bloomberg_synchronization=no |
||||
scheduler_services_on=rhinoscript1,rhinoscript4priority |
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE jxta:PGA> |
||||
<jxta:PGA xmlns:jxta="http://jxta.org"> |
||||
<GID> |
||||
urn:jxta:uuid-2810413B3CC24DB483F4BAE601CF875002 |
||||
</GID> |
||||
<MSID> |
||||
urn:jxta:uuid-29974C1D718F4E79A3A5E196818448850426E2ACBCB04EF6BF8F83B2A2C2E5CC06 |
||||
</MSID> |
||||
<Name> |
||||
Tomcat Bridge Group |
||||
</Name> |
||||
<Desc> |
||||
Prototype app for demonstrating Tomcat Bridge Group |
||||
</Desc> |
||||
</jxta:PGA> |
@ -0,0 +1,4 @@
|
||||
|
||||
peer.sendtask.received=Task Received from server |
||||
peer.sendtask.noroom2execute=Task failed, no room for execution |
||||
peer.sendtask.unknown=Error occured, Msg:[error_message] |
@ -0,0 +1,15 @@
|
||||
<!-- STRATEGY DESCRIPTION: --> |
||||
<STRATEGY name="[[name]]" expireonfullfill="true" automate="AUT1"> |
||||
|
||||
<QUANTITY> |
||||
</QUANTITY> |
||||
|
||||
<PRICE> |
||||
</PRICE> |
||||
|
||||
<MAXQUANTITY> |
||||
</MAXQUANTITY> |
||||
|
||||
<MAXQTYPRICE> |
||||
</MAXQTYPRICE> |
||||
</STRATEGY> |
@ -0,0 +1,47 @@
|
||||
|
||||
<mapping> |
||||
<scheduler> |
||||
|
||||
<!-- |
||||
valid settings |
||||
days=possitive numbers only i.e 2 is yesterday and today (last value of today) |
||||
hour: 00-23 |
||||
minute: 00-59 |
||||
weekday |
||||
--> |
||||
|
||||
|
||||
<!-- uncomment to activate scheduled job |
||||
<job days="2" hour="08" minute="20" weekday="MONDAY"/> |
||||
<job days="2" hour="08" minute="20" weekday="TUESDAY"/> |
||||
<job days="2" hour="08" minute="42" weekday="WEDNESDAY"/> |
||||
<job days="2" hour="08" minute="20" weekday="THURSDAY"/> |
||||
<job days="2" hour="08" minute="20" weekday="FRIDAY"/> |
||||
<job days="5" hour="08" minute="20" weekday="SATURDAY"/> |
||||
--> |
||||
|
||||
</scheduler> |
||||
|
||||
<commodity name="CL" bloombergmarketsector="Comdty"> |
||||
<!-- |
||||
Use comma for multiple tickers |
||||
--> |
||||
<ticker> |
||||
CLX8,CLZ8,CLF9,CLG9,CLH9,CLJ9,CLK9,CLM9,CLN9, |
||||
CLQ9,CLU9,CLV9,CLX9,CLZ9,CLF0 |
||||
</ticker> |
||||
<field bloomberg="PX_LAST" sqlserver="Close Price"/> |
||||
<field bloomberg="PX_VOLUME" sqlserver="Volume"/> |
||||
<field bloomberg="OPEN_INT" sqlserver="Open Interest"/> |
||||
|
||||
</commodity> |
||||
|
||||
<commodity name="CL" bloombergmarketsector="Index"> |
||||
<ticker> |
||||
NYM1CNCL |
||||
</ticker> |
||||
<field bloomberg="PX_LAST" sqlserver="Commercial Long"/> |
||||
</commodity> |
||||
|
||||
</mapping> |
||||
|
@ -0,0 +1,12 @@
|
||||
ignore.alarm=false |
||||
|
||||
#imonitor.url=http://10.153.64.31:5001/iMonitor/Responder.aspx |
||||
imonitor.ip=10.153.64.31 |
||||
imonitor.port=5655 |
||||
|
||||
#dump XML to file instead of sending it to iMonitor API |
||||
#alarm.dump=false |
||||
alarm.dump=true |
||||
alarm.dump.folder=/temp/scheduler-alarm/ |
||||
|
||||
|
@ -0,0 +1,7 @@
|
||||
database_wiki_connstring=jdbc:mysql://wiki.4ecap.com/4EwikiDB1?user=4ecremoteuser&password=4ecrmt2011 |
||||
database_wiki_driver=com.mysql.jdbc.Driver |
||||
|
||||
wiki_login_url=https://wiki.4ecap.com |
||||
|
||||
#superuser_password_folder=/home/p2pserver/logs/ |
||||
superuser_password_folder=c:\\tmp\\ |
@ -0,0 +1,2 @@
|
||||
db_close_timeout=20 |
||||
db_config_path=/mnt/public/Libs/.4E.config |
@ -0,0 +1,11 @@
|
||||
### This log4j.properties is to handle DWR (directwebremoting) only. DWR doesn't support log4j2. ### |
||||
### Without this, DWR will generate text to console (level:TRACE?). ### |
||||
|
||||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender |
||||
log4j.appender.stdout.Target=System.out |
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout |
||||
log4j.appender.stdout.layout.ConversionPattern=%4p %d{HH:mm:ss,SSS} %C - %m%n |
||||
|
||||
log4j.rootLogger=ERROR |
||||
log4j.logger.org.directwebremoting=ERROR,stdout |
||||
|
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<Configuration status="WARN"> |
||||
<Appenders> |
||||
<Console name="CONSOLE" target="SYSTEM_OUT"> |
||||
<PatternLayout pattern="%4p %d{HH:mm:ss,SSS} %C - %m%n" /> |
||||
</Console> |
||||
</Appenders> |
||||
<Loggers> |
||||
<Root level="ERROR"> |
||||
<AppenderRef ref="CONSOLE"/> |
||||
</Root> |
||||
<Logger name="log4j.logger.com.fe" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.com.fourelementscapital.scheduler.config.Config" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.com.fe.client.SchedulerMgmt" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.com.fe.client.LoginMgmt" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.com.fe.scheduler.balance.hsqldb" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.net.bull.javamelody" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.org.quartz" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.org.lobobrowser" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
<Logger name="log4j.logger.org.directwebremoting" level="ERROR" additivity="false"> |
||||
<Appender-ref ref="CONSOLE" /> |
||||
</Logger> |
||||
</Loggers> |
||||
</Configuration> |
@ -0,0 +1,78 @@
|
||||
#============================================================================ |
||||
# Configure Main Scheduler Properties |
||||
#============================================================================ |
||||
|
||||
org.quartz.scheduler.instanceName = CakeNoteScheduler |
||||
org.quartz.scheduler.instanceId = AUTO |
||||
org.quartz.scheduler.rmi.export = false |
||||
org.quartz.scheduler.rmi.proxy = false |
||||
|
||||
#============================================================================ |
||||
# Configure ThreadPool |
||||
#============================================================================ |
||||
|
||||
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool |
||||
org.quartz.threadPool.threadCount = 12 |
||||
org.quartz.threadPool.threadPriority = 5 |
||||
|
||||
#============================================================================ |
||||
# Configure JobStore |
||||
#============================================================================ |
||||
|
||||
org.quartz.jobStore.misfireThreshold = 60000 |
||||
|
||||
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore |
||||
|
||||
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX |
||||
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate |
||||
#org.quartz.jobStore.useProperties = false |
||||
#org.quartz.jobStore.dataSource = myDS |
||||
#org.quartz.jobStore.tablePrefix = QRTZ_ |
||||
#org.quartz.jobStore.isClustered = false |
||||
|
||||
#============================================================================ |
||||
# Configure Datasources |
||||
#============================================================================ |
||||
|
||||
#org.quartz.dataSource.myDS.driver = org.postgresql.Driver |
||||
#org.quartz.dataSource.myDS.URL = jdbc:postgresql://localhost/dev |
||||
#org.quartz.dataSource.myDS.user = jhouse |
||||
#org.quartz.dataSource.myDS.password = |
||||
#org.quartz.dataSource.myDS.maxConnections = 5 |
||||
|
||||
#============================================================================ |
||||
# JobInitializationPlugin (xml declarative way to trigger jobs) |
||||
#============================================================================ |
||||
|
||||
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin |
||||
#org.quartz.plugin.jobInitializer.fileName = quartz_jobs.xml |
||||
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = false |
||||
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true |
||||
|
||||
|
||||
|
||||
#============================================================================ |
||||
# Configure JobStore |
||||
#============================================================================ |
||||
|
||||
#org.quartz.jobStore.misfireThreshold = 60000 |
||||
|
||||
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX |
||||
#org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate |
||||
#org.quartz.jobStore.useProperties = false |
||||
#org.quartz.jobStore.dataSource = myDS |
||||
#org.quartz.jobStore.tablePrefix = QRTZ_ |
||||
#org.quartz.jobStore.isClustered = false |
||||
|
||||
#org.quartz.jobStore.clusterCheckinInterval = 20000 |
||||
|
||||
#============================================================================ |
||||
# Configure Datasources |
||||
#============================================================================ |
||||
|
||||
org.quartz.dataSource.myDS.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver |
||||
org.quartz.dataSource.myDS.URL = jdbc:sqlserver://10.153.64.3:1433;databaseName=quartz_scheduler;integratedSecurity=false |
||||
org.quartz.dataSource.myDS.user = dbuser11 |
||||
org.quartz.dataSource.myDS.password = dbuser11 |
||||
org.quartz.dataSource.myDS.maxConnections = 5 |
||||
org.quartz.dataSource.myDS.validationQuery=select 0 from dual |
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData |
||||
http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd" |
||||
version="1.5" overwrite-existing-jobs="true"> |
||||
<job> |
||||
<job-detail1> |
||||
<name>testjob</name> |
||||
<group>CAKENOTE_GROUP</group> |
||||
<description>Basic test job</description> |
||||
<job-class>com.fe.scheduler.TestJob</job-class> |
||||
<job-data-map allows-transient-data="false"> |
||||
<entry> |
||||
<key>param1</key> |
||||
<value>value1</value> |
||||
</entry> |
||||
<entry> |
||||
<key>param2</key> |
||||
<value>value2</value> |
||||
</entry> |
||||
</job-data-map> |
||||
</job-detail1> |
||||
<trigger1> |
||||
<simple> |
||||
<name>my-trigger</name> |
||||
<group>MYTRIGGER_GROUP</group> |
||||
<job-name>testjob</job-name> |
||||
<job-group>CAKENOTE_GROUP</job-group> |
||||
<!-- repeat indefinitely every 5 seconds --> |
||||
<repeat-count>-1</repeat-count> |
||||
<repeat-interval>5000</repeat-interval> |
||||
</simple> |
||||
</trigger1> |
||||
</job> |
||||
</quartz> |
@ -0,0 +1,24 @@
|
||||
{{subject}}R Function [[task_name]] modified by [[current_user]] |
||||
{{/subject}}The following changes were made by [[current_user]] on Scheduler Script [[task_name]] (ID [[scheduler_id]]) |
||||
|
||||
|
||||
<div style='border:1px solid grey;padding:10px;margin-bottom:20px;'> |
||||
<pre> |
||||
[[diff]] |
||||
</pre> |
||||
</div> |
||||
|
||||
|
||||
User comments: |
||||
<div style='background-color:#e0e0e0;border:none;padding:10px; color:#0064EA;'> |
||||
[[comments]] |
||||
</div> |
||||
|
||||
|
||||
|
||||
|
||||
<div style='border:0px solid #b0b0b0;margin-top:10px;'> |
||||
<small style='font-size:.7em'>To stop this alert remove your name on "Notification of Changes" column on Themes and Notification tab of the script</small> |
||||
</div> |
||||
|
||||
|
@ -0,0 +1,25 @@
|
||||
Release Notes for version 2.2.0 |
||||
|
||||
iTASK RELATED |
||||
============== |
||||
o : |
||||
|
||||
|
||||
Release Notes for version 2.1.0 |
||||
|
||||
iTASK RELATED |
||||
============== |
||||
|
||||
o 7535 : Improve the handling of scheduler errors (Skip phone alert for error codes : 2315, 2317, 2318, 2319). |
||||
o 7569 : Port queries to MariaDB nomenclature, move queries to DAL. |
||||
o 7745 : If script name contains '&' then no alarm is sent to iMonitor (replace escape chars for XML). |
||||
o 7858 : Add release note. |
||||
o 8169 : Remove hardcoding of infrastructure from scheduler code and move it to config. |
||||
o 8195 : Move database timeout to config. |
||||
o 8207 : Optimize scheduler queries. |
||||
|
||||
|
||||
|
||||
Release Notes for version 2.0.0 |
||||
|
||||
This is the original production version |
@ -0,0 +1,51 @@
|
||||
<!DOCTYPE dwr PUBLIC |
||||
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" |
||||
"http://www.getahead.ltd.uk/dwr/dwr10.dtd"> |
||||
|
||||
<dwr> |
||||
<allow> |
||||
|
||||
<create creator="new" javascript="AdminMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.AdminMgmt"/> |
||||
</create> |
||||
|
||||
<create creator="new" javascript="SchedulerMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.SchedulerMgmt"/> |
||||
</create> |
||||
|
||||
<create creator="new" javascript="RFunctionMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.RFunctionMgmt"/> |
||||
</create> |
||||
|
||||
<create creator="new" javascript="ExecuteRMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.ExecuteRMgmt"/> |
||||
</create> |
||||
|
||||
<create creator="new" javascript="IExecMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.IExecMgmt"/> |
||||
</create> |
||||
|
||||
<create creator="new" javascript="LoginMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.LoginMgmt"/> |
||||
</create> |
||||
|
||||
<create creator="new" javascript="MenuMgmt" scope="page"> |
||||
<param name="class" value="com.fe.client.MenuMgmt"/> |
||||
</create> |
||||
|
||||
|
||||
<!-- convert match="com.fe.ValueObject" converter="bean"/ --> |
||||
<convert converter="bean" match="com.fourelementscapital.db.vo.*"/> |
||||
|
||||
<convert match="java.lang.Exception" converter="exception"/> |
||||
<convert match="java.lang.StackTraceElement" converter="bean"/> |
||||
<convert match="com.fourelementscapital.scheduler.rscript.RScript" converter="bean"/> |
||||
<convert match="com.fourelementscapital.scheduler.pluggin.PlugginData" converter="bean"/> |
||||
<convert match="com.fourelementscapital.scheduler.engines.ScheduledTaskField" converter="bean"/> |
||||
|
||||
|
||||
|
||||
</allow> |
||||
|
||||
|
||||
</dwr> |
@ -0,0 +1,97 @@
|
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" |
||||
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> |
||||
|
||||
<!-- |
||||
|
||||
Configuration file for UrlRewriteFilter |
||||
http://tuckey.org/urlrewrite/ |
||||
|
||||
--> |
||||
<urlrewrite> |
||||
|
||||
<rule> |
||||
<note> |
||||
The rule means that requests to /test/status/ will be redirected to /rewrite-status |
||||
the url will be rewritten. |
||||
</note> |
||||
<from>/test/status/</from> |
||||
<to type="redirect">%{context-path}/rewrite-status</to> |
||||
</rule> |
||||
|
||||
|
||||
<outbound-rule> |
||||
<note> |
||||
The outbound-rule specifies that when response.encodeURL is called (if you are using JSTL c:url) |
||||
the url /rewrite-status will be rewritten to /test/status/. |
||||
|
||||
The above rule and this outbound-rule means that end users should never see the |
||||
url /rewrite-status only /test/status/ both in thier location bar and in hyperlinks |
||||
in your pages. |
||||
</note> |
||||
<from>/rewrite-status</from> |
||||
<to>/test/status/</to> |
||||
</outbound-rule> |
||||
|
||||
|
||||
<!-- |
||||
|
||||
INSTALLATION |
||||
|
||||
in your web.xml add... |
||||
|
||||
<filter> |
||||
<filter-name>UrlRewriteFilter</filter-name> |
||||
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> |
||||
<init-param> |
||||
<param-name>logLevel</param-name> |
||||
<param-value>WARN</param-value> |
||||
</init-param> |
||||
</filter> |
||||
<filter-mapping> |
||||
<filter-name>UrlRewriteFilter</filter-name> |
||||
<url-pattern>/*</url-pattern> |
||||
</filter-mapping> |
||||
|
||||
EXAMPLES |
||||
|
||||
Redirect one url |
||||
<rule> |
||||
<from>/some/old/page.html</from> |
||||
<to type="redirect">/very/new/page.html</to> |
||||
</rule> |
||||
|
||||
Redirect a directory |
||||
<rule> |
||||
<from>/some/olddir/(.*)</from> |
||||
<to type="redirect">/very/newdir/$1</to> |
||||
</rule> |
||||
|
||||
Clean a url |
||||
<rule> |
||||
<from>/products/([0-9]+)</from> |
||||
<to>/products/index.jsp?product_id=$1</to> |
||||
</rule> |
||||
eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing. |
||||
|
||||
Browser detection |
||||
<rule> |
||||
<condition name="user-agent">Mozilla/[1-4]</condition> |
||||
<from>/some/page.html</from> |
||||
<to>/some/page-for-old-browsers.html</to> |
||||
</rule> |
||||
eg, will pass the request for /some/page.html on to /some/page-for-old-browsers.html only for older |
||||
browsers whose user agent srtings match Mozilla/1, Mozilla/2, Mozilla/3 or Mozilla/4. |
||||
|
||||
Centralised browser detection |
||||
<rule> |
||||
<condition name="user-agent">Mozilla/[1-4]</condition> |
||||
<set type="request" name="browser">moz</set> |
||||
</rule> |
||||
eg, all requests will be checked against the condition and if matched |
||||
request.setAttribute("browser", "moz") will be called. |
||||
|
||||
--> |
||||
|
||||
</urlrewrite> |
||||
|
@ -0,0 +1,168 @@
|
||||
<?xml version="1.0"?> |
||||
<!-- |
||||
Licensed to the Apache Software Foundation (ASF) under one or more |
||||
contributor license agreements. See the NOTICE file distributed with |
||||
this work for additional information regarding copyright ownership. |
||||
The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
(the "License"); you may not use this file except in compliance with |
||||
the License. You may obtain a copy of the License at |
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
||||
Unless required by applicable law or agreed to in writing, software |
||||
distributed under the License is distributed on an "AS IS" BASIS, |
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
See the License for the specific language governing permissions and |
||||
limitations under the License. |
||||
--> |
||||
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
||||
version="2.5"> |
||||
|
||||
<display-name>Welcome to Tomcat</display-name> |
||||
<description> |
||||
Welcome to Tomcat |
||||
</description> |
||||
|
||||
|
||||
<servlet> |
||||
<servlet-name>dwr-invoker</servlet-name> |
||||
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> |
||||
<!-- |
||||
<init-param> |
||||
<param-name>debug</param-name> |
||||
<param-value>false</param-value> |
||||
</init-param> |
||||
--> |
||||
<init-param> |
||||
<param-name>logLevel</param-name> |
||||
<param-value>ERROR</param-value> |
||||
</init-param> |
||||
<init-param> |
||||
<param-name>allowScriptTagRemoting</param-name> |
||||
<param-value>true</param-value> |
||||
</init-param> |
||||
<init-param> |
||||
<param-name>crossDomainSessionSecurity</param-name> |
||||
<param-value>false</param-value> |
||||
</init-param> |
||||
|
||||
</servlet> |
||||
|
||||
|
||||
<servlet> |
||||
<servlet-name>servletinit</servlet-name> |
||||
<servlet-class>com.fe.scheduler.SchedulerInitServlet</servlet-class> |
||||
<load-on-startup>0</load-on-startup> |
||||
</servlet> |
||||
|
||||
|
||||
<servlet> |
||||
<servlet-name>p2pinit</servlet-name> |
||||
<servlet-class>com.fe.p2p.P2PServiceServlet</servlet-class> |
||||
<load-on-startup>0</load-on-startup> |
||||
</servlet> |
||||
|
||||
<servlet> |
||||
<servlet-name>SchedulerAPIServlet</servlet-name> |
||||
<servlet-class>com.fe.client.SchedulerAPIServlet</servlet-class> |
||||
</servlet> |
||||
|
||||
<servlet> |
||||
<servlet-name>rsyntax</servlet-name> |
||||
<servlet-class>com.fe.servlet.RSyntaxServlet</servlet-class> |
||||
</servlet> |
||||
|
||||
<servlet> |
||||
<servlet-name>fileuploader1</servlet-name> |
||||
<servlet-class>com.fe.servlet.FileUploader</servlet-class> |
||||
</servlet> |
||||
|
||||
<servlet> |
||||
<servlet-name>ace_mode_r</servlet-name> |
||||
<servlet-class>com.fe.servlet.AceModeRSyntax</servlet-class> |
||||
</servlet> |
||||
|
||||
<listener> |
||||
<listener-class>com.fe.servlet.P2PServletContextListener</listener-class> |
||||
</listener> |
||||
|
||||
<servlet> |
||||
<servlet-name>TomcatWSServer</servlet-name> |
||||
<servlet-class>com.fourelementscapital.scheduler.p2p.websocket.TomcatWSServer</servlet-class> |
||||
</servlet> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>TomcatWSServer</servlet-name> |
||||
<url-pattern>/ws/TomcatWSServer</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<servlet> |
||||
<servlet-name>TomcatWSExecuteRService</servlet-name> |
||||
<servlet-class>com.fe.p2p.websocket.TomcatWSExecuteRService</servlet-class> |
||||
</servlet> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>TomcatWSExecuteRService</servlet-name> |
||||
<url-pattern>/ws/TomcatWSExecuteRService</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<servlet> |
||||
<servlet-name>TomcatWSConsole</servlet-name> |
||||
<servlet-class>com.fourelementscapital.scheduler.p2p.websocket.TomcatWSConsole</servlet-class> |
||||
</servlet> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>TomcatWSConsole</servlet-name> |
||||
<url-pattern>/ws/TomcatWSConsole</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
|
||||
|
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>dwr-invoker</servlet-name> |
||||
<url-pattern>/dwr/*</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>SchedulerAPIServlet</servlet-name> |
||||
<url-pattern>/schedulerAPI</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>fileuploader1</servlet-name> |
||||
<url-pattern>/fileuploader</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>rsyntax</servlet-name> |
||||
<url-pattern>/editarea_0_8_2/reg_syntax/r.js</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
<servlet-mapping> |
||||
<servlet-name>ace_mode_r</servlet-name> |
||||
<url-pattern>/ace/src/mode-r.js</url-pattern> |
||||
</servlet-mapping> |
||||
|
||||
|
||||
|
||||
|
||||
<filter> |
||||
<filter-name>monitoring</filter-name> |
||||
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class> |
||||
</filter> |
||||
<filter-mapping> |
||||
<filter-name>monitoring</filter-name> |
||||
<url-pattern>/*</url-pattern> |
||||
</filter-mapping> |
||||
<listener> |
||||
<listener-class>net.bull.javamelody.SessionListener</listener-class> |
||||
</listener> |
||||
|
||||
|
||||
|
||||
</web-app> |
@ -0,0 +1 @@
|
||||
04917953ffdb7c700a64cc179b252fafeb0f0854 |
@ -0,0 +1,156 @@
|
||||
2012.09.17, Version 1.0.0 |
||||
|
||||
* New Features |
||||
- Multiple cursors and selections (https://c9.io/site/blog/2012/08/be-an-armenian-warrior-with-block-selection-on-steroids/) |
||||
- Fold buttons displayed in the gutter |
||||
- Indent Guides |
||||
- Completely reworked vim mode (Sergi Mansilla) |
||||
- Improved emacs keybindings |
||||
- Autoclosing of html tags (danyaPostfactum) |
||||
|
||||
* 20 New language modes |
||||
- Coldfusion (Russ) |
||||
- Diff |
||||
- GLSL (Ed Mackey) |
||||
- Go (Davide Saurino) |
||||
- Haxe (Jason O'Neil) |
||||
- Jade (Garen Torikian) |
||||
- jsx (Syu Kato) |
||||
- LaTeX (James Allen) |
||||
- Less (John Roepke) |
||||
- Liquid (Bernie Telles) |
||||
- Lua (Lee Gao) |
||||
- LuaPage (Choonster) |
||||
- Markdown (Chris Spencer) |
||||
- PostgreSQL (John DeSoi) |
||||
- Powershell (John Kane) |
||||
- Sh (Richo Healey) |
||||
- SQL (Jonathan Camile) |
||||
- Tcl (Cristoph Hochreiner) |
||||
- XQuery (William Candillion) |
||||
- Yaml (Meg Sharkey) |
||||
|
||||
* Live syntax checks |
||||
- for XQuery and JSON |
||||
|
||||
* New Themes |
||||
- Ambiance (Irakli Gozalishvili) |
||||
- Dreamweaver (Adam Jimenez) |
||||
- Github (bootstraponline) |
||||
- Tommorrow themes (https://github.com/chriskempson/tomorrow-theme) |
||||
- XCode |
||||
|
||||
* Many Small Enhancements and Bugfixes |
||||
|
||||
2011.08.02, Version 0.2.0 |
||||
|
||||
* Split view (Julian Viereck) |
||||
- split editor area horizontally or vertivally to show two files at the same |
||||
time |
||||
|
||||
* Code Folding (Julian Viereck) |
||||
- Unstructured code folding |
||||
- Will be the basis for language aware folding |
||||
|
||||
* Mode behaviours (Chris Spencer) |
||||
- Adds mode specific hooks which allow transformations of entered text |
||||
- Autoclosing of braces, paranthesis and quotation marks in C style modes |
||||
- Autoclosing of angular brackets in XML style modes |
||||
|
||||
* New language modes |
||||
- Clojure (Carin Meier) |
||||
- C# (Rob Conery) |
||||
- Groovy (Ben Tilford) |
||||
- Scala (Ben Tilford) |
||||
- JSON |
||||
- OCaml (Sergi Mansilla) |
||||
- Perl (Panagiotis Astithas) |
||||
- SCSS/SASS (Andreas Madsen) |
||||
- SVG |
||||
- Textile (Kelley van Evert) |
||||
- SCAD (Jacob Hansson) |
||||
|
||||
* Live syntax checks |
||||
- Lint for CSS using CSS Lint <http://csslint.net/> |
||||
- CoffeeScript |
||||
|
||||
* New Themes |
||||
- Crimson Editor (iebuggy) |
||||
- Merbivore (Michael Schwartz) |
||||
- Merbivore soft (Michael Schwartz) |
||||
- Solarized dark/light <http://ethanschoonover.com/solarized> (David Alan Hjelle) |
||||
- Vibrant Ink (Michael Schwartz) |
||||
|
||||
* Small Features/Enhancements |
||||
- Lots of render performance optimizations (Harutyun Amirjanyan) |
||||
- Improved Ruby highlighting (Chris Wanstrath, Trent Ogren) |
||||
- Improved PHP highlighting (Thomas Hruska) |
||||
- Improved CSS highlighting (Sean Kellogg) |
||||
- Clicks which cause the editor to be focused don't reset the selection |
||||
- Make padding text layer specific so that print margin and active line |
||||
highlight are not affected (Irakli Gozalishvili) |
||||
- Added setFontSize method |
||||
- Improved vi keybindings (Trent Ogren) |
||||
- When unfocused make cursor transparent instead of removing it (Harutyun Amirjanyan) |
||||
- Support for matching groups in tokenizer with arrays of tokens (Chris Spencer) |
||||
|
||||
* Bug fixes |
||||
- Add support for the new OSX scroll bars |
||||
- Properly highlight JavaScript regexp literals |
||||
- Proper handling of unicode characters in JavaScript identifiers |
||||
- Fix remove lines command on last line (Harutyun Amirjanyan) |
||||
- Fix scroll wheel sluggishness in Safari |
||||
- Make keyboard infrastructure route keys like []^$ the right way (Julian Viereck) |
||||
|
||||
2011.02.14, Version 0.1.6 |
||||
|
||||
* Floating Anchors |
||||
- An Anchor is a floating pointer in the document. |
||||
- Whenever text is inserted or deleted before the cursor, the position of |
||||
the cursor is updated |
||||
- Usesd for the cursor and selection |
||||
- Basis for bookmarks, multiple cursors and snippets in the future |
||||
* Extensive support for Cocoa style keybindings on the Mac <https://github.com/ajaxorg/ace/issues/closed#issue/116/comment/767803> |
||||
* New commands: |
||||
- center selection in viewport |
||||
- remove to end/start of line |
||||
- split line |
||||
- transpose letters |
||||
* Refator markers |
||||
- Custom code can be used to render markers |
||||
- Markers can be in front or behind the text |
||||
- Markers are now stored in the session (was in the renderer) |
||||
* Lots of IE8 fixes including copy, cut and selections |
||||
* Unit tests can also be run in the browser |
||||
<https://github.com/ajaxorg/ace/blob/master/lib/ace/test/tests.html> |
||||
* Soft wrap can adapt to the width of the editor (Mike Ratcliffe, Joe Cheng) |
||||
* Add minimal node server server.js to run the Ace demo in Chrome |
||||
* The top level editor.html demo has been renamed to index.html |
||||
* Bug fixes |
||||
- Fixed gotoLine to consider wrapped lines when calculating where to scroll to (James Allen) |
||||
- Fixed isues when the editor was scrolled in the web page (Eric Allam) |
||||
- Highlighting of Python string literals |
||||
- Syntax rule for PHP comments |
||||
|
||||
2011.02.08, Version 0.1.5 |
||||
|
||||
* Add Coffeescript Mode (Satoshi Murakami) |
||||
* Fix word wrap bug (Julian Viereck) |
||||
* Fix packaged version of the Eclipse mode |
||||
* Loading of workers is more robust |
||||
* Fix "click selection" |
||||
* Allow tokizing empty lines (Daniel Krech) |
||||
* Make PageUp/Down behavior more consistent with native OS (Joe Cheng) |
||||
|
||||
2011.02.04, Version 0.1.4 |
||||
|
||||
* Add C/C++ mode contributed by Gastón Kleiman |
||||
* Fix exception in key input |
||||
|
||||
2011.02.04, Version 0.1.3 |
||||
|
||||
* Let the packaged version play nice with requireJS |
||||
* Add Ruby mode contributed by Shlomo Zalman Heigh |
||||
* Add Java mode contributed by Tom Tasche |
||||
* Fix annotation bug |
||||
* Changing a document added a new empty line at the end |
@ -0,0 +1,24 @@
|
||||
Copyright (c) 2010, Ajax.org B.V. |
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are met: |
||||
* Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in the |
||||
documentation and/or other materials provided with the distribution. |
||||
* Neither the name of Ajax.org B.V. nor the |
||||
names of its contributors may be used to endorse or promote products |
||||
derived from this software without specific prior written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY |
||||
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,21 @@
|
||||
Ace (Ajax.org Cloud9 Editor) |
||||
============================ |
||||
|
||||
Ace is a code editor written in JavaScript. |
||||
|
||||
This repository has only generated files. |
||||
If you want to work on ace please go to https://github.com/ajaxorg/ace instead. |
||||
|
||||
|
||||
here you can find pre-built files for convenience of embedding. |
||||
it contains 4 versions |
||||
* [src](https://github.com/ajaxorg/ace-builds/tree/master/src) concatenated but not minified |
||||
* [src-min](https://github.com/ajaxorg/ace-builds/tree/master/src-min) concatenated and minified with uglify.js |
||||
* [src-noconflict](https://github.com/ajaxorg/ace-builds/tree/master/src-noconflict) uses ace.require instead of require |
||||
* [src-min-noconflict](https://github.com/ajaxorg/ace-builds/tree/master/src-min-noconflict) - |
||||
|
||||
|
||||
For a simple way of embedding ace into webpage see https://github.com/ajaxorg/ace-builds/blob/master/editor.html |
||||
To see ace in action go to [kitchen-sink-demo](http://ajaxorg.github.com/ace-builds/kitchen-sink.html), [scrollable-page-demo](http://ajaxorg.github.com/ace-builds/scrollable-page.html), or [minimal demo](http://ajaxorg.github.com/ace-builds/editor.html) |
||||
|
||||
|
After Width: | Height: | Size: 16 KiB |
@ -0,0 +1,47 @@
|
||||
/*PACKAGE |
||||
@import url(//fonts.googleapis.com/css?family=Droid+Sans+Mono); |
||||
PACKAGE*/ |
||||
|
||||
html { |
||||
height: 100%; |
||||
width: 100%; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
body { |
||||
overflow: hidden; |
||||
margin: 0; |
||||
padding: 0; |
||||
height: 100%; |
||||
width: 100%; |
||||
font-family: Arial, Helvetica, sans-serif, Tahoma, Verdana, sans-serif; |
||||
font-size: 12px; |
||||
background: rgb(14, 98, 165); |
||||
color: white; |
||||
} |
||||
|
||||
#logo { |
||||
padding: 15px; |
||||
margin-left: 70px; |
||||
} |
||||
|
||||
#editor { |
||||
position: absolute; |
||||
top: 0px; |
||||
left: 280px; |
||||
bottom: 0px; |
||||
right: 0px; |
||||
background: white; |
||||
} |
||||
|
||||
#controls { |
||||
padding: 5px; |
||||
} |
||||
|
||||
#controls td { |
||||
text-align: right; |
||||
} |
||||
|
||||
#controls td + td { |
||||
text-align: left; |
||||
} |
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
<title>Editor</title> |
||||
<style type="text/css" media="screen"> |
||||
body { |
||||
overflow: hidden; |
||||
} |
||||
|
||||
#editor { |
||||
margin: 0; |
||||
position: absolute; |
||||
top: 0; |
||||
bottom: 0; |
||||
left: 0; |
||||
right: 0; |
||||
} |
||||
</style> |
||||
</head> |
||||
<body> |
||||
|
||||
<pre id="editor">function foo(items) { |
||||
var i; |
||||
for (i = 0; i < items.length; i++) { |
||||
alert("Ace Rocks " + items[i]); |
||||
} |
||||
}</pre> |
||||
|
||||
<script src="src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script> |
||||
<script> |
||||
var editor = ace.edit("editor"); |
||||
editor.setTheme("ace/theme/twilight"); |
||||
editor.getSession().setMode("ace/mode/javascript"); |
||||
</script> |
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,268 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" |
||||
"http://www.w3.org/TR/html4/strict.dtd"> |
||||
|
||||
<html lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||
<title>Ace Kitchen Sink</title> |
||||
<meta name="author" content="Fabian Jakobs"> |
||||
<!-- |
||||
|
||||
Ace |
||||
version |
||||
commit |
||||
|
||||
--> |
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="kitchen-sink/styles.css" type="text/css" media="screen" charset="utf-8"> |
||||
|
||||
</head> |
||||
<body> |
||||
<a href="http://ajaxorg.github.com/ace/" > |
||||
<img id="logo" src="kitchen-sink/logo.png"> |
||||
</a> |
||||
<table id="controls"> |
||||
<tr> |
||||
<td> |
||||
<label for="doc">Document</label> |
||||
</td><td> |
||||
<select id="doc" size="1"> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="mode">Mode</label> |
||||
</td><td> |
||||
<select id="mode" size="1"> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="split">Split</label> |
||||
</td><td> |
||||
<select id="split" size="1"> |
||||
<option value="none">None</option> |
||||
<option value="below">Below</option> |
||||
<option value="beside">Beside</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="theme">Theme</label> |
||||
</td><td> |
||||
<select id="theme" size="1"> |
||||
<optgroup label="Bright"> |
||||
<option value="ace/theme/chrome">Chrome</option> |
||||
<option value="ace/theme/clouds">Clouds</option> |
||||
<option value="ace/theme/crimson_editor">Crimson Editor</option> |
||||
<option value="ace/theme/dawn">Dawn</option> |
||||
<option value="ace/theme/dreamweaver">Dreamweaver</option> |
||||
<option value="ace/theme/eclipse">Eclipse</option> |
||||
<option value="ace/theme/github">GitHub</option> |
||||
<option value="ace/theme/solarized_light">Solarized Light</option> |
||||
<option value="ace/theme/textmate" selected="selected">TextMate</option> |
||||
<option value="ace/theme/tomorrow">Tomorrow</option> |
||||
<option value="ace/theme/xcode">XCode</option> |
||||
</optgroup> |
||||
<optgroup label="Dark"> |
||||
<option value="ace/theme/ambiance">Ambiance</option> |
||||
<option value="ace/theme/chaos">Chaos</option> |
||||
<option value="ace/theme/clouds_midnight">Clouds Midnight</option> |
||||
<option value="ace/theme/cobalt">Cobalt</option> |
||||
<option value="ace/theme/idle_fingers">idleFingers</option> |
||||
<option value="ace/theme/kr_theme">krTheme</option> |
||||
<option value="ace/theme/merbivore">Merbivore</option> |
||||
<option value="ace/theme/merbivore_soft">Merbivore Soft</option> |
||||
<option value="ace/theme/mono_industrial">Mono Industrial</option> |
||||
<option value="ace/theme/monokai">Monokai</option> |
||||
<option value="ace/theme/pastel_on_dark">Pastel on dark</option> |
||||
<option value="ace/theme/solarized_dark">Solarized Dark</option> |
||||
<option value="ace/theme/twilight">Twilight</option> |
||||
<option value="ace/theme/tomorrow_night">Tomorrow Night</option> |
||||
<option value="ace/theme/tomorrow_night_blue">Tomorrow Night Blue</option> |
||||
<option value="ace/theme/tomorrow_night_bright">Tomorrow Night Bright</option> |
||||
<option value="ace/theme/tomorrow_night_eighties">Tomorrow Night 80s</option> |
||||
<option value="ace/theme/vibrant_ink">Vibrant Ink</option> |
||||
</optgroup> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="fontsize">Font Size</label> |
||||
</td><td> |
||||
<select id="fontsize" size="1"> |
||||
<option value="10px">10px</option> |
||||
<option value="11px">11px</option> |
||||
<option value="12px" selected="selected">12px</option> |
||||
<option value="14px">14px</option> |
||||
<option value="16px">16px</option> |
||||
<option value="20px">20px</option> |
||||
<option value="24px">24px</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="folding">Code Folding</label> |
||||
</td><td> |
||||
<select id="folding" size="1"> |
||||
<option value="manual">manual</option> |
||||
<option value="markbegin" selected="selected">mark begin</option> |
||||
<option value="markbeginend">mark begin and end</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="keybinding">Key Binding</label> |
||||
</td><td> |
||||
<select id="keybinding" size="1"> |
||||
<option value="ace">Ace</option> |
||||
<option value="vim">Vim</option> |
||||
<option value="emacs">Emacs</option> |
||||
<option value="custom">Custom</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="soft_wrap">Soft Wrap</label> |
||||
</td><td> |
||||
<select id="soft_wrap" size="1"> |
||||
<option value="off">Off</option> |
||||
<option value="40">40 Chars</option> |
||||
<option value="80">80 Chars</option> |
||||
<option value="free">Free</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
|
||||
<tr><td colspan="2"> |
||||
<table id="more-controls"> |
||||
<tr> |
||||
<td> |
||||
<label for="select_style">Full Line Selection</label> |
||||
</td><td> |
||||
<input type="checkbox" name="select_style" id="select_style" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="highlight_active">Highlight Active Line</label> |
||||
</td><td> |
||||
<input type="checkbox" name="highlight_active" id="highlight_active" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_hidden">Show Invisibles</label> |
||||
</td><td> |
||||
<input type="checkbox" name="show_hidden" id="show_hidden" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="display_indent_guides">Show Indent Guides</label> |
||||
</td><td> |
||||
<input type="checkbox" name="display_indent_guides" id="display_indent_guides" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_hscroll">Persistent HScroll</label> |
||||
</td><td> |
||||
<input type="checkbox" name="show_hscroll" id="show_hscroll"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="animate_scroll">Animate scrolling</label> |
||||
</td><td> |
||||
<input type="checkbox" name="animate_scroll" id="animate_scroll"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_gutter">Show Gutter</label> |
||||
</td><td> |
||||
<input type="checkbox" id="show_gutter" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_print_margin">Show Print Margin</label> |
||||
</td><td> |
||||
<input type="checkbox" id="show_print_margin" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="soft_tab">Use Soft Tab</label> |
||||
</td><td> |
||||
<input type="checkbox" id="soft_tab" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="highlight_selected_word">Highlight selected word</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="highlight_selected_word" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="enable_behaviours">Enable Behaviours</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="enable_behaviours"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="fade_fold_widgets">Fade Fold Widgets</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="fade_fold_widgets"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="highlight_token">Show token info</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="highlight_token"> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</td></tr> |
||||
</table> |
||||
|
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div id="editor-container"></div> |
||||
|
||||
|
||||
|
||||
|
||||
<script src="../demo/kitchen-sink/require.js"></script> |
||||
<script src="src/ace.js" data-ace-base="src"></script> |
||||
<script src="src/keybinding-vim.js"></script> |
||||
<script src="src/keybinding-emacs.js"></script> |
||||
<script src="kitchen-sink/demo.js"></script> |
||||
<script type="text/javascript" charset="utf-8"> |
||||
require(["kitchen-sink/demo", "ace/ace"]) |
||||
|
||||
</script> |
||||
|
||||
|
||||
</body> |
||||
</html> |
@ -0,0 +1,287 @@
|
||||
<!DOCTYPE html> |
||||
|
||||
<html lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
||||
<title>Ace Kitchen Sink</title> |
||||
<meta name="author" content="Fabian Jakobs"> |
||||
<!-- |
||||
Ace |
||||
version |
||||
commit |
||||
--> |
||||
|
||||
|
||||
|
||||
<link href="./doc/site/images/favicon.ico" rel="icon" type="image/x-icon"> |
||||
|
||||
<link rel="stylesheet" href="kitchen-sink/styles.css" type="text/css" media="screen" charset="utf-8"> |
||||
<script async="true" src="http://use.edgefonts.net/source-code-pro.js"></script> |
||||
|
||||
</head> |
||||
<body> |
||||
<div id="optionsPanel" style="position:absolute;height:100%;width:260px"> |
||||
<a href="http://ajaxorg.github.com/ace/" > |
||||
<img id="logo" src="kitchen-sink/logo.png"> |
||||
</a> |
||||
<div style="position: absolute; overflow: hidden; top:80px; bottom:0"> |
||||
<div style="width: 120%; height:100%; overflow-y: scroll"> |
||||
|
||||
<table id="controls"> |
||||
<tr> |
||||
<td> |
||||
<label for="doc">Document</label> |
||||
</td><td> |
||||
<select id="doc" size="1"> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="mode">Mode</label> |
||||
</td><td> |
||||
<select id="mode" size="1"> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="split">Split</label> |
||||
</td><td> |
||||
<select id="split" size="1"> |
||||
<option value="none">None</option> |
||||
<option value="below">Below</option> |
||||
<option value="beside">Beside</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="theme">Theme</label> |
||||
</td><td> |
||||
<select id="theme" size="1"> |
||||
<optgroup label="Bright"> |
||||
<option value="ace/theme/chrome">Chrome</option> |
||||
<option value="ace/theme/clouds">Clouds</option> |
||||
<option value="ace/theme/crimson_editor">Crimson Editor</option> |
||||
<option value="ace/theme/dawn">Dawn</option> |
||||
<option value="ace/theme/dreamweaver">Dreamweaver</option> |
||||
<option value="ace/theme/eclipse">Eclipse</option> |
||||
<option value="ace/theme/github">GitHub</option> |
||||
<option value="ace/theme/solarized_light">Solarized Light</option> |
||||
<option value="ace/theme/textmate" selected="selected">TextMate</option> |
||||
<option value="ace/theme/tomorrow">Tomorrow</option> |
||||
<option value="ace/theme/xcode">XCode</option> |
||||
</optgroup> |
||||
<optgroup label="Dark"> |
||||
<option value="ace/theme/ambiance">Ambiance</option> |
||||
<option value="ace/theme/chaos">Chaos</option> |
||||
<option value="ace/theme/clouds_midnight">Clouds Midnight</option> |
||||
<option value="ace/theme/cobalt">Cobalt</option> |
||||
<option value="ace/theme/idle_fingers">idleFingers</option> |
||||
<option value="ace/theme/kr_theme">krTheme</option> |
||||
<option value="ace/theme/merbivore">Merbivore</option> |
||||
<option value="ace/theme/merbivore_soft">Merbivore Soft</option> |
||||
<option value="ace/theme/mono_industrial">Mono Industrial</option> |
||||
<option value="ace/theme/monokai">Monokai</option> |
||||
<option value="ace/theme/pastel_on_dark">Pastel on dark</option> |
||||
<option value="ace/theme/solarized_dark">Solarized Dark</option> |
||||
<option value="ace/theme/twilight">Twilight</option> |
||||
<option value="ace/theme/tomorrow_night">Tomorrow Night</option> |
||||
<option value="ace/theme/tomorrow_night_blue">Tomorrow Night Blue</option> |
||||
<option value="ace/theme/tomorrow_night_bright">Tomorrow Night Bright</option> |
||||
<option value="ace/theme/tomorrow_night_eighties">Tomorrow Night 80s</option> |
||||
<option value="ace/theme/vibrant_ink">Vibrant Ink</option> |
||||
</optgroup> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="fontsize">Font Size</label> |
||||
</td><td> |
||||
<select id="fontsize" size="1"> |
||||
<option value="10px">10px</option> |
||||
<option value="11px">11px</option> |
||||
<option value="12px" selected="selected">12px</option> |
||||
<option value="13px">13px</option> |
||||
<option value="14px">14px</option> |
||||
<option value="16px">16px</option> |
||||
<option value="18px">18px</option> |
||||
<option value="20px">20px</option> |
||||
<option value="24px">24px</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="folding">Code Folding</label> |
||||
</td><td> |
||||
<select id="folding" size="1"> |
||||
<option value="manual">manual</option> |
||||
<option value="markbegin" selected="selected">mark begin</option> |
||||
<option value="markbeginend">mark begin and end</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="keybinding">Key Binding</label> |
||||
</td><td> |
||||
<select id="keybinding" size="1"> |
||||
<option value="ace">Ace</option> |
||||
<option value="vim">Vim</option> |
||||
<option value="emacs">Emacs</option> |
||||
<option value="custom">Custom</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="soft_wrap">Soft Wrap</label> |
||||
</td><td> |
||||
<select id="soft_wrap" size="1"> |
||||
<option value="off">Off</option> |
||||
<option value="40">40 Chars</option> |
||||
<option value="80">80 Chars</option> |
||||
<option value="free">Free</option> |
||||
</select> |
||||
</td> |
||||
</tr> |
||||
|
||||
<tr><td colspan="2"> |
||||
<table id="more-controls"> |
||||
<tr> |
||||
<td> |
||||
<label for="select_style">Full Line Selection</label> |
||||
</td><td> |
||||
<input type="checkbox" name="select_style" id="select_style" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td> |
||||
<label for="highlight_active">Highlight Active Line</label> |
||||
</td><td> |
||||
<input type="checkbox" name="highlight_active" id="highlight_active" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_hidden">Show Invisibles</label> |
||||
</td><td> |
||||
<input type="checkbox" name="show_hidden" id="show_hidden" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="display_indent_guides">Show Indent Guides</label> |
||||
</td><td> |
||||
<input type="checkbox" name="display_indent_guides" id="display_indent_guides" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_hscroll">Persistent HScroll</label> |
||||
</td><td> |
||||
<input type="checkbox" name="show_hscroll" id="show_hscroll"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="animate_scroll">Animate scrolling</label> |
||||
</td><td> |
||||
<input type="checkbox" name="animate_scroll" id="animate_scroll"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_gutter">Show Gutter</label> |
||||
</td><td> |
||||
<input type="checkbox" id="show_gutter" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="show_print_margin">Show Print Margin</label> |
||||
</td><td> |
||||
<input type="checkbox" id="show_print_margin" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="soft_tab">Use Soft Tab</label> |
||||
</td><td> |
||||
<input type="checkbox" id="soft_tab" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="highlight_selected_word">Highlight selected word</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="highlight_selected_word" checked> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="enable_behaviours">Enable Behaviours</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="enable_behaviours"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="fade_fold_widgets">Fade Fold Widgets</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="fade_fold_widgets"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="elastic_tabstops">Enable Elastic Tabstops</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="elastic_tabstops"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="highlight_token">Show token info</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="highlight_token"> |
||||
</td> |
||||
</tr> |
||||
<tr> |
||||
<td > |
||||
<label for="read_only">Read-only</label> |
||||
</td> |
||||
<td> |
||||
<input type="checkbox" id="read_only"> |
||||
</td> |
||||
</tr> |
||||
</table> |
||||
</td></tr> |
||||
</table> |
||||
|
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div id="editor-container"></div> |
||||
|
||||
|
||||
|
||||
|
||||
<script src="src/ace.js" data-ace-base="src" type="text/javascript" charset="utf-8"></script> |
||||
<script src="src/keybinding-vim.js"></script> |
||||
<script src="src/keybinding-emacs.js"></script> |
||||
<script src="kitchen-sink/demo.js"></script> |
||||
<script type="text/javascript" charset="utf-8"> |
||||
require("kitchen-sink/demo"); |
||||
</script> |
||||
|
||||
|
||||
</body> |
||||
</html> |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,17 @@
|
||||
class Haxe |
||||
{ |
||||
public static function main() |
||||
{ |
||||
// Say Hello! |
||||
var greeting:String = "Hello World"; |
||||
trace(greeting); |
||||
|
||||
var targets:Array<String> = ["Flash","Javascript","PHP","Neko","C++","iOS","Android","webOS"]; |
||||
trace("Haxe is a great language that can target:"); |
||||
for (target in targets) |
||||
{ |
||||
trace (" - " + target); |
||||
} |
||||
trace("And many more!"); |
||||
} |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue