Browse Source

Merge remote-tracking branch 'origin/main'

Conflicts:
	.gitignore
	README.md
master
Bernarto P Tjahjono 2 years ago
parent
commit
c9ab64f1ca
  1. 4
      .gitignore
  2. 45
      Examples/iexec/pom.xml
  3. 74
      Examples/iexec/src/main/java/com/fourelementscapital/iexec/common/IExecMgmt.java
  4. 78
      Examples/qlib/pom.xml
  5. 305
      Examples/qlib/src/main/java/com/fourelementscapital/rfunction/common/AbstractTeamOrgMgmt.java
  6. 164
      Examples/qlib/src/main/java/com/fourelementscapital/rfunction/common/RFunctionMgmt.java
  7. 46
      Examples/qlib/src/main/java/com/fourelementscapital/rfunction/common/SchedulerMgmt.java
  8. 3
      README.md
  9. 26
      archetype-app/pom.xml
  10. 36
      archetype-app/src/main/resources/META-INF/maven/archetype-metadata.xml
  11. 149
      archetype-app/src/main/resources/archetype-resources/pom.xml
  12. 26
      archetype-app/src/main/resources/archetype-resources/src/main/java/App.java
  13. 13
      archetype-app/src/main/resources/archetype-resources/src/main/resources/log4j2.xml
  14. 47
      archetype-app/src/main/resources/archetype-resources/src/test/java/AppTest.java
  15. 26
      archetype-lib/pom.xml
  16. 30
      archetype-lib/src/main/resources/META-INF/maven/archetype-metadata.xml
  17. 119
      archetype-lib/src/main/resources/archetype-resources/pom.xml
  18. 22
      archetype-lib/src/main/resources/archetype-resources/src/main/java/App.java
  19. 46
      archetype-lib/src/main/resources/archetype-resources/src/test/java/AppTest.java
  20. 26
      archetype-webapp/pom.xml
  21. 36
      archetype-webapp/src/main/resources/META-INF/maven/archetype-metadata.xml
  22. 125
      archetype-webapp/src/main/resources/archetype-resources/pom.xml
  23. 39
      archetype-webapp/src/main/resources/archetype-resources/src/main/java/servlet/HelloServlet.java
  24. 13
      archetype-webapp/src/main/resources/archetype-resources/src/main/resources/log4j2.xml
  25. 22
      archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml
  26. 1
      archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/index.jsp
  27. 29
      lib-alarm/pom.xml
  28. 300
      lib-alarm/src/main/java/com/fourelementscapital/alarm/Alarm.java
  29. 17
      lib-alarm/src/main/java/com/fourelementscapital/alarm/AlarmType.java
  30. 40
      lib-alarm/src/main/java/com/fourelementscapital/alarm/ThemeVO.java
  31. 7
      lib-alarm/src/main/resources/codehelp/2113.html
  32. 8
      lib-alarm/src/main/resources/codehelp/2214.html
  33. 5
      lib-alarm/src/main/resources/codehelp/2220.html
  34. 7
      lib-alarm/src/main/resources/codehelp/2311.html
  35. 6
      lib-alarm/src/main/resources/codehelp/2312.html
  36. 8
      lib-alarm/src/main/resources/codehelp/2315.html
  37. 7
      lib-alarm/src/main/resources/codehelp/2316.html
  38. 5
      lib-alarm/src/main/resources/codehelp/2317.html
  39. 6
      lib-alarm/src/main/resources/codehelp/2318.html
  40. 6
      lib-alarm/src/main/resources/codehelp/2319.html
  41. 6
      lib-alarm/src/main/resources/codehelp/2320.html
  42. 5
      lib-alarm/src/main/resources/codehelp/2321.html
  43. 12
      lib-alarm/src/main/resources/config_alarm.properties
  44. 13
      lib-alarm/src/main/resources/log4j2.xml
  45. 54
      lib-alarm/src/test/java/com/fourelementscapital/alarm/LibAlarmTest.java
  46. 42
      lib-auth/pom.xml
  47. 148
      lib-auth/src/main/java/com/fourelementscapital/auth/DBManager.java
  48. 126
      lib-auth/src/main/java/com/fourelementscapital/auth/PAMAuthentication.java
  49. 177
      lib-auth/src/main/java/com/fourelementscapital/auth/SuperUserAuthentication.java
  50. 30
      lib-auth/src/main/java/com/fourelementscapital/auth/SystemAuthentication.java
  51. 147
      lib-auth/src/main/java/com/fourelementscapital/auth/UserThemeAccessPermission.java
  52. 82
      lib-auth/src/main/java/com/fourelementscapital/auth/Utils.java
  53. 176
      lib-auth/src/main/java/com/fourelementscapital/auth/WikiAuthentication.java
  54. 99
      lib-auth/src/main/java/com/fourelementscapital/auth/WikiAuthenticationServlet.java
  55. 7
      lib-auth/src/main/resources/config_auth.properties
  56. 13
      lib-auth/src/main/resources/log4j2.xml
  57. 215
      lib-auth/src/test/java/com/fourelementscapital/auth/LibAuthTest.java
  58. 53
      lib-db/pom.xml
  59. 345
      lib-db/src/main/java/com/fourelementscapital/db/AbstractTeamOrgDB.java
  60. 227
      lib-db/src/main/java/com/fourelementscapital/db/BBSyncDB.java
  61. 147
      lib-db/src/main/java/com/fourelementscapital/db/Config.java
  62. 48
      lib-db/src/main/java/com/fourelementscapital/db/ConstructQueryDB.java
  63. 130
      lib-db/src/main/java/com/fourelementscapital/db/ContractDB.java
  64. 273
      lib-db/src/main/java/com/fourelementscapital/db/DBManager.java
  65. 33
      lib-db/src/main/java/com/fourelementscapital/db/DBManagerDB.java
  66. 99
      lib-db/src/main/java/com/fourelementscapital/db/FlexiFieldDB.java
  67. 77
      lib-db/src/main/java/com/fourelementscapital/db/GeneralUtilDB.java
  68. 223
      lib-db/src/main/java/com/fourelementscapital/db/IExecDB.java
  69. 73
      lib-db/src/main/java/com/fourelementscapital/db/InfrastructureDB.java
  70. 446
      lib-db/src/main/java/com/fourelementscapital/db/RFunctionDB.java
  71. 137
      lib-db/src/main/java/com/fourelementscapital/db/ReferenceDB.java
  72. 1056
      lib-db/src/main/java/com/fourelementscapital/db/SchedulerDB.java
  73. 613
      lib-db/src/main/java/com/fourelementscapital/db/SuperDB.java
  74. 376
      lib-db/src/main/java/com/fourelementscapital/db/UtilDB.java
  75. 74
      lib-db/src/main/java/com/fourelementscapital/db/Utils.java
  76. 691
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/BBSyncDBMariaDB.java
  77. 216
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/ConstructQueryDBMariaDB.java
  78. 382
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/ContractDBMariaDB.java
  79. 39
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/DBManagerDBMariaDB.java
  80. 152
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/FlexiFieldDBMariaDB.java
  81. 497
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/IExecDBMariaDB.java
  82. 140
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/InfrastructureDBMariaDB.java
  83. 1125
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/RFunctionDBMariaDB.java
  84. 307
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/ReferenceDBMariaDB.java
  85. 3245
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/SchedulerDBMariaDB.java
  86. 1163
      lib-db/src/main/java/com/fourelementscapital/db/mariadb/UtilDBMariaDB.java
  87. 125
      lib-db/src/main/java/com/fourelementscapital/db/vo/BBSyncTrigger.java
  88. 276
      lib-db/src/main/java/com/fourelementscapital/db/vo/CommodityInfo.java
  89. 78
      lib-db/src/main/java/com/fourelementscapital/db/vo/Contract.java
  90. 130
      lib-db/src/main/java/com/fourelementscapital/db/vo/FlexiField.java
  91. 87
      lib-db/src/main/java/com/fourelementscapital/db/vo/PeerPackage.java
  92. 136
      lib-db/src/main/java/com/fourelementscapital/db/vo/SchedulerTrigger.java
  93. 34
      lib-db/src/main/java/com/fourelementscapital/db/vo/Strategy.java
  94. 75
      lib-db/src/main/java/com/fourelementscapital/db/vo/ValueObject.java
  95. 2
      lib-db/src/main/resources/config_db.properties
  96. 13
      lib-db/src/main/resources/log4j2.xml
  97. 309
      lib-db/src/test/java/com/fourelementscapital/db/LibDbTest.java
  98. 214
      lib-db/src/test/java/com/fourelementscapital/db/VOTest.java
  99. 29
      lib-fileutils/pom.xml
  100. 138
      lib-fileutils/src/main/java/com/fourelementscapital/fileutils/BeanUtil.java
  101. Some files were not shown because too many files have changed in this diff Show More

4
.gitignore vendored

@ -53,3 +53,7 @@ dist/
nbdist/ nbdist/
.nb-gradle/ .nb-gradle/
.settings
.classpath
.project
bin/

45
Examples/iexec/pom.xml

@ -0,0 +1,45 @@
<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.fourelementscapital</groupId>
<artifactId>iexec</artifactId>
<version>3.0.0-Beta1</version>
<name>iexec</name>
<url>http://www.fourelementscapital.com</url>
<dependencies>
<!--Cache system-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jcs-core</artifactId>
<version>2.2</version>
</dependency>
<!--JCS's required dependency-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!--4ECAP Libs-->
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-db</artifactId>
<version>2.0</version>
</dependency>
<!--Log dependencies-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

74
Examples/iexec/src/main/java/com/fourelementscapital/iexec/common/IExecMgmt.java

@ -0,0 +1,74 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.iexec.common;
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.fourelementscapital.db.IExecDB;
import com.fourelementscapital.db.vo.ValueObject;
/**
* Use lib-db to generate tree menu on iExec
*/
public class IExecMgmt{
private HttpServletRequest request=null;
private Logger log = LogManager.getLogger(IExecMgmt.class.getName());
public IExecMgmt() throws Exception {
super();
}
public Map getTreeViewData() throws Exception {
IExecDB iedb=IExecDB.getIExcecDB();
try{
HashMap rtn=new HashMap();
iedb.connectDB();
List glist=iedb.listGroups();
List folders=iedb.listFolders();
List strategies=iedb.listStrategies();
Vector groups=new Vector();
HashMap colors=new HashMap();
for(Iterator it=glist.iterator();it.hasNext();){
Map data=(Map)it.next();
ValueObject vo=new ValueObject();
vo.setKey((String)data.get("group_uid"));
vo.setValue((String)data.get("group_name"));
groups.add(vo);
colors.put(data.get("group_uid"), data.get("color_code"));
}
rtn.put("folders", folders);
rtn.put("groups",groups);
rtn.put("group_colors",colors);
rtn.put("strategies",strategies);
return rtn;
}catch(Exception e){
throw e;
}finally{
iedb.closeDB();
}
}
}

78
Examples/qlib/pom.xml

@ -0,0 +1,78 @@
<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.fourelementscapital</groupId>
<artifactId>qLib</artifactId>
<version>${revision}${changelist}</version>
<packaging>war</packaging>
<name>qLib</name>
<url>http://www.fourelementscapital.com</url>
<properties>
<revision>3.0.0</revision>
<changelist>-Beta1</changelist>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--4ECAP Libs-->
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-config</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>
<!--Log dependencies-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.15</version>
</dependency>
<!--Cache system-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jcs-core</artifactId>
<version>2.2</version>
</dependency>
<!--JCS's required dependency-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- Added on 30 March 2018-->
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-client</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>

305
Examples/qlib/src/main/java/com/fourelementscapital/rfunction/common/AbstractTeamOrgMgmt.java

@ -0,0 +1,305 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.rfunction.common;
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.fourelementscapital.config.Constant;
import com.fourelementscapital.auth.UserThemeAccessPermission;
import com.fourelementscapital.db.AbstractTeamOrgDB;
import com.fourelementscapital.db.SchedulerDB;
import com.fourelementscapital.client.Authenticated;
/**
* 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
*
*/
@SuppressWarnings("unchecked")
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 <String> getNotifications(List notity_tags, AbstractTeamOrgDB sdb) throws Exception {
Map<String,String> priv_data=getThemeHirarchy(notity_tags,sdb);
ArrayList <String> user_notification=new ArrayList<String>();
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<String> all=new ArrayList<String>(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);
return h;
}
/**
*
* @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<Integer>();
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<Integer>();
for(Iterator i=follow_tags.iterator();i.hasNext();){
String tid=(String)i.next();
fids.add(Integer.parseInt(tid));
}
atodb.updateFollwerTagIds(item_id, fids);
}
protected Map getItemPrivilegeNotifications(ArrayList<String> themes,ArrayList<String> ftags,AbstractTeamOrgDB sdb) throws Exception {
Map priv_data=getThemeHirarchy(themes,sdb);
HashMap h=new HashMap();
ArrayList<String> all=new ArrayList<String>(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;
}
}

164
Examples/qlib/src/main/java/com/fourelementscapital/rfunction/common/RFunctionMgmt.java

@ -0,0 +1,164 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.rfunction.common;
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.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.jcs.engine.behavior.IElementAttributes;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fourelementscapital.db.RFunctionDB;
import com.fourelementscapital.db.SchedulerDB;
import com.fourelementscapital.db.vo.ValueObject;
/**
* This class exposes data to R function editor in Ajax call
* Remember all methods in the class are required user to be logged in
*/
@SuppressWarnings("unchecked")
public class RFunctionMgmt extends AbstractTeamOrgMgmt {
private HttpServletRequest request=null;
private Logger log = LogManager.getLogger(RFunctionMgmt.class.getName());
private static CacheAccess<String, HashMap> lockcache=null;
private String cache_packaged_key="packaged_functions";
public static String RFUNCTION_FILE_EXTENSION=".r";
private static String FUNCTION_ID="function_id";
private static String LOCK_DURATION="duration";
private static String USER="user";
/**
* DWR invocation
* @throws Exception
*/
public RFunctionMgmt() throws Exception {
super();
}
/**
* JSP or internal invocation
* @param request
* @throws Exception
*/
public RFunctionMgmt(HttpServletRequest request) throws Exception {
super(request);
}
/**
* JCS caching for speed data retrival and not necessary to hit the database for every user.
* @return
* @throws Exception
*/
private static CacheAccess getLockCache() throws Exception {
if(RFunctionMgmt.lockcache==null) RFunctionMgmt.lockcache=JCS.getInstance("lock-cache");
return RFunctionMgmt.lockcache;
}
/**
* Locking r function while a user is editing
* @param function_id
* @param seconds
* @return
* @throws Exception
*/
public boolean lockFunction(int function_id, long seconds) throws Exception {
SchedulerDB sdb=SchedulerDB.getSchedulerDB();
RFunctionDB rfdb=RFunctionDB .getRFunctionDB();
try{
sdb.connectDB();
rfdb.connectDB();
String usr=new SchedulerMgmt(getRequest()).getAuthorizedUser(sdb);
if(seconds>0){
refreshCache(function_id, seconds,usr);
}else{
rfdb.updateLock(function_id, usr);
}
return true;
}catch(Exception e){
throw e;
}finally{
sdb.closeDB();
rfdb.closeDB();
}
}
private void removeLockFromCache(int function_id, String usr ) throws Exception {
//String ky=usr+"_"+function_id;
String ky=usr+function_id;
if(getLockCache().get(ky)!=null)getLockCache().remove(ky);
}
private void refreshCache(int function_id, long seconds, String usr ) throws Exception {
//String ky=usr+"_"+function_id;
String ky=usr+function_id;
HashMap h=new HashMap();
h.put(RFunctionMgmt.FUNCTION_ID, function_id);
h.put(RFunctionMgmt.LOCK_DURATION, seconds);
h.put(RFunctionMgmt.USER, usr);
IElementAttributes att= getLockCache().getDefaultElementAttributes();
att.setMaxLife(seconds);
if(getLockCache().get(ky)!=null)getLockCache().remove(ky);
getLockCache().put(ky,h,att);
}
/**
* return data for folder generation.
* @return
* @throws Exception
*/
public Map getFolderTree() throws Exception {
RFunctionDB rfdb=RFunctionDB.getRFunctionDB();
try{
HashMap rtn=new HashMap();
rfdb.connectDB();
List glist=rfdb.listFunctionGroups();
List folders=rfdb.listOfFolders();
//TreeMap groups=new TreeMap();
Vector groups=new Vector();
for(Iterator it=glist.iterator();it.hasNext();){
Map data=(Map)it.next();
//groups.put(data.get("group_uid"),data.get("group_name"));
ValueObject vo=new ValueObject();
vo.setKey((String)data.get("group_uid"));
vo.setValue((String)data.get("group_name"));
groups.add(vo);
}
rtn.put("folders", folders);
rtn.put("groups",groups);
return rtn;
}catch(Exception e){
throw e;
}finally{
}
}
}

46
Examples/qlib/src/main/java/com/fourelementscapital/rfunction/common/SchedulerMgmt.java

@ -0,0 +1,46 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.rfunction.common;
import javax.servlet.http.HttpServletRequest;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@SuppressWarnings("unchecked")
public class SchedulerMgmt extends AbstractTeamOrgMgmt {
private Logger log = LogManager.getLogger(SchedulerMgmt.class.getName());
private HttpServletRequest request=null;
private static String USER="user";
/**
* for DWR invocation
* @throws Exception
*/
public SchedulerMgmt() throws Exception {
super();
}
/**
* Invocation only when you have HttpRequest is available,
* in JSP or internally.
* @param request
* @throws Exception
*/
public SchedulerMgmt(HttpServletRequest request) throws Exception {
super(request);
}
protected String getPeerIPAddress() throws Exception {
String rtn=(String) getRequest().getSession().getAttribute(REMOTE_IP);
return rtn;
}
}

3
README.md

@ -1,3 +1,4 @@
# scheduler4e-javalibs # scheduler4e-javalibs
This is the repository of javalibs required by the scheduler4e project. This is the repository of javalibs required by the scheduler4e project.
JavaLibs that is being used by scheduler4e. This is based on JavaLibs 2.0 plus some minor changes including build flags with target and source optimized for JDK 1.8

26
archetype-app/pom.xml

@ -0,0 +1,26 @@
<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>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>archetype-app</artifactId>
<packaging>maven-archetype</packaging>
<name>archetype-app</name>
<description>A fourelementscapital archetype as the basis of building a four elements capital application</description>
<url>http://www.fourelementscapital.com</url>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.2</version>
</extension>
</extensions>
</build>
</project>

36
archetype-app/src/main/resources/META-INF/maven/archetype-metadata.xml

@ -0,0 +1,36 @@
<archetype-descriptor
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
<requiredProperties>
<requiredProperty key="version">
<defaultValue>1.0</defaultValue>
</requiredProperty>
<requiredProperty key="groupId">
<defaultValue>com.fourelementscapital</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.fourelementscapital.${artifactId}</defaultValue>
</requiredProperty>
</requiredProperties>
</archetype-descriptor>

149
archetype-app/src/main/resources/archetype-resources/pom.xml

@ -0,0 +1,149 @@
<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>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>jar</packaging>
<name>${artifactId}</name>
<url>http://www.fourelementscapital.com</url>
<build>
<plugins>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${package}.App</mainClass>
</transformer>
</transformers>
<createDependencyReducedPom>false</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>site</goal>
<goal>stage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<site>
<id>${artifactId}</id>
<name>${artifactId}</name>
<url>http://www.fourelementscapital.com</url>
</site>
</distributionManagement>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
</configuration>
<reportSets>
<reportSet>
<id>aggregate</id>
<inherited>true</inherited>
<configuration>
</configuration>
<reports>
<report>javadoc</report>
<report>test-javadoc</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
<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-socket</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-tts</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-imonitor</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>

26
archetype-app/src/main/resources/archetype-resources/src/main/java/App.java

@ -0,0 +1,26 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package ${package};
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* A com.fourelementscapital Class
*/
public class App {
private static final Logger log = LogManager.getLogger(App.class.getName());
public static void main( String[] args )
{
log.debug( "Hello Four Elements Capital !" );
}
}

13
archetype-app/src/main/resources/archetype-resources/src/main/resources/log4j2.xml

@ -0,0 +1,13 @@
<?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="DEBUG">
<AppenderRef ref="CONSOLE"/>
</Root>
</Loggers>
</Configuration>

47
archetype-app/src/main/resources/archetype-resources/src/test/java/AppTest.java

@ -0,0 +1,47 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package ${package};
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for App
*/
public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Empty Test
*/
public void testApp()
{
assertTrue( true );
}
}

26
archetype-lib/pom.xml

@ -0,0 +1,26 @@
<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>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>archetype-lib</artifactId>
<packaging>maven-archetype</packaging>
<name>archetype-lib</name>
<description>A fourelementscapital archetype as the basis of creating a com.fourelementscapital library / jar file</description>
<url>http://www.fourelementscapital.com</url>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.2</version>
</extension>
</extensions>
</build>
</project>

30
archetype-lib/src/main/resources/META-INF/maven/archetype-metadata.xml

@ -0,0 +1,30 @@
<archetype-descriptor
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/test/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
<requiredProperties>
<requiredProperty key="version">
<defaultValue>1.0</defaultValue>
</requiredProperty>
<requiredProperty key="groupId">
<defaultValue>com.fourelementscapital</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.fourelementscapital.${artifactId}</defaultValue>
</requiredProperty>
</requiredProperties>
</archetype-descriptor>

119
archetype-lib/src/main/resources/archetype-resources/pom.xml

@ -0,0 +1,119 @@
<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>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>jar</packaging>
<name>${artifactId}</name>
<url>http://www.fourelementscapital.com</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>site</goal>
<goal>stage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<site>
<id>${artifactId}</id>
<name>${artifactId}</name>
<url>http://www.fourelementscapital.com</url>
</site>
</distributionManagement>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
</configuration>
<reportSets>
<reportSet>
<id>aggregate</id>
<inherited>true</inherited>
<configuration>
</configuration>
<reports>
<report>javadoc</report>
<report>test-javadoc</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
<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-socket</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-tts</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-imonitor</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>

22
archetype-lib/src/main/resources/archetype-resources/src/main/java/App.java

@ -0,0 +1,22 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package ${package};
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* A com.fourelementscapital Class
*/
public class App {
private static final Logger log = LogManager.getLogger(App.class.getName());
}

46
archetype-lib/src/main/resources/archetype-resources/src/test/java/AppTest.java

@ -0,0 +1,46 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package ${package};
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for App
*/
public class AppTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public AppTest( String testName )
{
super( testName );
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( AppTest.class );
}
/**
* Empty Test
*/
public void testApp()
{
assertTrue( true );
}
}

26
archetype-webapp/pom.xml

@ -0,0 +1,26 @@
<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>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>archetype-webapp</artifactId>
<packaging>maven-archetype</packaging>
<name>archetype-webapp</name>
<description>A fourelementscapital archetype as the basis of building a four elements capital web application</description>
<url>http://www.fourelementscapital.com</url>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.2</version>
</extension>
</extensions>
</build>
</project>

36
archetype-webapp/src/main/resources/META-INF/maven/archetype-metadata.xml

@ -0,0 +1,36 @@
<archetype-descriptor
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/webapp</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
</fileSets>
<requiredProperties>
<requiredProperty key="version">
<defaultValue>1.0</defaultValue>
</requiredProperty>
<requiredProperty key="groupId">
<defaultValue>com.fourelementscapital</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.fourelementscapital.${artifactId}</defaultValue>
</requiredProperty>
</requiredProperties>
</archetype-descriptor>

125
archetype-webapp/src/main/resources/archetype-resources/pom.xml

@ -0,0 +1,125 @@
<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>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<version>${version}</version>
<packaging>war</packaging>
<name>${artifactId}</name>
<url>http://www.fourelementscapital.com</url>
<build>
<finalName>${artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<phase>package</phase>
<goals>
<goal>site</goal>
<goal>stage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<site>
<id>${artifactId}</id>
<name>${artifactId}</name>
<url>http://www.fourelementscapital.com</url>
</site>
</distributionManagement>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
</configuration>
<reportSets>
<reportSet>
<id>aggregate</id>
<inherited>true</inherited>
<configuration>
</configuration>
<reports>
<report>javadoc</report>
<report>test-javadoc</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>
<dependencies>
<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>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
<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-socket</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-tts</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-imonitor</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
</project>

39
archetype-webapp/src/main/resources/archetype-resources/src/main/java/servlet/HelloServlet.java

@ -0,0 +1,39 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package ${package}.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class HelloServlet extends HttpServlet {
private Logger log = LogManager.getLogger(HelloServlet.class.getName());
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String str = "Hello four elements capital !";
log.debug(">>> String result : " + str);
PrintWriter out = response.getWriter();
out.println(str);
out.close();
}
}

13
archetype-webapp/src/main/resources/archetype-resources/src/main/resources/log4j2.xml

@ -0,0 +1,13 @@
<?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="DEBUG">
<AppenderRef ref="CONSOLE"/>
</Root>
</Loggers>
</Configuration>

22
archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/WEB-INF/web.xml

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Four Elements Capital Web Application</display-name>
<description>
This is a simple web application.
</description>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>${package}.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

1
archetype-webapp/src/main/resources/archetype-resources/src/main/webapp/index.jsp

@ -0,0 +1 @@
<jsp:forward page="/hello"/>

29
lib-alarm/pom.xml

@ -0,0 +1,29 @@
<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>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-alarm</artifactId>
<packaging>jar</packaging>
<name>lib-alarm</name>
<description>Alarm functions, call iMonitor API</description>
<url>http://www.fourelementscapital.com</url>
<dependencies>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
</dependencies>
</project>

300
lib-alarm/src/main/java/com/fourelementscapital/alarm/Alarm.java

@ -0,0 +1,300 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.alarm;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Send alarm to iMonitor API
*/
public class Alarm {
private static final Logger log = LogManager.getLogger(Alarm.class.getName());
/**
* Private constructor
*/
private Alarm(){}
/**
* Construct alarm message with default parameters and send it to iMonitor API
* @param themes ThemeVO array list
* @param alarm_type Alarm type
* @param subject Subject
* @param message Message
* @param say Is Say
* @param email Is Email
* @param phone Is Phone
* @param attachmentfile Attachment file
* @param exc_add Exclude Address
* @throws IOException
*/
public static void sendAlarm(ArrayList<ThemeVO> themes, AlarmType alarm_type,String subject,String message, boolean say, boolean email, boolean phone, String attachmentfile,String exc_add) throws IOException {
if(themes!=null && themes.size()>0 && message!=null && alarm_type!=null){
// ignore alarm ? :
String c_noalarm=getConfigValue("ignore.alarm");
if(c_noalarm!=null && c_noalarm.equalsIgnoreCase("true")) {
//do nothing
}else{
//String xml=constructXMLWithFile(themes,subject,message,say,email,phone,attachmentfile,exc_add);
String socketMessage=constructSocketMessageWithFile(themes,subject,message,say,email,phone,attachmentfile,exc_add);
//log.debug("Sending alarm:xml:"+xml);
//log.debug("Sending alarm:socketMessage:"+socketMessage);
// check whether dump XML to file or send to iMonitor API :
boolean isDump = Boolean.parseBoolean(getConfigValue("alarm.dump"));
if (isDump) {
// create folder if not exist. format : 'yyyyMMdd' (today's date)
String dumpFolder = getConfigValue("alarm.dump.folder");
SimpleDateFormat sdfDumpFolder = new SimpleDateFormat("yyyyMMdd");
dumpFolder = dumpFolder + sdfDumpFolder.format(new Date()) + "/"; // setup today folder
File dir = new File(dumpFolder);
dir.mkdirs();
// write dump file. format : 'HHmmss.xml' (HHmmss : current time)
SimpleDateFormat sdfFile = new SimpleDateFormat("HHmmssSSS");
PrintWriter writer = new PrintWriter(dumpFolder + sdfFile.format(new Date()) + ".xml", "UTF-8");
//writer.println(xml);
//writer.println(socketMessage);
writer.close();
}
else {
//sendXML(xml); // send to iMonitor
sendSocketMessage(socketMessage); // send to iMonitor
}
}
}
}
/**
* Send phone alarm with list of theme and a message
* @param themes ThemeVO array list
* @param message Message
* @throws IOException
*/
public static void sendAlarm(ArrayList<ThemeVO> themes, String message) throws IOException {
Alarm.sendAlarm(themes,AlarmType.PHONE,null,message,false,false,true,null,null);
}
/**
* Send phone alarm with a theme and a message
* @param theme Theme
* @param message Message
* @throws IOException
*/
public static void sendAlarm(String theme, String message) throws IOException {
ArrayList<ThemeVO> themes = new ArrayList<ThemeVO>();
themes.add(new ThemeVO(theme));
Alarm.sendAlarm(themes,AlarmType.PHONE,null,message,false,false,true,null,null);
}
/**
* Construct XML with file attachment
* @param themes Themes
* @param subject Subject
* @param bodymsg Body message
* @param say Is say
* @param email Is email alert
* @param phone Is phone alert
* @param attachment Attachment
* @param exc_add Exclude Address
* @return XML
*/
private static String constructXMLWithFile(List<ThemeVO> themes,String subject,String bodymsg,boolean say,boolean email,boolean phone, String attachment,String exc_add) {
subject = escapeChar(subject);
String xml="<IMONITOR>";
for (int i=0; i<themes.size(); i++) {
ThemeVO themeVO = themes.get(i);
if (themeVO != null) {
xml+="<THEME>"+themeVO.getName()+"</THEME>";
}
}
xml+="<SUBJECT>"+subject+"</SUBJECT>";
xml+="<BODY><![CDATA["+bodymsg+"]]></BODY>";
xml+="<OVERRIDEALARMLEVEL>m</OVERRIDEALARMLEVEL> ";
xml+="<SAY>"+(say+"").toUpperCase()+"</SAY> ";
xml+="<EMAIL>"+(email+"").toUpperCase()+"</EMAIL>";
xml+="<PHONE>"+(phone+"").toUpperCase()+"</PHONE>";
xml+="<ESCALATETICKS>5</ESCALATETICKS>";
xml+="<ESCALATEINTERVAL>15</ESCALATEINTERVAL>";
if(attachment!=null){
xml+="<EMAILIMAGES>"+attachment+"</EMAILIMAGES>";
}
if(exc_add!=null){
xml+="<EXCLUDEADDRESS>"+exc_add+"</EXCLUDEADDRESS>";
}
xml+="</IMONITOR>";
return xml;
}
/**
* Construct message with file attachment
* @param themes Themes
* @param subject Subject
* @param bodymsg Body message
* @param say Is say
* @param email Is email
* @param phone Is phone
* @param attachment Attachment
* @param exc_add Exclude Address
* @return XML
*/
private static String constructSocketMessageWithFile(List<ThemeVO> themes,String subject,String bodymsg,boolean say,boolean email,boolean phone, String attachment,String exc_add) {
subject = escapeChar(subject);
String message = "";
for (int i=0; i<themes.size(); i++) {
ThemeVO themeVO = themes.get(i);
if (themeVO != null) {
message+="~theme$#="+themeVO.getName();
}
}
message+="~subject$#="+subject;
message+="~body$#="+bodymsg;
//message+="~recipients$#="+theme;
message+="~sayIt$#="+(say+"").toUpperCase();
message+="~emailIt$#="+(email+"").toUpperCase();
message+="~phoneCall$#="+(phone+"").toUpperCase();
message+="~emailAttachments$#="+attachment;
//message+="~ym$#="+theme;
//message+="~sms$#="+theme;
message+="<EOF>";
// remove first char : '~'
message=message.substring(1, message.length());
/*
xml+="<OVERRIDEALARMLEVEL>m</OVERRIDEALARMLEVEL> ";
xml+="<ESCALATETICKS>5</ESCALATETICKS>";
xml+="<ESCALATEINTERVAL>15</ESCALATEINTERVAL>";
if(attachment!=null){
xml+="<EMAILIMAGES>"+attachment+"</EMAILIMAGES>";
}
if(exc_add!=null){
xml+="<EXCLUDEADDRESS>"+exc_add+"</EXCLUDEADDRESS>";
}
*/
return message;
}
/**
* Send XML to iMonitor API
* @param xml XML
* @throws IOException
*/
private static void sendXML(String xml) throws IOException {
try{
String url=getConfigValue("imonitor.url");
PostMethod post = new PostMethod(url);
try {
post.setRequestEntity(new StringRequestEntity(xml,"text/xml",null ));
post.setRequestHeader("Content-type", "text/xml; utf-8");
HttpClient httpclient = new HttpClient();
int result = httpclient.executeMethod(post);
} catch (IOException e) {
// e.printStackTrace();
throw e;
} finally {
post.releaseConnection();
}
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
/**
* Send message via Socket to iMonitor API
* @param message Message
* @throws Exception
*/
private static void sendSocketMessage(String socketMessage) throws IOException {
String ip = getConfigValue("imonitor.ip");
int port = Integer.parseInt(getConfigValue("imonitor.port"));
Socket socket = new Socket(ip, port);
OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream(), "UTF-8");
osw.write(socketMessage, 0, socketMessage.length());
osw.flush();
socket.close();
}
/**
* Escape XML characters
* @param str String
* @return String with escape characters
*/
private static String escapeChar(String str) {
String result = null;
if (str != null) {
result = str.replaceAll("&", "&amp;");
result = result.replaceAll("\"", "&quot;");
result = result.replaceAll("'", "&apos;");
result = result.replaceAll("<", "&lt;");
result = result.replaceAll(">", "&gt;");
}
return result;
}
/**
* Get the value of a property defined in config file
* @param propertyName - the name or key of the property you want to retrieve
* @return the string value
* @throws IOException
*/
private static String getConfigValue(String propertyName) throws IOException
{
Properties prop = new Properties();
String propFileName = "config_alarm.properties";
InputStream inputStream = Alarm.class.getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
prop.load(inputStream);
} else {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
}
// get the property value and print it out
String value = prop.getProperty(propertyName);
return value;
}
}

17
lib-alarm/src/main/java/com/fourelementscapital/alarm/AlarmType.java

@ -0,0 +1,17 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.alarm;
/**
* Enumeration class for type of the Alarm
*/
public enum AlarmType {
EMAIL, PHONE
}

40
lib-alarm/src/main/java/com/fourelementscapital/alarm/ThemeVO.java

@ -0,0 +1,40 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.alarm;
import java.io.Serializable;
/**
* Theme Value Object to store theme name used by Alarm
*/
public class ThemeVO implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Theme name
*/
private String name;
/**
* Constructor with name parameter
*/
public ThemeVO(String name) {
this.name = name;
}
public String getName() {
return name;
}
}

7
lib-alarm/src/main/resources/codehelp/2113.html

@ -0,0 +1,7 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>Windows peer couldn't start Rserve</li>
<li>Make sure there is only one tomcat and Rserve process in the peer</li>
<li>Restart tomcat and Rserve</li>
</ul>
</div>

8
lib-alarm/src/main/resources/codehelp/2214.html

@ -0,0 +1,8 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>Peer connection pool for managing multiple RServe connections are not working properly</li>
<li>On unix peer, this may happen when Rserve is not started</li>
<li>On windows, Rserve port used by someother program </li>
</ul>
</div>

5
lib-alarm/src/main/resources/codehelp/2220.html

@ -0,0 +1,5 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>This is uncategorized error due to certain Runtime error messages on peer or Rengine/Rserve</li>
</ul>
</div>

7
lib-alarm/src/main/resources/codehelp/2311.html

@ -0,0 +1,7 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>Null Error message by RServe/REngine at the end of execution of script. According to RForge documentation, it is classified as unknow and something went wrong, Check http://www.rforge.net/Rserve/faq.html for more info</li>
<li>Your script might not be reached end and could have been Runtime error in the middle</li>
<li>Try running your script with low memory usage settings on your R</li>
</ul>
</div>

6
lib-alarm/src/main/resources/codehelp/2312.html

@ -0,0 +1,6 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>R script thrown Runtime exception</li>
<li>Make sure runtime exceptions from Database,Network and File resources are caught and written in console</li>
</ul>
</div>

8
lib-alarm/src/main/resources/codehelp/2315.html

@ -0,0 +1,8 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>If the script is taking more than specified time, then it will be removed from the queue not matter eventually successful or failure</li>
<li>Consider increasing execution time out by clicking speaker icon above the live queue of the scheduler</li>
<li>Code modified and the new code consumes more time than previous executions</li>
<li>This will also happen when peer restarted or stopped while task is running</li>
</ul>
</div>

7
lib-alarm/src/main/resources/codehelp/2316.html

@ -0,0 +1,7 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>The task still in the queue because peer couldn't reach server to update the status of task and server removes it as later found no longer running in peer</li>
<li>Peer was running memory intensive script or unix peer Rserve threads were fully utilized at that time</li>
<li>Please check the queue history later to know the final status of the execution</li>
</ul>
</div>

5
lib-alarm/src/main/resources/codehelp/2317.html

@ -0,0 +1,5 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>No Room to Execute the Script because peer receives 2 tasks at the same time and accepts only one and the other sent back to server and it will be resent to different peer</li>
</ul>
</div>

6
lib-alarm/src/main/resources/codehelp/2318.html

@ -0,0 +1,6 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>Task removed because peer says it is no longer running in peer</li>
<li>This can happen if peer restarted</li>
</ul>
</div>

6
lib-alarm/src/main/resources/codehelp/2319.html

@ -0,0 +1,6 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>Any run time exception message at peer side, usually this will be thrown when if there was problem in database connectivity, unexpected value, unchecked null vale and so on</li>
<li>Make sure runtime exceptions from Database,Network and File resources are caught and written in console</li>
</ul>
</div>

6
lib-alarm/src/main/resources/codehelp/2320.html

@ -0,0 +1,6 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>Any runtime exception message on server side,usually this will be thrown when there is problem in database connectivity, unexpected value, unchecked null vale and so on. </li>
<li>Make sure runtime exceptions from Database,Network and File resources are caught and written in console</li>
</ul>
</div>

5
lib-alarm/src/main/resources/codehelp/2321.html

@ -0,0 +1,5 @@
<div style='margin:10px 0px 10px 0px border:1px solid #b0b0b0;padding:5px'>
<ul style="list-style-type:circle;padding-left: 5px;margin-top: 0px;">
<li>This will happen when the next trigger time of the script arrived and still current triggered execution is waiting because of one or more dependecies not successfull.</li>
</ul>
</div>

12
lib-alarm/src/main/resources/config_alarm.properties

@ -0,0 +1,12 @@
ignore.alarm=false
#imonitor.url=http://10.153.64.31:5001/iMonitor/Responder.aspx
imonitor.ip=127.0.0.1
imonitor.port=1777
#dump XML to file instead of sending it to iMonitor API
alarm.dump=false
#alarm.dump=true
#alarm.dump.folder=/temp/scheduler-alarm/

13
lib-alarm/src/main/resources/log4j2.xml

@ -0,0 +1,13 @@
<?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>
</Loggers>
</Configuration>

54
lib-alarm/src/test/java/com/fourelementscapital/alarm/LibAlarmTest.java

@ -0,0 +1,54 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.alarm;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import junit.framework.TestCase;
/**
* lib-alarm unit test
*/
public class LibAlarmTest extends TestCase {
/**
* Test send alarm
*/
public void testSendAlarm()
{
try{
ArrayList<ThemeVO> themes=new ArrayList<ThemeVO>();
themes.add(new ThemeVO("computing"));
themes.add(new ThemeVO("etrading"));
// Remove the comment tag to test. The code are commented out to prevent sending alarm when installing this lib :
// send alarm (default) :
//Alarm.sendAlarm( themes, AlarmType.EMAIL, "Test subject", "Test message", false, true, false, null, null);
// send alarm with list of theme & a message :
//Alarm.sendAlarm( themes, "Test message 2");
// send alarm with a theme & a message :
//Alarm.sendAlarm( "computing", "Test message 3");
//JOptionPane.showMessageDialog(null, "send socket message done");
assertTrue(true);
}catch(Exception e){
e.printStackTrace();
assertTrue(false);
}
}
}

42
lib-auth/pom.xml

@ -0,0 +1,42 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-auth</artifactId>
<packaging>jar</packaging>
<name>lib-auth</name>
<description>Wiki authentication, Superuser authentication, Get user themes access permission</description>
<url>http://www.fourelementscapital.com</url>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
<dependency>
<groupId>org.kohsuke</groupId>
<artifactId>libpam4j</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

148
lib-auth/src/main/java/com/fourelementscapital/auth/DBManager.java

@ -0,0 +1,148 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.Map;
/**
* The DBManager class provides an Access Interface between the Database and Java.
* It can be used to get data from the database, insert new data and update existing data.
* The config file containing the details for the database hostname and credentials is located in the resources folder.
*/
class DBManager {
/**
* The database name for the current instance of DBManager
*/
private String dbName;
/**
* The connection string for the database connection. Stored in config file
*/
private String connectionString;
/**
* The resultSet which contains the returned results from the SQL Query of GetDatabase
*/
ResultSet resultSet = null;
/**
* The connection object of the current connection.
*/
private Connection conn = null;
/**
* Initialize the DBManager with the database name.
* @param dbName The name of the database e.x. trading, tradingRef, fundamentals
* @throws IOException
*/
public DBManager(String dbName) throws IOException
{
this.dbName = dbName;
}
/**
* This function connects to the dbName database;
* @throws SQLException This is thrown incase we are not able to connect to the database;
* @throws ClassNotFoundException This is thrown incase the driver is not found on this machine
* @throws IOException This is thrown incase the config file if not found on this machine under resources folder
*/
public void connect() throws SQLException, ClassNotFoundException, IOException
{
//String url = "jdbc:jtds:sqlserver://"+databaseServerAddress+";DatabaseName="+databaseName;
String driver = Utils.GetConfigValue("database_"+dbName.toLowerCase()+"_"+"driver");
Class.forName(driver);
conn = DriverManager.getConnection(Utils.GetConfigValue("database_"+dbName.toLowerCase()+"_"+"connstring"));
connectionString = conn.toString();
}
/**
* Closes the current Database connection.
* @throws SQLException
*/
public void closeConnection() throws SQLException
{
if(!conn.isClosed())
conn.close();
if(resultSet!=null)
resultSet.close();
}
/**
* This function returns the result set of the SQL Query used by GetDatabase;
* @param query The SQL Query passed to it.
* @return
* @throws SQLException
*/
private ResultSet executeQuery(String query) throws SQLException
{
Date start = new Date();
Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery(query);
Date end = new Date();
long duration = (end.getTime() - start.getTime());
//Utils.Log("DEBUG: Query ("+query+") took "+duration+ " miliseconds");
return resultSet;
}
/**
* Used to query a database and access the resultant data in a ResultSet
* @param tableName The name of the database table to be accessed
* @param selectedFields A list of the values to be selected through the queries. <code>new ArrayList<String>();</code>
* be passed to select all fields (*)
* @param queryParams A hashmap containing the selection filters in the format <code>[column_name]=[value]</code>
* @param customQuery Any additional parameters to be added after the Where clause. Could be a GROUP BY or ORDER BY
* @return The resulting data in a ResultSet
* @throws SQLException
*/
public ResultSet GetDatabase(String tableName,ArrayList<String> selectedFields, Map<String,Object> queryParams, String customQuery) throws SQLException
{
String queryBuilder = "";
if(selectedFields.size()==0)
{
selectedFields.add("*");
}
queryBuilder += "SELECT "+Utils.Join(selectedFields,",")+" FROM "+tableName;
if(queryParams != null && queryParams.size()>0)
{
queryBuilder += " WHERE ";
for (Map.Entry<String,Object> entry : queryParams.entrySet()) {
try{
Float f = Float.parseFloat(entry.getValue().toString());
queryBuilder += " "+entry.getKey() + " = "+entry.getValue()+" AND";
}
catch(Exception ex)
{
queryBuilder += " "+entry.getKey() + " = '"+entry.getValue()+"' AND";
}
}
if(customQuery!= null && customQuery!="")
queryBuilder += customQuery+" AND";
queryBuilder = queryBuilder.substring(0,queryBuilder.length()-3);
}
//System.out.println(queryBuilder);
return executeQuery(queryBuilder);
}
}

126
lib-auth/src/main/java/com/fourelementscapital/auth/PAMAuthentication.java

@ -0,0 +1,126 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.util.Set;
import org.jvnet.libpam.PAM;
import org.jvnet.libpam.PAMException;
import org.jvnet.libpam.UnixUser;
/**
* PAMAuthentication will authenticate user to local unix machine using PAM.
* This class is a wrapper of libpam4j, a Java/PAM bindings using JNA, to use internally in 4ECaps.
*/
public class PAMAuthentication {
/**
* Check whether user is exist
* @param username Username
* @return true if user is exist
*/
public static boolean isExist(String username) {
return UnixUser.exists(username);
}
/**
* Get current user logged in Unix system
* @return username of user logged in
*/
public static String getCurrentUserLoggedIn() {
return System.getProperty("user.name");
}
/**
* Get username of current user logged in
* @return username of user logged in
* @throws PAMException
*/
public static String getUsername() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getUserName();
}
/**
* Get UID of current user logged in
* @return UID of user logged in
* @throws PAMException
*/
public static int getUID() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getUID();
}
/**
* Get GID of current user logged in
* @return GID of user logged in
* @throws PAMException
*/
public static int getGID() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getGID();
}
/**
* Get gecos (the real name) of current user logged in
* @return gecos of user logged in
* @throws PAMException
*/
public static String getGecos() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getGecos();
}
/**
* Get home directory of current user logged in
* @return home directory of user logged in
* @throws PAMException
*/
public static String getDir() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getDir();
}
/**
* Get the shell of current user logged in
* @return the shell of user logged in
* @throws PAMException
*/
public static String getShell() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getShell();
}
/**
* Get the groups that user logged in belongs to
* @return the groups of user logged in
* @throws PAMException
*/
public static Set<String> getGroups() throws PAMException {
UnixUser ux = new UnixUser(getCurrentUserLoggedIn());
return ux.getGroups();
}
/**
* Authenticate user
* @param service Service
* @param username Username
* @param password Password
* @return authenticated user in UnixUser object
* @throws PAMException
*/
public static UnixUser authenticate(String service, String username, String password) throws PAMException {
PAM p = new PAM(service);
return p.authenticate(username, password);
}
}

177
lib-auth/src/main/java/com/fourelementscapital/auth/SuperUserAuthentication.java

@ -0,0 +1,177 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Hex;
/**
* SuperUserAuthentication provides mechanism to store password into a file.
* This mechanism is implemented in superuser authentication of an application.
* The config file containing the path of saved password located in the resources folder.
*/
public class SuperUserAuthentication {
/**
* Private constructor to prevent instantiation.
*/
private SuperUserAuthentication()
{
}
/**
* Password filename that will be created in the folder path.
*/
private static String passwordFilename = "superuser.pwd";
/**
* Validate password whether it equals with the encrypted file, if file is not exist then set the password by creating it.
* @param pwd Password
* @return true if process succeed
* @throws Exception
*/
public static boolean validateOrSet(String pwd) throws Exception {
File file=getPwdFile();
String encpwd=null;
boolean rtn=false;
if(file.exists()){
encpwd=readFile(file);
}
if(encpwd!=null && !encpwd.equals("")){
rtn=isValid(pwd,encpwd);
}else{
setPassword(pwd);
rtn=true;
}
return rtn;
}
/**
* Change password to a new one if password is valid
* @param pwd Password
* @param newpassword New password
* @return true if process succeed
* @throws Exception
*/
public static boolean changePwd(String pwd,String newpassword) throws Exception {
boolean rtn=validateOrSet(pwd);
if(rtn){
//Thread.sleep(1000); //wait till it closes the stream ....
setPassword(newpassword);
}
return rtn;
}
/**
* Check whether password is valid, compared to encrypted password
* @param password Password
* @param encpass Encrypted password
* @return true if encrypted password equals salt password
* @throws Exception
*/
private static boolean isValid(String password, String encpass) throws Exception {
String salt=encpass.split(":")[2];
String saltpass=":B:"+salt+":"+getMD5(salt+"-"+getMD5(password));
if(encpass.equals(saltpass)){
return true;
}else{
return false;
}
}
/**
* Get MD5 of source string
* @param source Source string
* @return MD5 string
* @throws Exception
*/
private static String getMD5(String source) throws Exception {
byte[] bytesOfMessage = source.getBytes();
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);
final String result = new String(Hex.encodeHex(thedigest));
return result;
}
/**
* Set password to encrypted file
* @param plain_pwd Plain password
* @throws Exception
*/
private static void setPassword(String plain_pwd) throws Exception {
BufferedWriter writer = null;
try {
String salt="d1e93dec";
String saltpass=":B:"+salt+":"+getMD5(salt+"-"+getMD5(plain_pwd));
File file=getPwdFile();
writer = new BufferedWriter(new FileWriter(file));
writer.write(saltpass);
}
finally {
if (writer != null) writer.close();
}
}
/**
* Get password file
* @return file
* @throws Exception
*/
private static File getPwdFile() throws Exception {
String root = Utils.GetConfigValue("superuser_password_folder");
File file =new File(root + passwordFilename);
if ( !file.exists() ) {
file.createNewFile();
}
return file;
}
/**
* Read file
* @param path Path file
* @throws IOException
*/
private static String readFile(File path) throws IOException {
StringBuilder contents = new StringBuilder();
BufferedReader input = null;
try {
input = new BufferedReader(new FileReader(path));
String line = input.readLine();
if (line != null) {
contents.append(line);
}
}
finally {
if (input != null) input.close();
}
return contents.toString();
}
}

30
lib-auth/src/main/java/com/fourelementscapital/auth/SystemAuthentication.java

@ -0,0 +1,30 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
public class SystemAuthentication {
/**
* Get current user logged in Unix system
* @return username of user logged in
*/
public static String getCurrentUserLoggedIn() {
return System.getProperty("user.name");
}
/**
* Check whether a user logged in to the system
* @return true if user logged in
*/
public static boolean isUserLoggedIn() {
return (null != getCurrentUserLoggedIn() && !"".equals(getCurrentUserLoggedIn()));
}
}

147
lib-auth/src/main/java/com/fourelementscapital/auth/UserThemeAccessPermission.java

@ -0,0 +1,147 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* UserThemeAccessPermission provides functions to convert theme access permissions into 'rwx' permission group.
* Example : a user has 'X' permission in 'computing' theme. The 'computing' theme then will be included in 'rwx' permission group.
* Another Example : a user has 'U' permission in 'etrading' theme. The 'etrading' theme then will be included in 'rx' permission group.
*/
public class UserThemeAccessPermission {
/**
* Username
*/
private String username;
/**
* 'rwx' permission group
*/
private ArrayList<String> rwx = new ArrayList<String>();
/**
* 'rx' permission group
*/
private ArrayList<String> rx = new ArrayList<String>();
/**
* 'r' permission group
*/
private ArrayList<String> r = new ArrayList<String>();
/**
* Constructor. Creates a new UserThemeAccessPermission object
* @param un Username
*/
public UserThemeAccessPermission(String un) {
this.username=un;
}
/**
* Get rwx permission group
* @return rwx list
*/
public ArrayList<String> getRwx() {
return rwx;
}
/**
* Get rx permission group
* @return rx list
*/
public ArrayList<String> getRx() {
return rx;
}
/**
* Get r permission group
* @return r list
*/
public ArrayList<String> getR() {
return r;
}
/**
* Add permission with user's themes
* @param themes
* @throws Exception
*/
public void addPermissionWithThemes(Map<String,String> themes) throws Exception {
try{
Map<String,String> resolved = this.replacePermissions(themes);
for(Iterator<String> it=resolved.keySet().iterator();it.hasNext();){
String theme=it.next();
String val=resolved.get(theme);
if(val!=null && val.trim().equalsIgnoreCase("rwx")) getRwx().add(theme);
if(val!=null && val.trim().equalsIgnoreCase("rx")) getRx().add(theme);
if(val!=null && val.trim().equalsIgnoreCase("r")) getR().add(theme);
}
} catch(Exception e) {
throw e;
}
}
/**
* Replace the permission letter with 'rwx'.
* @param data
* @return themes with 'rwx' permissions
* @throws Exception
*/
public static Map<String,String> replacePermissions(Map<String,String> data) throws Exception {
HashMap<String,String> perm = new HashMap<String,String>();
perm.put("X","rwx");
perm.put("S","rwx");
perm.put("B","rwx");
perm.put("C","rwx");
perm.put("U","rx");
perm.put("N","r");
perm.put("M","rwx");
for(String key: data.keySet()){
data.put(key, perm.get(data.get(key)));
}
return data;
}
/**
* Overriding to make unique objects per username
* @param obj Instance of AuthUser or other object
* @return true if obj's username is equal with class' username
*/
public boolean equals(Object obj ) {
if(obj instanceof UserThemeAccessPermission){
UserThemeAccessPermission other=(UserThemeAccessPermission)obj;
if(other.username.equals(this.username)){
return true;
}else{
return false;
}
}else{
return false;
}
}
/**
* Override toString() method
* @return username string
*/
public String toString() {
return ""+this.username;
}
}

82
lib-auth/src/main/java/com/fourelementscapital/auth/Utils.java

@ -0,0 +1,82 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
/**
* This class contains Static Utility functions
*/
class Utils {
/**
* Accepts an ArrayList of strings and then returns a delimiter separated string
* @param al The arraylist of strings
* @param delimiter The delimiter
* @return The delimiter separated string
*/
protected static String Join(ArrayList<String> al,String delimiter)
{
return al.toString().replaceAll("\\[|\\]", "").replaceAll(", ",delimiter);
}
/**
* Get the value of a property defined in config file
* @param propertyName - the name or key of the property you want to retrieve
* @return the string value
* @throws IOException
*/
protected static String GetConfigValue(String propertyName) throws IOException
{
Properties prop = new Properties();
String propFileName = "config_auth.properties";
InputStream inputStream = Utils.class.getClassLoader().getResourceAsStream(propFileName);
if (inputStream != null) {
prop.load(inputStream);
} else {
throw new FileNotFoundException("property file '" + propFileName + "' not found in the classpath");
}
Date time = new Date(System.currentTimeMillis());
// get the property value and print it out
String value = prop.getProperty(propertyName);
return value;
}
/**
* Capitalize first char of a word.
* Example : 'this is text. another text' will be converted to 'This Is Text. Another Text'
* @param string
* @return string
*/
protected static String capitalizeString(String string) {
char[] chars = string.toLowerCase().toCharArray();
boolean found = false;
for (int i = 0; i < chars.length; i++) {
if (!found && Character.isLetter(chars[i])) {
chars[i] = Character.toUpperCase(chars[i]);
found = true;
} else if (Character.isWhitespace(chars[i]) || chars[i]=='.' || chars[i]=='\'') { // You can add other chars here
found = false;
}
}
return String.valueOf(chars);
}
}

176
lib-auth/src/main/java/com/fourelementscapital/auth/WikiAuthentication.java

@ -0,0 +1,176 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.security.MessageDigest;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import org.apache.commons.codec.binary.Hex;
/**
* WikiAuthentication will check / validate user authentication to Wiki database.
* It also provide functions to get encrypted password of specific user & get list of Wiki users.
*/
public class WikiAuthentication {
public static final String SESSION_LOGGED_USER = "session^logged^user";
/**
* Private constructor to prevent instantiation.
*/
private WikiAuthentication()
{
}
/**
* Validate Wiki User. If user_name is valid & password being encrypted equals value in database then it will return true.
* @param user_name
* @param password
* @return is user valid
* @throws Exception
*/
public static boolean validateUser(String user_name, String password) throws Exception {
String encpass = getEncryptedPwd(user_name);
return isValid(password,encpass);
}
/**
* Validate Wiki User With Encrypted Password. If user_name is valid & encrypted password equals value in database then it will return true.
* @param user_name
* @param encryptedPassword
* @return is user valid
* @throws Exception
*/
public static boolean validateUserEncryptedPassword(String user_name, String encryptedPassword) throws Exception {
String encpass = getEncryptedPwd(user_name);
if (encryptedPassword == null) {
return false;
}
return (encryptedPassword.equals(encpass));
}
/**
* Check whether password is valid, compare to encrypted password
* @param password Password
* @param encpass Encrypted password
* @return true if encrypted password equals salt password
* @throws Exception
*/
private static boolean isValid(String password, String encpass) throws Exception {
if (encpass == null || password == null) return false;
String salt=encpass.split(":")[2];
String saltpass=":B:"+salt+":"+getMD5(salt+"-"+getMD5(password));
if(encpass.equals(saltpass)){
return true;
}else{
return false;
}
}
/**
* Get MD5 of source string
* @param source Source string
* @return MD5 string
* @throws Exception
*/
private static String getMD5(String source) throws Exception {
byte[] bytesOfMessage = source.getBytes();
java.security.MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);
final String result = new String(Hex.encodeHex(thedigest));
return result;
}
/**
* List / get all Wiki users. The fields returned are : user_name, user_real_name, user_password, user_email.
* @return users
* @throws Exception
*/
public static Vector<HashMap<String, String>> listUsers() throws Exception {
Vector<HashMap<String, String>> rtn = null;
DBManager dbm = new DBManager("wiki");
dbm.connect();
//sql = "select user_name,user_real_name,user_password,user_email from user";
ArrayList<String> selectedFields = new ArrayList<String>();
selectedFields.add("user_name");
selectedFields.add("user_real_name");
selectedFields.add("user_password");
selectedFields.add("user_email");
ResultSet rs = dbm.GetDatabase("user", selectedFields, null, null);
rtn = new Vector<HashMap<String, String>>();
while(rs.next()){
String user_name=rs.getString("user_name");
String user_real_name=rs.getString("user_real_name");
String user_password=rs.getString("user_password");
String user_email=rs.getString("user_email");
HashMap<String, String> h=new HashMap<String, String>();
h.put("user_name",user_name );
h.put("user_real_name",user_real_name );
h.put("user_password",user_password );
h.put("user_email",user_email );
rtn.add(h);
}
dbm.closeConnection();
return rtn;
}
/**
* Get encrypted password of specific user
* @param user
* @return encrypted password
* @throws Exception
*/
public static String getEncryptedPwd(String user) throws Exception {
if ((user == null) || user.equals("")) return null;
String rtn = null;
DBManager dbm = new DBManager("wiki");
dbm.connect();
//sql = "select CAST(user_password AS CHAR(10000) CHARACTER SET utf8) as pass from user where user_name=?"
ArrayList<String> selectedFields = new ArrayList<String>();
selectedFields.add("CAST(user_password AS CHAR(10000) CHARACTER SET utf8) as pass");
Map<String,Object> queryParams = new HashMap<String,Object>();
queryParams.put("user_name", Utils.capitalizeString(user));
ResultSet rs = dbm.GetDatabase("user", selectedFields, queryParams, null);
while(rs.next()){
rtn=rs.getString("pass");
}
dbm.closeConnection();
return rtn;
}
}

99
lib-auth/src/main/java/com/fourelementscapital/auth/WikiAuthenticationServlet.java

@ -0,0 +1,99 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* WikiAuthenticationServlet is a servlet to facilitate automatic Wiki authentication.
* How to use this servlet, see documentation : http://wiki.4ecap.com/4ECwiki/Lib-auth#Automatic_Wiki_Authentication.
*/
public class WikiAuthenticationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String LOGOUT = "logout";
/**
* Handle post request, validate username & encrypted password by comparing them with Wiki database.
* If valid, generate session to be used throughout the app then redirect to app url.
* If not valid, redirect to wiki login url.
* @param request request
* @param response response
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// get request parameters :
String username = request.getParameter("username");
String encryptedPassword = request.getParameter("encryptedPassword");
String redirectUrl = request.getParameter("redirectUrl");
// get wiki login url from config file
String wikiLoginUrl = Utils.GetConfigValue("wiki_login_url");
// if there's already session then redirect to app url
if (request.getSession().getAttribute(WikiAuthentication.SESSION_LOGGED_USER) != null) {
response.sendRedirect(redirectUrl);
}
// if there's null parameter then redirect to wiki login
else if (username == null || encryptedPassword == null || redirectUrl == null) {
response.sendRedirect(wikiLoginUrl);
}
// validate username & encrypted password, if valid then redirect to app url
else if (WikiAuthentication.validateUserEncryptedPassword(username, encryptedPassword)) {
// set session for app using lib-auth
request.getSession().setAttribute(WikiAuthentication.SESSION_LOGGED_USER, username);
response.sendRedirect(redirectUrl);
}
// else, redirect to wiki login
else {
response.sendRedirect(wikiLoginUrl);
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* Handle get request, logout (remove session) and redirect to a url.
* @param request request
* @param response response
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
// logout, remove session
if(method != null && method.equals(this.LOGOUT)) {
if (request.getSession().getAttribute(WikiAuthentication.SESSION_LOGGED_USER) != null) {
request.getSession().removeAttribute(WikiAuthentication.SESSION_LOGGED_USER);
}
}
// redirect to Wiki page
response.sendRedirect(Utils.GetConfigValue("wiki_login_url"));
}
}

7
lib-auth/src/main/resources/config_auth.properties

@ -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=http://wiki.4ecap.com
superuser_password_folder=/tmp/
#superuser_password_folder=d:\\tmp\\

13
lib-auth/src/main/resources/log4j2.xml

@ -0,0 +1,13 @@
<?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>
</Loggers>
</Configuration>

215
lib-auth/src/test/java/com/fourelementscapital/auth/LibAuthTest.java

@ -0,0 +1,215 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.auth;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.JOptionPane;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import junit.framework.Assert;
import junit.framework.TestCase;
/**
* lib-auth unit test
*/
public class LibAuthTest extends TestCase {
private static final Logger log = LogManager.getLogger(LibAuthTest.class.getName());
/**
* Wiki authentication test : login, check login, get authenticated user, get user access.
*/
public void testWikiAuthentication()
{
log.debug(">>>>>> testWikiAuthentication()");
try {
// wiki login :
String user = "bot";
String password = "bot2018";
boolean success= WikiAuthentication.validateUser(user, password); // validate wiki user
log.debug("validate wiki user : " + success);
JOptionPane.showMessageDialog(null, "validate wiki user success");
HashMap<String, String> loginMap = new HashMap<String, String>();
if(!success){
loginMap.put("message", "Invalid username or password");
Assert.assertTrue(false); // scenario : login must success
}else{
loginMap.put("authenticatedUser", user);
// example : get encrypted password and store it to map for further process
String pss = WikiAuthentication.getEncryptedPwd(user);
loginMap.put("encryptedPassword", pss);
}
// store validate user result to map
loginMap.put("loggedin", Boolean.toString(success));
// check whether user login / not :
boolean loggedin = Boolean.parseBoolean(loginMap.get("loggedin"));
log.debug("is user logged in : " + loggedin);
Assert.assertTrue(loggedin);
// get authenticated user :
String authenticatedUser = loginMap.get("authenticatedUser");
log.debug("get authenticatedUser : " + authenticatedUser);
// Get user access. Use dummy themes for testing purpose.
// To get themes from infrastructureDB : Map themes = infrastructureDB.getThemes4Users(user). It needs lib-db library.
Map<String, String> themes= new HashMap<String, String>();
themes.put("computing", "X");
themes.put("etrading", "U");
themes.put("execution", "N");
themes.put("bb", "B");
UserThemeAccessPermission userTheme = new UserThemeAccessPermission(user);
userTheme.addPermissionWithThemes(themes);
ArrayList<String> rwxList = userTheme.getRwx();
log.debug("rwxList : ");
for (String rwx : rwxList) {
log.debug("- " + rwx);
}
Assert.assertTrue(rwxList.contains("computing") && rwxList.contains("bb")); // getRwx() must contains 'computing' & 'bb'
ArrayList<String> rxList = userTheme.getRx();
log.debug("rxList : ");
for (String rx : rxList) {
log.debug("- " + rx);
}
Assert.assertTrue(rxList.contains("etrading")); // getRx() must contains 'etrading'
ArrayList<String> rList = userTheme.getR();
log.debug("rList : ");
for (String r : rList) {
log.debug("- " + r);
}
Assert.assertTrue(rList.contains("execution")); // getR() must contains 'execution'
}
catch (Exception e) {
e.printStackTrace();
assertTrue( false );
}
}
/**
* Super user authentication test : validate / set / change password, check login, get authenticated user
*/
public void testSuperUserAuthentication()
{
log.debug(">>>>>> testSuperUserAuthentication()");
try {
String user = "administrator";
String password = "password1";
String newpassword = "password1";
Map<String, String> loginMap = new HashMap<String, String>();
boolean success = false;
// if user is 'administrator' and newpassword is not null & not empty then it's a change password :
if(user.equalsIgnoreCase("administrator") && newpassword!=null && !newpassword.equals("")){
// Remove the comment tag to test. The code are commented out to prevent creating password file when installing this lib (edit properties file first) :
//success = SuperUserAuthentication.changePwd(password,newpassword);
//temporary var value when install this lib :
success = true;
//log.debug("change superuser password : " + newpassword);
//JOptionPane.showMessageDialog(null, "Change superuser password done. Password located in /tmp/superuser.pwd");
}
// else : validate if password is already set or set password if password has not been set :
else{
// Remove the comment tag to test. The code are commented out to prevent creating password file when installing this lib (edit properties file first) :
//success= SuperUserAuthentication.validateOrSet(password);
//temporary var value when install this lib :
success = true;
//log.debug("validate / set superuser password : " + password);
//JOptionPane.showMessageDialog(null, "validate/set superuser password");
}
if(!success){
loginMap.put("message", "Invalid username or password");
Assert.assertTrue(false); // scenario : login must success
}
else {
loginMap.put("authenticatedUser", user);
}
loginMap.put("loggedin", Boolean.toString(success)); // store validate superuser result to map
// check whether login / not :
boolean loggedin = Boolean.parseBoolean(loginMap.get("loggedin"));
log.debug("is superuser logged in : " + loggedin);
Assert.assertTrue(loggedin);
// get authenticated user :
String authenticated_user = loginMap.get("authenticatedUser");
log.debug("authenticated superuser : " + authenticated_user);
//Assert.assertTrue(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* List Wiki users test
*/
public void testListWikiUsers()
{
log.debug(">>>>>> testListWikiUsers()");
try {
Vector<HashMap<String, String>> result = WikiAuthentication.listUsers();
log.debug("wiki user count : " + result.size());
JOptionPane.showMessageDialog(null, "Wiki user count: "+result.size());
for (int i=0; i<result.size(); i++) {
HashMap<String, String> h = (HashMap<String, String>) result.get(i);
/*
log.debug(">>>>>>>>>> user_name : " + h.get("user_name"));
log.debug(">>>>>>>>>> user_real_name : " + h.get("user_real_name"));
log.debug(">>>>>>>>>> user_password : " + h.get("user_password"));
log.debug(">>>>>>>>>> user_email : " + h.get("user_email"));
*/
}
assertTrue( true );
}
catch (Exception e) {
e.printStackTrace();
assertTrue( false );
}
}
/**
* System authentication test
*/
public void testSystemAuthentication()
{
log.debug(">>>>>> testSystemAuthentication()");
log.debug("SystemAuthentication.isUserLoggedIn() : " + SystemAuthentication.isUserLoggedIn());
assertTrue( SystemAuthentication.isUserLoggedIn() );
//assertTrue( true );
}
}

53
lib-db/pom.xml

@ -0,0 +1,53 @@
<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>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-db</artifactId>
<packaging>jar</packaging>
<name>lib-db</name>
<description>Lower level DAL (Data Access Layer) for database call</description>
<url>http://www.fourelementscapital.com</url>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.1</version>
</dependency>
<!--Cache system used to get queue-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-jcs-core</artifactId>
<version>2.2</version>
</dependency>
<!--JCS's required dependency-->
<dependency>
<groupId>com.jolbox</groupId>
<artifactId>bonecp</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
</project>

345
lib-db/src/main/java/com/fourelementscapital/db/AbstractTeamOrgDB.java

@ -0,0 +1,345 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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 org.apache.commons.dbutils.BasicRowProcessor;
/**
* This abstract class implements the methods that are related to Theme organisation tags
*/
public abstract class AbstractTeamOrgDB extends SuperDB{
/**
* Get tag table
* @return tag table
*/
public abstract String getTagTable(); //tags
/**
* Get tag item table
* @return tag item table
*/
public abstract String getTagItemTable(); //example: scheduler_tags
/**
* Get tag item id
* @return tag item id
*/
public abstract String getTagItemId(); // example: scheduler_id or function_id;
/**
* Get tag item follow table
* @return tag item follow table
*/
public abstract String getTagItemFollowTable(); //example: scheduler_tags
/**
* Returns list of All tags of the tool ( for example, if it was implemented for scheduler then it will return all scheduler themes)
* @return tags
* @throws Exception
*/
public Vector getTags() throws Exception {
Vector rtn=new Vector();
PreparedStatement ps=this.connection().prepareStatement("select * FROM "+getTagTable()+" ORDER BY tagname");
ResultSet rs=ps.executeQuery();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
//added by rams on 5-june-2012
rs.close();
ps.close();
return rtn;
}
/**
* Get tags details
* @param tags tag names
* @return tags
* @throws Exception
*/
public Vector getTagsDetails(String tags[]) throws Exception {
Vector rtn=new Vector();
String stags=null;
for(int i=0;i<tags.length;i++){
stags=(stags==null)?"'"+tags[i]+"'":stags+",'"+tags[i]+"'";
}
if(stags!=null){
String query="select * FROM "+getTagTable()+" WHERE tagname IN ("+stags+") ORDER BY tagname";
PreparedStatement ps=this.connection().prepareStatement(query);
ResultSet rs=ps.executeQuery();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
//added by rams on 5-june-2012
rs.close();
ps.close();
}
return rtn;
}
/**
* Get tag ids by item id
* @param item_id item id
* @return tag ids
* @throws Exception
*/
public Vector getTagIds4Item(int item_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("select tag_id FROM "+getTagItemTable()+" WHERE "+getTagItemId()+"=?");
ps.setInt(1, item_id);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(rs.getInt("tag_id"));
}
//added by rams on 5-june-2012
rs.close();
ps.close();
return rtn;
}
/**
* Get follow tag ids by item id
* @param item_id item id
* @return tag ids
* @throws Exception
*/
public Vector getFollowTagIds4Item(int item_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("select tag_id FROM "+getTagItemFollowTable()+" WHERE "+getTagItemId()+"=?");
ps.setInt(1, item_id);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(rs.getInt("tag_id"));
}
//added by rams on 5-june-2012
rs.close();
ps.close();
return rtn;
}
/**
* Update tag ids by item id
* @param item_id item id
* @param tag_ids tag ids
* @param removeExisting is remove existing
* @throws Exception
*/
public void updateTagIds4Item(int item_id, Vector tag_ids,int removeExisting) throws Exception {
if(SchedulerDB.REMOVE_BEFORE_UPDATE==removeExisting){
PreparedStatement ps=this.connection().prepareStatement("DELETE FROM "+getTagItemTable()+" WHERE "+getTagItemId()+"=?");
ps.setInt(1, item_id);
ps.executeUpdate();
ps.close();
}
PreparedStatement ps1=this.connection().prepareStatement("INSERT INTO "+getTagItemTable()+"("+getTagItemId()+",tag_id) VALUES(?,?)");
for(Iterator i=tag_ids.iterator();i.hasNext();){
ps1.setInt(1, item_id);
ps1.setInt(2, Integer.parseInt((String)i.next()));
ps1.executeUpdate();
}
ps1.close();
}
/**
* Remove tag ids by item id
* @param item_id item id
* @param tag_id tag id
* @throws Exception
*/
public void removeTagIds4Item(int item_id, int tag_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("DELETE FROM "+getTagItemTable()+" WHERE "+getTagItemId()+"=? and tag_id=?");
ps.setInt(1, item_id);
ps.setInt(2, tag_id);
ps.executeUpdate();
ps.close();
}
/**
* Update tag item by tag id
* @param item_id item id
* @param tagids tag ids
* @throws Exception
*/
public void updateItemTagIds(int item_id, List<Integer> tagids) throws Exception {
String query="DELETE FROM "+getTagItemTable()+" WHERE id IN (select * from (select a.id from "+getTagItemTable()+" as a left outer join "+getTagTable()+" as b on a.tag_id = b.id where "+getTagItemId()+"=? and left(b.tagname,3)<>'usr') temp_table ) ";
PreparedStatement ps=this.connection().prepareStatement(query);
ps.setInt(1, item_id);
ps.executeUpdate();
ps.close();
PreparedStatement ps1=this.connection().prepareStatement("INSERT INTO "+getTagItemTable()+"("+getTagItemId()+",tag_id) VALUES(?,?)");
for(Integer i:tagids){
ps1.setInt(1, item_id);
ps1.setInt(2, i);
ps1.executeUpdate();
}
ps1.close();
}
/**
* Update follower tag id
* @param item_id item id
* @param tagids tag ids
* @throws Exception
*/
public void updateFollwerTagIds(int item_id, List<Integer> tagids) throws Exception {
String query="DELETE FROM "+getTagItemFollowTable()+" WHERE id IN (select * from (select a.id from "+getTagItemFollowTable()+" as a left outer join "+getTagTable()+" as b on a.tag_id = b.id where "+getTagItemId()+"=? and left(b.tagname,3)<>'usr') temp_table ) ";
PreparedStatement ps=this.connection().prepareStatement(query);
ps.setInt(1, item_id);
ps.executeUpdate();
ps.close();
PreparedStatement ps1=this.connection().prepareStatement("INSERT INTO "+getTagItemFollowTable()+"("+getTagItemId()+",tag_id) VALUES(?,?)");
for(Integer i:tagids){
ps1.setInt(1, item_id);
ps1.setInt(2, i);
ps1.executeUpdate();
}
ps1.close();
}
/**
* Get theme tags
* @param item_id item id
* @return theme tags
* @throws Exception
*/
public List getThemeTags(int item_id) throws Exception {
String q="select replace(b.tagname,'thm-','') as theme FROM "+getTagItemTable()+" as a ";
q+="left outer join "+getTagTable()+" as b on a.tag_id=b.id ";
q+="where a."+getTagItemId()+"=? ";
q+="and left(b.tagname,4)='thm-' ";
PreparedStatement ps=this.connection().prepareStatement(q);
ps.setInt(1, item_id);
ResultSet rs=ps.executeQuery();
ArrayList rtn=new ArrayList();
while(rs.next()){
rtn.add(rs.getString("theme"));
}
return rtn;
}
/**
* Get theme tag name
* @param tag_id tag id
* @return theme tag name
* @throws Exception
*/
public String getThemeTagName(int tag_id) throws Exception {
String q="select replace(a.tagname,'thm-','') as theme FROM "+getTagTable()+" as a where id=?";
PreparedStatement ps=this.connection().prepareStatement(q);
ps.setInt(1, tag_id);
ResultSet rs=ps.executeQuery();
String rtn=null;
if(rs.next()){
rtn= rs.getString("theme");
}
return rtn;
}
/**
* Get theme names by item id
* @param item_id item id
* @return theme names
* @throws Exception
*/
public ArrayList getThemeNames4Item(int item_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("select b.tagname FROM "+getTagItemTable()+" as a left outer join "+getTagTable()+" as b on a.tag_id=b.id WHERE a."+getTagItemId()+"=? and left(b.tagname,4)<>'usr-'");
ps.setInt(1, item_id);
ResultSet rs=ps.executeQuery();
ArrayList rtn=new ArrayList();
while(rs.next()){
String tagname=rs.getString("tagname");
tagname=tagname.replaceAll("thm-", "");
rtn.add(tagname);
}
//added by rams on 5-june-2012
rs.close();
ps.close();
return rtn;
}
/**
* Get followers tag by item id
* @param item_id item id
* @return followers tag
* @throws Exception
*/
public ArrayList getFollowTags4Item(int item_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("select b.tagname FROM "+getTagItemFollowTable()+" as a left outer join "+getTagTable()+" as b on a.tag_id=b.id WHERE a."+getTagItemId()+"=? and left(b.tagname,4)<>'usr-'");
ps.setInt(1, item_id);
ResultSet rs=ps.executeQuery();
ArrayList rtn=new ArrayList();
while(rs.next()){
String tagname=rs.getString("tagname");
tagname=tagname.replaceAll("thm-", "");
rtn.add(tagname);
}
//added by rams on 5-june-2012
rs.close();
ps.close();
return rtn;
}
/**
* Get SVN user for Wiki user
* @param w_user wiki user
* @return svn user
* @throws Exception
*/
public Map getSVNUser4WikiUser(String w_user) throws Exception {
PreparedStatement ps5=this.connection().prepareStatement("SELECT * FROM users where svn_username=?");
ps5.setString(1, w_user);
ResultSet rs5= ps5.executeQuery();
Map rtn=new HashMap();
if(rs5.next()){
rtn=new BasicRowProcessor().toMap(rs5);
}
//added by rams on 5-june-2012
rs5.close();
ps5.close();
return rtn;
}
}

227
lib-db/src/main/java/com/fourelementscapital/db/BBSyncDB.java

@ -0,0 +1,227 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.Vector;
import com.fourelementscapital.db.vo.BBSyncTrigger;
/**
* Abstract class implements methods related to BBSync
*/
public abstract class BBSyncDB extends SuperDB{
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_BBSYNC);
}
/**
* List all bbsync
* @return bbsync
* @throws Exception
*/
public abstract Vector listAll() throws Exception;
/**
* Get field mapping by bbsync id
* @param bbsyncid bbsync id
* @return field mapping
* @throws Exception
*/
public abstract ArrayList fieldMapping4BBSync(int bbsyncid) throws Exception;
/**
* Get download query
* @param id bbsync id
* @return bbsync
* @throws Exception
*/
public abstract Map getDownloadQuery(long id) throws Exception;
/**
* Get field mapping
* @return field mapping
* @throws Exception
*/
public abstract Vector getFieldMapping() throws Exception;
/**
* Update triggered date
* @param id bbsync id
* @param start trigger start date
* @param end trigger end date
* @throws Exception
*/
public abstract void updateTriggeredDate(int id, Timestamp start,
Timestamp end) throws Exception;
/**
* Delete field mapping
* @param id field mapping id
* @throws Exception
*/
public abstract void deleteFieldMapping(int id) throws Exception;
/**
* Add field mapping
* @param dbfield field mapping db field
* @param bbfield field mapping bb field
* @throws Exception
*/
public abstract void addFieldMapping(String dbfield, String bbfield)
throws Exception;
/**
* Update contract logs
* @param contract contracts
* @param marketsector market sector
* @param lastsync last sync
* @param scommodities scommodities
* @param fields contract fields
* @throws Exception
*/
public abstract void updateContractLogs(Vector<String> contract,String marketsector,
Timestamp lastsync, Map<String, String> scommodities,Collection fields)
throws Exception;
/**
* Update securities logs
* @param contract contracts
* @param marketsector market sector
* @param lastsync last sync
* @param fields contract fields
* @throws Exception
*/
public abstract void updateSecuritiesLogs(Vector<String> contract,
String marketsector, Timestamp lastsync,Collection fields) throws Exception;
/**
* Get contract names to ref synchronized
* @param pendingonly is pending only
* @throws Exception
* @return contract info
*/
public abstract Vector<String> getContractNames2RefSync(boolean pendingonly)
throws Exception;
/**
* Get security names to ref synchronized
* @param pendingonly is pending only
* @throws Exception
* @return security info
*/
public abstract Map<String, String> getSecurityNames2RefSync(
boolean pendingonly) throws Exception;
/**
* Get security name to ref synchronized
* @param ticker ticker
* @throws Exception
* @return security info
*/
public abstract Map<String,String> getSecurityName2RefSync(String ticker) throws Exception ;
/**
* Update contract reference
* @param contractname contract name
* @param fielddata field data
* @throws Exception
*/
public abstract void updateContractReference(String contractname,
Map<String, String> fielddata) throws Exception;
/**
* Update security reference
* @param securityname security name
* @param marketsector market sector
* @param fielddata field data
* @throws Exception
*/
public abstract void updateSecurityReference(String securityname,
String marketsector, Map<String, String> fielddata)
throws Exception;
/**
* Add sync logs
* @param bbsyncid bbsync id
* @param start start time
* @param end end time
* @param message message
* @param status status
* @param manual_scheduler manual scheduler
* @throws Exception
*/
public abstract void addSyncLogs(int bbsyncid, Timestamp start,
Timestamp end, String message, String status,
String manual_scheduler) throws Exception;
/**
* Remove schedule ticker
* @param bbsync_id bbsync id
* @param ticker contract
* @throws Exception
*/
public abstract void removeScheduleTicker(int bbsync_id, String ticker)
throws Exception;
/**
* Save schedule
* @param id bbsync id
* @param name bbsync name
* @param mkt_secdb is market security db
* @param dateoption date option
* @param datefrom date from
* @param dateto date to
* @param datenumber date recent number
* @param fields bbsync fields
* @param contracts bbsync contracts
* @param t BBSync trigger
* @param marketsector market sector
* @param timezone timezone
* @return bbsync id
* @throws Exception
*/
public abstract int saveSchedule(int id, String name, String mkt_secdb,
String dateoption, Date datefrom, Date dateto, int datenumber,
Vector fields, String contracts, BBSyncTrigger t,
String marketsector, String timezone) throws Exception;
public abstract void deleteQuery(int id) throws Exception;
/**
* Record started peer
* @param peername peer name
* @param sessionid session id
* @param time time
* @throws Exception
*/
public abstract void peerStarted(String peername,long sessionid, java.util.Date time) throws Exception ;
/**
* Record stopped peer
* @param peername peer name
* @param sessionid session id
* @param time time
* @throws Exception
*/
public abstract void peerStopped(String peername, long sessionid, java.util.Date time) throws Exception;
}

147
lib-db/src/main/java/com/fourelementscapital/db/Config.java

@ -0,0 +1,147 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.io.File;
import java.io.FileInputStream;
import java.util.MissingResourceException;
import java.util.Properties;
import java.util.ResourceBundle;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
/**
* This class populates the configuration value from property file
*/
class Config {
/**
* Configuration file
*/
private static final String BUNDLE_NAME = "config_db"; //$NON-NLS-1$
/**
* windows peer configuration
*/
private static final String PROPERTY_FILE_WIN = "peer_db_windows.properties"; //$NON-NLS-1$
/**
* unix peer/server configuration file
*/
private static final String PROPERTY_FILE_UNIX = "peer_db_unix.properties"; //$NON-NLS-1$
public static String CONFIG_PROPERTY_LOCATION=null;
private static Properties confpro=null;
/**
* Private constructor
*/
private Config() {
}
/**
* Get property value of specified key. Return '!key!' if not found.
* @param key key
* @return property value
*/
protected static String getString(String key) {
if(CONFIG_PROPERTY_LOCATION==null){
try {
//return RESOURCE_BUNDLE.getString(key);
return getResourceBuddle().getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}else{
try {
String ky= getPeerProperty(key);
if(ky==null) throw new Exception();
else return ky;
} catch (Exception e) {
return '!' + key + '!';
}
}
}
private static ResourceBundle resourceBundle=null;
/**
* Get resources bundle
* @return resources bundle
*/
private synchronized static ResourceBundle getResourceBuddle(){
if(resourceBundle==null){
resourceBundle=ResourceBundle.getBundle(BUNDLE_NAME);
LogManager.getLogger(Config.class.getName()).info("resourceBundle:"+resourceBundle);
}
return resourceBundle;
}
/**
* Get property value of specified key. Return null if not found.
* @param key key
* @return property value
*/
protected static String getValue(String key) {
if(CONFIG_PROPERTY_LOCATION==null){
try {
return getResourceBuddle().getString(key);
} catch (MissingResourceException e) {
return null;
}
}else{
try {
return getPeerProperty(key);
} catch (Exception e) {
return null;
}
}
}
/**
* Get peer property by key
* @param key key
* @return peer property
*/
private static String getPeerProperty(String key) throws Exception {
try{
if(confpro==null){
String propertyfilename=PROPERTY_FILE_WIN;
if(System.getProperty("os.name").toLowerCase().equals("freebsd"))
propertyfilename=PROPERTY_FILE_UNIX;
if(System.getProperty("os.name").toLowerCase().contains("linux"))
propertyfilename=PROPERTY_FILE_UNIX;
String folder=CONFIG_PROPERTY_LOCATION;
folder=folder.endsWith(File.separator)?folder:folder+File.separator;
confpro=new Properties();
String filename=folder+"conf"+File.separator+propertyfilename;
confpro.load(new FileInputStream(filename));
}
return confpro.getProperty(key);
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
}

48
lib-db/src/main/java/com/fourelementscapital/db/ConstructQueryDB.java

@ -0,0 +1,48 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.Map;
/**
* Abstract class to construct query
*/
public abstract class ConstructQueryDB extends SuperDB{
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_BBSYNC);
}
/**
* Construct date input query
* @param rtnobj return object
* @return query
*/
public abstract String constructDateInputQuery(Map rtnobj);
/**
* Construct recent query
* @param field table field
* @param dateQuery date query
* @return query
*/
public abstract String constructRecentQuery(String field, String dateQuery);
/**
* Construct queue history query
* @param rtnobj return object
* @return query
*/
public abstract String constructQueueHistoryQuery(Map rtnobj);
}

130
lib-db/src/main/java/com/fourelementscapital/db/ContractDB.java

@ -0,0 +1,130 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.sql.Connection;
import java.util.List;
import java.util.Vector;
/**
* Abstract class implements methods related to Contract
*/
public abstract class ContractDB extends SuperDB{
/**
* Update records
* @param con connection
* @param records records
* @throws Exception
*/
public abstract void updateRecords(Connection con,Vector records) throws Exception;
/**
* Add records
* @param con connection
* @param records records
* @throws Exception
*/
public abstract void addRecords(Connection con,Vector records) throws Exception;
/**
* Create table
* @param con connection
* @param decimalpoint decimal point
* @throws Exception
*/
public abstract void createTable(Connection con, int decimalpoint) throws Exception;
/**
* Update sval records
* @param con connection
* @param records records
* @throws Exception
*/
public abstract void updateSValRecords(Connection con,Vector records) throws Exception;
/**
* Add sval records
* @param con connection
* @param records records
* @throws Exception
*/
public abstract void addSValRecords(Connection con,Vector records) throws Exception;
/**
* Create sval table
* @param con connection
* @param decimalpoint decimal point
* @throws Exception
*/
public abstract void createSValTable(Connection con, int decimalpoint) throws Exception;
/**
* Check s value field
* @param con connection
* @return record count
* @throws Exception
*/
public abstract int checkSValueField(Connection con) throws Exception;
/**
* Count records
* @param con connection
* @return record count
* @throws Exception
*/
public abstract int countRecords(Connection con) throws Exception;
/**
* Check whether s value field type exist
* @param con connection
* @return true if record exist
* @throws Exception
*/
public abstract boolean checkSValueFieldTypeExist(Connection con) throws Exception;
/**
* Get contract titles by connection
* @param con connection
* @return contract titles
* @throws Exception
*/
public abstract List getContractTitles(Connection con) throws Exception;
/**
* Get contract titles by connection & date query
* @param con connection
* @param datequery date query
* @return contract titles
* @throws Exception
*/
public abstract List getContractTitles(Connection con, String datequery) throws Exception;
/**
* Update master table
* @param con connection
* @param mtable master table
* @param fieldname field name
* @throws Exception
*/
public abstract void updateMasterTable(Connection con,String mtable,String fieldname) throws Exception;
/**
* Generate SQL XL Query Plain query
* @param fieldtable field table
* @param nmonths n months
* @param contractTitleList contract title list
* @return contract date
*/
public abstract String generateSQLXLQueryPlainQuery(String fieldtable, int nmonths, List contractTitleList);
}

273
lib-db/src/main/java/com/fourelementscapital/db/DBManager.java

@ -0,0 +1,273 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* The DBManager class provides an Access Interface between the Trading Database and Java.
* It can be used to get data from the database, insert new data and update existing data.
* The config file containing the details for the database hostname and credentials is located in the resources folder.
* @author Manas Maral Misra, Antonius Ari Wicaksono
*
*/
public class DBManager {
/**
* The database name for the current instance of DBManager
*/
private String dbName;
/**
* The connection string for the database connection. Stored in config.lib-dal
*/
private String connectionString;
/**
* The resultSet which contains the returned results from the SQL Query of GetDatabase
*/
ResultSet resultSet = null;
/**
* The connection object of the current connection.
*/
private Connection conn = null;
/**
* Initialize the DBManager with the database name.
* @param dbName The name of the database e.x. trading, tradingRef, fundamentals
* @throws IOException
*/
public DBManager(String dbName) throws IOException
{
this.dbName = dbName;
}
/**
* This function connects to the dbName database;
* @throws SQLException This is thrown incase we are not able to connect to the database;
* @throws ClassNotFoundException This is thrown incase the driver is not found on this machine
* @throws IOException This is thrown incase the config.lib-dal if not found on this machine under resources folder
*/
public void connect() throws SQLException, ClassNotFoundException, IOException
{
String connString = Utils.getConfig4E(".CONFIG4E_JDBC_CONNECTIONSTRING_" + dbName.toUpperCase());
String driver = "com.mysql.jdbc.Driver";
// if connString contains 'sqlserver'. i.e. 'jdbc:sqlserver://10.153.64.3:1433;databaseName=infrastructure;integratedSecurity=false;user=dbuser;password=dbuser'
if (connString.contains("sqlserver")) {
driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
}
Class.forName(driver);
conn = DriverManager.getConnection(connString);
connectionString = conn.toString();
}
/**
* This function returns the result set of the SQL Query used by GetDatabase;
* @param query The SQL Query passed to it.
* @return
* @throws SQLException
*/
protected ResultSet executeQuery(String query) throws SQLException
{
Date start = new Date();
Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
resultSet = statement.executeQuery(query);
Date end = new Date();
long duration = (end.getTime() - start.getTime());
//Utils.Log("DEBUG: Query ("+query+") took "+duration+ " miliseconds");
return resultSet;
}
/**
* This function returns the result set of the SQL Query used by GetDatabase;
* @param query The SQL Query passed to it.
* @return
* @throws SQLException
*/
protected void executeNonQuery(String query) throws SQLException
{
Date start = new Date();
Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
statement.execute(query);
Date end = new Date();
long duration = (end.getTime() - start.getTime());
//Utils.Log("DEBUG: Query ("+query+") took "+duration+ " miliseconds");
}
/**
* This function executes the Update query from UpdateDatabase
* @param query
* @throws SQLException
*/
private void updateQuery(String query) throws SQLException
{
Date start = new Date();
Statement statement = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
statement.executeUpdate(query);
Date end = new Date();
long duration = (end.getTime() - start.getTime());
System.out.println("DEBUG: Query took "+duration+ " miliseconds");
}
/**
* Closes the current Database connection.
* @throws SQLException
*/
public void closeConnection()
{
try {
if(!conn.isClosed())
conn.close();
if(resultSet!=null)
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Used to query a database and access the resultant data in a ResultSet
* @param tableName The name of the database table to be accessed
* @param selectedFields A list of the values to be selected through the queries. <code>new ArrayList<String>();</code>
* be passed to select all fields (*)
* @param queryParams A hashmap containing the selection filters in the format <code>[column_name]=[value]</code>
* @param customQuery Any additional parameters to be added after the Where clause. Could be a GROUP BY or ORDER BY
* @return The resulting data in a ResultSet
* @throws SQLException
*/
public ResultSet getDatabase(String tableName,ArrayList<String> selectedFields, Map<String,Object> queryParams, String customQuery) throws SQLException
{
String queryBuilder = "";
if(selectedFields.size()==0)
{
selectedFields.add("*");
}
queryBuilder += "SELECT "+Utils.Join(selectedFields,",")+" FROM "+tableName;
if(queryParams != null && queryParams.size()>0)
{
queryBuilder += " WHERE ";
for (Map.Entry<String,Object> entry : queryParams.entrySet()) {
try{
Float f = Float.parseFloat(entry.getValue().toString());
queryBuilder += " "+entry.getKey() + " = "+entry.getValue()+" AND";
}
catch(Exception ex)
{
queryBuilder += " "+entry.getKey() + " = '"+entry.getValue()+"' AND";
}
}
if(customQuery!= null && customQuery!="")
queryBuilder += customQuery+" AND";
queryBuilder = queryBuilder.substring(0,queryBuilder.length()-3);
}
//System.out.println(queryBuilder);
return executeQuery(queryBuilder);
}
/**
* Used to update a single cell in a table in the database.
* @param tableName The name of the database table to be accessed
* @param selectedFields
* @param queryParams A hashmap containing the selection filters in the format <code>[column_name]=[value]</code>
* @param selectionFieldValues A list of the values to be selected through the queries. <code>new ArrayList<String>();</code>
* be passed to select all fields (*)
* @param newFieldsValues
* @throws SQLException
*/
public void updateDatabase(String tableName,Map<String,Object> selectionFieldValues, Map<String,Object> newFieldsValues) throws SQLException
{
String queryBuilder = "UPDATE "+tableName+" SET ";
if(newFieldsValues.size()>0)
{
ArrayList<String> al = new ArrayList<String>();
for (Map.Entry<String,Object> entry : newFieldsValues.entrySet()) {
try{
Float f = Float.parseFloat(entry.getValue().toString());
al.add(entry.getKey()+" = "+entry.getValue());
}
catch(Exception ex)
{
al.add(entry.getKey()+" = '"+entry.getValue()+"'");
}
}
queryBuilder += Utils.Join(al, ",");
}
if(selectionFieldValues.size()>0)
{
queryBuilder += " WHERE ";
for (Map.Entry<String,Object> entry : selectionFieldValues.entrySet()) {
try{
Float f = Float.parseFloat(entry.getValue().toString());
queryBuilder += " "+entry.getKey() + " = "+entry.getValue()+" AND";
}
catch(Exception ex)
{
queryBuilder += " "+entry.getKey() + " = '"+entry.getValue()+"' AND";
}
}
queryBuilder = queryBuilder.substring(0,queryBuilder.length()-3);
}
//Utils.Log(queryBuilder);
updateQuery(queryBuilder);
}
/**
* Used to insert a new row in a table in the database.
* @param tableName The name of the table where the row has to be inserted
* @param fieldValues the hashmap of column names and values
* @throws SQLException
*/
public void insertDatabase(String tableName,Map<String,Object> fieldValues,Map<String,Object> nonStringfieldValues) throws SQLException
{
String queryBuilder = "INSERT INTO "+tableName;
if(nonStringfieldValues==null) nonStringfieldValues = new HashMap<String, Object>();
if(fieldValues.size()>0)
{
queryBuilder += " ("+Utils.Join(new ArrayList<String>(fieldValues.keySet()), ",");
if(!nonStringfieldValues.isEmpty())
queryBuilder +=","+Utils.Join(new ArrayList<String>(nonStringfieldValues.keySet()), ",");
queryBuilder+= " ) VALUES ";
ArrayList<String> ll = new ArrayList<String>();
for (Iterator i = fieldValues.values().iterator(); i.hasNext();) {
ll.add(i.next().toString());
}
ArrayList<String> ll2 = new ArrayList<String>();
for (Iterator i = nonStringfieldValues.values().iterator(); i.hasNext();) {
ll2.add(i.next().toString());
}
queryBuilder += " ('"+Utils.Join(ll, "','")+"'";
if(!ll2.isEmpty())
queryBuilder += ","+Utils.Join(ll2, ",");
queryBuilder += ") ";
}
//Utils.Log(queryBuilder);
executeNonQuery(queryBuilder);
}
}

33
lib-db/src/main/java/com/fourelementscapital/db/DBManagerDB.java

@ -0,0 +1,33 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.List;
/**
* Abstract class implements methods related to database manager
*/
public abstract class DBManagerDB extends SuperDB {
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_BBSYNC);
}
/**
* List database groups
* @return database groups
* @throws Exception
*/
public abstract List listDBGroups() throws Exception;
}

99
lib-db/src/main/java/com/fourelementscapital/db/FlexiFieldDB.java

@ -0,0 +1,99 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import com.fourelementscapital.db.vo.FlexiField;
/**
* Abstract class implements methods related to Flexi Field
*/
public abstract class FlexiFieldDB extends SuperDB {
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_BBSYNC);
}
/**
* Get flexi fields
* @param tablename tablename string
* @return flexi fields
* @throws Exception
*/
public abstract List getFlexiFields(String tablename) throws Exception;
/**
* Add flexi field
* @param ffield flexi field
* @throws Exception
*/
public abstract void addFlexiField(FlexiField ffield) throws Exception;
/**
* Update flexi field
* @param id flexi field id
* @param ffield flexi field
* @throws Exception
*/
public abstract void updateFlexiField(long id,FlexiField ffield) throws Exception;
/**
* Delete flexi field
* @param id flexi field id
* @throws Exception
*/
public abstract void deleteFlexiField(long id) throws Exception;
/**
* Get flexi field data
* @param tablename table name
* @param idfield id field
* @param idvalue id
* @return flexi field data
* @throws Exception
*/
public abstract Map getFlexiFieldData (String tablename, String idfield, String idvalue) throws Exception;
/**
* Get flexi field data for lucene token
* @param tablename table name
* @param idfield id field
* @param idvalue id
* @return flexi field data
* @throws Exception
*/
public abstract Vector<Map> getFlexiFieldData4LuceneToken (String tablename, String idfield, String idvalue) throws Exception;
/**
* Save flexi field data
* @param tablename table name
* @param idfield id field
* @param idvalue id
* @param data data
* @throws Exception
*/
public abstract void saveFlexiFieldData (String tablename, String idfield, String idvalue, Map data) throws Exception;
/**
* Update flexi field order
* @param id flexi field id
* @param order display order
* @throws Exception
*/
public abstract void updateFlexiFieldOrder(long id,int order) throws Exception ;
}

77
lib-db/src/main/java/com/fourelementscapital/db/GeneralUtilDB.java

@ -0,0 +1,77 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
/**
* General utility class for database
*/
public class GeneralUtilDB {
/**
* Convert resultset to map
* @param rs ResultSet
* @return map
* @throws Exception
*/
public static Map<String, Object> resultsetToMap(ResultSet rs) throws Exception {
ResultSetMetaData metaData = rs.getMetaData();
int colCount = metaData.getColumnCount();
Map<String, Object> row = new HashMap<String, Object>();
for (int i = 1; i <= colCount; i++) {
row.put(metaData.getColumnLabel(i), rs.getObject(i));
}
return row;
}
/**
* Convert query from MS-SQL
* @param sqlquery sql query
* @return query
*/
public static String convertFromSQL(String sqlquery){
String rtn=sqlquery;
if(sqlquery.toUpperCase().contains("BETWEEN") && sqlquery.toUpperCase().contains("GETDATE()") ){
rtn=sqlquery.replace("GETDATE()", "SYSDATE()");
}else if(sqlquery.toUpperCase().contains("DATEADD")) {
StringTokenizer st=new StringTokenizer(sqlquery,",");
if(st.countTokens()>=3){
String p1=st.nextToken();
String p2=st.nextToken();
String p3=st.nextToken();
p3=p3.replace(")", "");
if(p3.trim().equalsIgnoreCase("current_timestamp")){
p3="SYSDATE()";
}
StringTokenizer st1=new StringTokenizer(p1,"(");
if(st1.countTokens()>=2){
String p2a=st1.nextToken();
String p2b=st1.nextToken();
p2a=p2a.replace("DATEADD", "DATE_ADD");
rtn=p2a+"("+p3+", INTERVAL "+p2+" "+p2b+")";
}
}
}
return rtn;
}
}

223
lib-db/src/main/java/com/fourelementscapital/db/IExecDB.java

@ -0,0 +1,223 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Vector;
/**
* Abstract class implements methods related to IExec
*/
public abstract class IExecDB extends SuperDB {
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_IEXEC);
}
/**
* List groups
* @return groups
* @throws Exception
*/
public abstract List listGroups() throws Exception;
/**
* Set group order
* @param groupids group id list
* @throws Exception
*/
public abstract void setGroupOrder( Vector groupids) throws Exception;
/**
* List folders
* @return ie folder list
* @throws Exception
*/
public abstract List listFolders( ) throws Exception;
/**
* List strategies
* @return strategies
* @throws Exception
*/
public abstract List listStrategies() throws Exception;
/**
* Get strategy
* @param strategy_id strategy id
* @return strategy
* @throws Exception
*/
public abstract Map getStrategy(int strategy_id) throws Exception;
/**
* Check whether it is parent
* @param strategy_name strategy name
* @return true if it is parent strategy
* @throws Exception
*/
public abstract boolean isParent(String strategy_name) throws Exception;
/**
* Get strategies by names
* @param strategy_names strategy names
* @return strategies
* @throws Exception
*/
public abstract Vector getStrategies(Vector strategy_names) throws Exception;
/**
* Get folder name
* @param folder_id folder id
* @return folder name list
* @throws Exception
*/
public abstract String getFolderName(int folder_id) throws Exception;
/**
* Get unique contracts
* @param strategy_name strategy name
* @return contracts
* @throws Exception
*/
public abstract Vector getUniqueContracts(String strategy_name) throws Exception;
/**
* Add parameters
* @param data parameter data
* @param strategy_name strategy name
* @throws Exception
*/
public abstract void addParameters(ArrayList<Map> data,String strategy_name) throws Exception;
/**
* Get parameter values
* @param strategy_name strategy name
* @param contract contract
* @return parameter values
* @throws Exception
*/
public abstract Map getParameterValues(String strategy_name, String contract) throws Exception;
/**
* Remove contract
* @param strategy_name strategy name
* @param contract contract
* @throws Exception
*/
public abstract void removeContract(String strategy_name, String contract) throws Exception;
/**
* Get strategy by name
* @param strategy_name strategy name
* @return strategy
* @throws Exception
*/
public abstract Map getStrategy(String strategy_name) throws Exception;
/**
* Create strategy
* @param folder_id folder id
* @param strategy_name strategy name
* @param path file name path
* @return strategy id
* @throws Exception
*/
public abstract int createStrategy(int folder_id,String strategy_name, String path) throws Exception;
/**
* Create child strategy
* @param parent_name parent name
* @param strategy_name strategy name
* @return strategy id
* @throws Exception
*/
public abstract int createChildStrategy(String parent_name,String strategy_name) throws Exception;
/**
* Get folder id
* @param folder_name folder name
* @return folder id
* @throws Exception
*/
public abstract int getFolderID(String folder_name) throws Exception;
/**
* Create folder
* @param folder folder name
* @param new_group_id new group id
* @return folder id
* @throws Exception
*/
public abstract int createFolder(String folder, String new_group_id) throws Exception;
/**
* List of folders
* @param group_id group id
* @return folders
* @throws Exception
*/
public abstract List listOfFolders(String group_id) throws Exception;
/**
* Update strategy folder
* @param strategy_id strategy id
* @param new_folder_id new folder id
* @throws Exception
*/
public abstract void updateStrategyFolder(int strategy_id,int new_folder_id) throws Exception;
/**
* Move folder
* @param folder_id folder id
* @param new_group_id new group id
* @throws Exception
*/
public abstract void moveFolder(int folder_id, String new_group_id) throws Exception;
/**
* Rename strategy
* @param strategy_id strategy id
* @param strategy_name strategy name
* @param file_name file name
* @throws Exception
*/
public abstract void renameStrategy(int strategy_id, String strategy_name, String file_name) throws Exception;
/**
* Rename parent strategy
* @param strategy_id strategy id
* @param strategy_name strategy name
* @param file_name file name
* @param old_strategy_name old strategy name
* @throws Exception
*/
public abstract void renameParentStrategy(int strategy_id, String strategy_name, String file_name, String old_strategy_name) throws Exception;
/**
* Get contract tree
* @return contract tree
* @throws Exception
*/
public abstract Vector getContractTree() throws Exception;
/**
* Get commodity tree
* @return commodity tree
* @throws Exception
*/
public abstract Vector<String> getCommodityTree() throws Exception;
}

73
lib-db/src/main/java/com/fourelementscapital/db/InfrastructureDB.java

@ -0,0 +1,73 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.List;
import java.util.Map;
/**
* Abstract class implements methods related to Infrastructure
*/
public abstract class InfrastructureDB extends SuperDB {
public static final String APPLICATION_IEXEC = "iExec";
public static final String APPLICATION_SCHEDULER_PEER_ASSOCIATION = "Scheduler.PeerAssociation";
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_INFRASTRUCTURE);
}
/**
* Get themes by user
* @param user user
* @return themes
* @throws Exception
*/
public abstract Map getThemes4Users(String user) throws Exception;
/**
* Get team organization
* @param themes themes
* @param hierarchy hierarchy
* @return team organization
* @throws Exception
*/
public abstract Map getTeamOrg(String themes, List hierarchy) throws Exception;
/**
* Update Bloomberg daily counter
* @param date date
* @param count BBG daily counter
* @throws Exception
*/
public abstract void updateBloomberDailyCounter(String date, int count) throws Exception;
/**
* get themes by username access 'X','B','C'
* @param username username
* @return themes
* @throws Exception
*/
public abstract List<String> getThemeByUsernameAccess(String username) throws Exception;
/**
* Get access by app and username
* @param application application
* @param username username
* @return application user access
* @throws Exception
*/
public abstract List getAccessByAppAndUsername(String application, String username) throws Exception;
}

446
lib-db/src/main/java/com/fourelementscapital/db/RFunctionDB.java

@ -0,0 +1,446 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import com.fourelementscapital.db.vo.PeerPackage;
/**
* Abstract class implements methods related to R Function
*/
public abstract class RFunctionDB extends AbstractTeamOrgDB {
public static final int FUNCTION_TYPE_NORMAL=0;
public static final int FUNCTION_TYPE_CLASS=1;
public static final int FUNCTION_TYPE_METHOD=2;
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_R_FUNCTION);
}
/**
* Get tag table
* @return "tags "
*/
public String getTagTable() { return "tags "; }
/**
* Get tag item table
* @return "function_tags"
*/
public String getTagItemTable() { return "function_tags"; }
/**
* Get tag item id
* @return "function_id"
*/
public String getTagItemId() { return "function_id";}
/**
* Get tag item follow table
* @return "function_followtags"
*/
public String getTagItemFollowTable() { return "function_followtags";}
/**
* Get R function
* @param function_id function id
* @return r function
* @throws Exception
*/
public abstract Map getRFunction(int function_id) throws Exception;
/**
* Get R functions by names
* @param functionnames function names
* @return r functions
* @throws Exception
*/
public abstract Vector getRFunctions(Vector functionnames) throws Exception;
/**
* Get R functions by name
* @param function_name function name
* @return r function
* @throws Exception
*/
public abstract Map getRFunction(String function_name) throws Exception;
/**
* Get folder name
* @param folder_id folder id
* @return folder name
* @throws Exception
*/
public abstract String getFolderName(int folder_id) throws Exception;
/**
* List R functions
* @return R functions
* @throws Exception
*/
public abstract List listRFunctions() throws Exception;
/**
* Update function order
* @param function_ids function ids
* @throws Exception
*/
public abstract void updateFunctionOrder(int[] function_ids ) throws Exception;
/**
* Update folder order
* @param folder_ids folder ids
* @throws Exception
*/
public abstract void updateFolderOrder(int[] folder_ids ) throws Exception;
/**
* List all R functions names
* @return R functions names
* @throws Exception
*/
public abstract List listAllRFunctionNames() throws Exception;
/**
* List all R script names
* @param folder_id folder id
* @return R script names
* @throws Exception
*/
public abstract List listAllRScriptNames(int folder_id) throws Exception;
/**
* List of functions by folder id
* @param folder_id folder id
* @return r functions
* @throws Exception
*/
public abstract List<Map> listOfFunctions(int folder_id) throws Exception;
/**
* List function groups
* @return function groups
* @throws Exception
*/
public abstract List listFunctionGroups() throws Exception;
/**
* List of folders
* @return folders
* @throws Exception
*/
public abstract List listOfFolders( ) throws Exception;
/**
* List of folders by group id
* @param group_id group id
* @return folders
* @throws Exception
*/
public abstract List listOfFolders(String group_id) throws Exception;
/**
* Get folder id by name
* @param folder_name folder name
* @return folder id
* @throws Exception
*/
public abstract int getFolderID(String folder_name) throws Exception;
/**
* Create R function
* @param folder_id folder id
* @param functionname function name
* @param path script file path
* @param func_type function type
* @return r function id
* @throws Exception
*/
public abstract int createFunction(int folder_id,String functionname, String path,int func_type) throws Exception;
/**
* Move folder
* @param folder_id folder id
* @param new_group_id new group id
* @throws Exception
*/
public abstract void moveFolder(int folder_id, String new_group_id) throws Exception;
/**
* Update R function folder
* @param function_id function id
* @param new_folder_id new folder id
* @throws Exception
*/
public abstract void updateFunctionFolder(int function_id,int new_folder_id) throws Exception;
/**
* Rename folder
* @param folder_id folder id
* @param foldername folder name
* @throws Exception
*/
public abstract void renameFolder(int folder_id,String foldername) throws Exception;
/**
* Update last 2 users tag
* @param function_id function id
* @param user_tagid user tag id
* @throws Exception
*/
public abstract void updateLast2UsersTag(int function_id, int user_tagid) throws Exception;
/**
* Get all tags
* @return tags
* @throws Exception
*/
public abstract Vector getTags() throws Exception;
/**
* Get tag id by function id
* @param function_id function id
* @return tag ids
* @throws Exception
*/
public abstract Vector getTagIds4Function(int function_id) throws Exception;
/**
* Add if tag not exist
* @param tagname tag name
* @return tag id
* @throws Exception
*/
public abstract int addIfTagNotExist(String tagname) throws Exception;
/**
* Add tag ids for function
* @param function_id function id
* @param tag_id tag id
* @throws Exception
*/
public abstract void addTagIds4Function(int function_id, int tag_id) throws Exception;
/**
* Remove tag ids for function
* @param function_id function id
* @param tag_id tag id
* @throws Exception
*/
public abstract void removeTagIds4Function(int function_id, int tag_id) throws Exception;
/**
* Update lock
* @param function_id function id
* @param lockedby locked by
* @throws Exception
*/
public abstract void updateLock(int function_id,String lockedby) throws Exception;
/**
* Set group order
* @param groupids group ids
* @throws Exception
*/
public abstract void setGroupOrder( Vector groupids) throws Exception ;
/**
* Create folder
* @param folder folder name
* @param new_group_id new group id
* @return folder id
* @throws Exception
*/
public abstract int createFolder(String folder, String new_group_id) throws Exception;
/**
* Remove folder
* @param folder_id folder id
* @throws Exception
*/
public abstract void removeFolder(int folder_id) throws Exception;
/**
* Update function deleted
* @param function_id function id
* @throws Exception
*/
public abstract void updateFunctionDeleted(int function_id) throws Exception;
/**
* Rename R function
* @param function_id function id
* @param functionname function name
* @param script_file script file path
* @throws Exception
*/
public abstract void renameFunction(int function_id, String functionname, String script_file) throws Exception;
/**
* Delete R function
* @param function_id function id
* @throws Exception
*/
public abstract void deleteFunction(int function_id) throws Exception ;
/**
* Update is wiki done
* @param function_id function id
* @param done is done
* @throws Exception
*/
public abstract void updateWikiDone(int function_id, int done) throws Exception ;
/**
* Get all function names ID
* @param wherecond where condition
* @return function names & ids
* @throws Exception
*/
public abstract Map getAllFunctionNamesID(String wherecond) throws Exception;
/**
* Auto complete functions
* @param func_keyword function keyword
* @return r function
* @throws Exception
*/
public abstract List autoCompleteFunctions(String func_keyword) throws Exception ;
/**
* Updated owner ID
* @param owner_id owner id
* @param function_id function id
* @throws Exception
*/
public abstract void updatedOwnerIDNow(int owner_id,int function_id) throws Exception;
/**
* Get package info by package name
* @param pname package name
* @return package info
* @throws Exception
*/
public abstract Map getPackageInfo(String pname) throws Exception;
/**
* Get default hierarchy depends ids by package name
* @param pname package name
* @return id
* @throws Exception
*/
public abstract List getDefaultHierarchyDependsIds(String pname) throws Exception;
/**
* List related folder ids
* @param parent_folder parent folder id
* @return related folder ids
* @throws Exception
*/
public abstract List listRelatedFolderIds(int parent_folder) throws Exception;
/**
* Update related folder ids
* @param folder_id folder id
* @param ids related folder ids
* @throws Exception
*/
public abstract void updateRelatedFolderIds(int folder_id, List<Integer> ids) throws Exception;
/**
* Add tag for package
* @param tag_id tag id
* @param function_ids function ids
* @param make_owner_also is make owner also
* @throws Exception
*/
public abstract void addTag4Package(int tag_id,int function_ids[],boolean make_owner_also) throws Exception;
/**
* Add notification tag for package
* @param tag_id tag id
* @param function_ids function ids
* @param add_also is add a new record also
* @throws Exception
*/
public abstract void addNotificationTag4Package(int tag_id,int function_ids[],boolean add_also) throws Exception;
/**
* Remove tag for package
* @param tag_id tag id
* @param function_ids function ids
* @throws Exception
*/
public abstract void removeTag4Package(int tag_id,int function_ids[]) throws Exception ;
/**
* Update peer package
* @param peername peer name
* @param plist peer package list
* @throws Exception
*/
public abstract boolean updatePeerPackage(String peername, ArrayList<PeerPackage>plist) throws Exception;
/**
* Get R function for script file
* @param scriptfile script file
* @return r functions
* @throws Exception
*/
public abstract Map getRFunctionForScriptFile(String scriptfile) throws Exception;
/**
* Update tag id by folder id
* @param folder_id folder id
* @param tag_ids tag ids
* @param removeExisting is remove existing
* @param tablename table name
* @throws Exception
*/
public abstract void updateTagIds4Folder(int folder_id, List tag_ids,int removeExisting, String tablename) throws Exception ;
/**
* Get tag id by folder id
* @param folder_id folder id
* @param tablename table name
* @return tag ids
* @throws Exception
*/
public abstract ArrayList getTagIds4Folder(int folder_id, String tablename) throws Exception ;
/**
* Get theme tags by folder id
* @param folder_id folder id
* @return theme tags
* @throws Exception
*/
public abstract List getThemeTags4Folder(int folder_id) throws Exception ;
/**
* Get folder theme by R function id
* @param r_function_id r function id
* @return theme
* @throws Exception
*/
public abstract String getFolderThemeByRFunctionId(int r_function_id) throws Exception ;
public abstract void syncLib(int counter, int theme, int wikiDone, String rScript) throws Exception ;
public abstract void truncateFunctions() throws Exception ;
}

137
lib-db/src/main/java/com/fourelementscapital/db/ReferenceDB.java

@ -0,0 +1,137 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.Map;
import java.util.Vector;
import com.fourelementscapital.db.vo.CommodityInfo;
/**
* Abstract class implements methods related to reference
*/
public abstract class ReferenceDB extends SuperDB {
/**
* Connect database
*/
public void connectDB() throws Exception {
super.connectDB(DB_NAME_BBSYNC);
}
/**
* Get commodity contracts
* @return commodity contracts
* @throws Exception
*/
public abstract Map getComContracts() throws Exception;
/**
* Delete field mapping
* @param id field mapping id
* @throws Exception
*/
public abstract void deleteFieldMapping(int id) throws Exception;
/**
* Add field mapping
* @param dbfield friendly name
* @param bbfield bb field name
* @throws Exception
*/
public abstract void addFieldMapping(String dbfield, String bbfield) throws Exception;
/**
* Get field mapping
* @return field mapping
* @throws Exception
*/
public abstract Vector getFieldMapping() throws Exception;
/**
* Delete security field mapping
* @param id security field mapping id
* @throws Exception
*/
public abstract void deleteSecFieldMapping(int id) throws Exception;
/**
* Add security field mapping
* @param dbfield friendly name
* @param bbfield bb field name
* @throws Exception
*/
public abstract void addSecFieldMapping(String dbfield, String bbfield) throws Exception;
/**
* Get security field mapping
* @return security field mapping
* @throws Exception
*/
public abstract Vector getSecFieldMapping() throws Exception;
/**
* Update commodity
* @param comm commodity info
* @throws Exception
*/
public abstract void updateCommodity(CommodityInfo comm) throws Exception;
/**
* Get commodity info
* @param commodity commodity
* @return commodity info
* @throws Exception
*/
public abstract Map getCommodityInfo(String commodity) throws Exception;
/**
* Get contract info
* @param contract contract name
* @return contract info
* @throws Exception
*/
public abstract Map getContractInfo(String contract) throws Exception;
/**
* Get security info
* @param security security name
* @return security info
* @throws Exception
*/
public abstract Map getSecurityInfo(String security) throws Exception;
/**
* Get contract BB info, this method may not be useful in future.
* @param contract contract
* @return contract BB info
* @throws Exception
*/
public abstract Vector getContractBBInfo(String contract) throws Exception;
/**
* Get security BB info, this method may not be usefull in future.
* @param security security
* @return security BB info
* @throws Exception
*/
public abstract Vector getSecurityBBInfo(String security) throws Exception;
/**
* Get all security field values
* @param friendlyname security field mapping friendly name
* @return security field values
* @throws Exception
*/
public abstract Map getAllSecFieldValues(String friendlyname) throws Exception;
}

1056
lib-db/src/main/java/com/fourelementscapital/db/SchedulerDB.java

File diff suppressed because it is too large Load Diff

613
lib-db/src/main/java/com/fourelementscapital/db/SuperDB.java

@ -0,0 +1,613 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.CacheAccess;
import org.apache.commons.jcs.engine.behavior.IElementAttributes;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fourelementscapital.db.mariadb.BBSyncDBMariaDB;
import com.fourelementscapital.db.mariadb.ConstructQueryDBMariaDB;
import com.fourelementscapital.db.mariadb.ContractDBMariaDB;
import com.fourelementscapital.db.mariadb.DBManagerDBMariaDB;
import com.fourelementscapital.db.mariadb.FlexiFieldDBMariaDB;
import com.fourelementscapital.db.mariadb.IExecDBMariaDB;
import com.fourelementscapital.db.mariadb.InfrastructureDBMariaDB;
import com.fourelementscapital.db.mariadb.RFunctionDBMariaDB;
import com.fourelementscapital.db.mariadb.ReferenceDBMariaDB;
import com.fourelementscapital.db.mariadb.SchedulerDBMariaDB;
import com.fourelementscapital.db.mariadb.UtilDBMariaDB;
import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
import com.jolbox.bonecp.Statistics;
/**
* Super class of all db classes
*/
public class SuperDB {
// get db name from config file :
public static final String DB_NAME_BBSYNC = "bbsync";
//public static final String DB_NAME_R_FUNCTION = "rfunction";
public static final String DB_NAME_R_FUNCTION = "quantlib";
public static final String DB_NAME_TRADING = "trading";
public static final String DB_NAME_TRADINGREF = "tradingRef";
public static final String DB_NAME_IEXEC = "iexec";
public static final String DB_NAME_INFRASTRUCTURE = "infrastructure";
public static boolean CONNECTION_POOL_ACTIVE=false;
public static boolean CONNECTION_POOL_CONN_COUNT=true;
private static int db_close_timeout = 5; // default : 5 minutes
private Connection con = null;
private String db=null;
private String driver = "com.mysql.jdbc.Driver";
private static ConcurrentHashMap<String,BoneCP> connPools=new ConcurrentHashMap<String,BoneCP>();
private static Vector<SuperDB> connections=new Vector<SuperDB>();
private Date connectedDate=null;
private String callStack=null;
public static String MY_SQL_DRIVER="com.mysql.jdbc.Driver";
private String tablename=null;
private Logger log=LogManager.getLogger(SuperDB.class.getName());
//private Logger log = LogManager.getLogger(ExecuteRMgmt.class.getName());
private static long count=0;
private static long delays=0;
//private static JCS cache=null;
private static CacheAccess<String, String> cache=null;
/**
* Get DB close timeout
* @return timeout
*/
public static int getDbCloseTimeout() {
if(Config.getString("db_close_timeout") != null) {
db_close_timeout = Integer.parseInt(Config.getString("db_close_timeout"));
}
return db_close_timeout;
}
/**
* Get connected date
* @return connected date
*/
public Date getConnectedDate() {
return connectedDate;
}
/**
* Set connected date
* @param connectedDate connected date
*/
public void setConnectedDate(Date connectedDate) {
this.connectedDate = connectedDate;
}
/**
* Get call stack
* @return call stack
*/
public String getCallStack() {
return callStack;
}
/**
* Set call stack
* @param callStack call stack
*/
public void setCallStack(String callStack) {
this.callStack = callStack;
}
/**
* Connect to specific database
* @param db database
* @throws Exception
*/
public void connectDB(String db) throws Exception {
// Establish the connection.
this.db=db;
Date start=new Date();
String marketConnectionURL = Utils.getConfig4E(".CONFIG4E_JDBC_CONNECTIONSTRING_" + db.toUpperCase()); // throw exception
// add parameter to prevent timestamp converting error
marketConnectionURL += "&useUnicode=true&useFastDateParsing=false&characterEncoding=UTF-8";
// replace driver if marketConnectionURL contains 'sqlserver'. i.e. 'jdbc:sqlserver://10.153.64.3:1433;databaseName=infrastructure;integratedSecurity=false;user=dbuser;password=dbuser'
if (marketConnectionURL.contains("sqlserver")) {
this.driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
}
if(CONNECTION_POOL_ACTIVE){
if(connPools.get(db)==null){
setupConnectionPool(marketConnectionURL);
}
if(this.con!=null && !this.con.isClosed()) {
//don't assing new
printOrphanConns();
}else{
this.con=connPools.get(db).getAsyncConnection().get();
this.setCallStack(collectErrorStack(new Exception().getStackTrace()));
this.setConnectedDate(new Date());
//connPools.get(db).getAsyncConnection()
connections.add(this);
}
}else{
Class.forName(this.driver);
log.debug("marketConnectionURL:"+marketConnectionURL);
if(this.con!=null && !this.con.isClosed()) {
//don't assing new
//System.out.println("~~~SuperDB.connectDB(): Reuse connection, Already connection is active");
printOrphanConns();
}else{
this.con = DriverManager.getConnection(marketConnectionURL);
connections.add(this);
this.setCallStack(collectErrorStack(new Exception().getStackTrace()));
this.setConnectedDate(new Date());
//DatabaseMetaData md=this.con.getMetaData();
//md.get
}
}
//log.debug("conn opened in "+diff+" ms" +" counter:"+count);
if(CONNECTION_POOL_CONN_COUNT) {
Date end=new Date();
long diff=end.getTime()-start.getTime();
delays+=diff;
count++;
}
}
/**
* Get cache
* @return cache
* @throws Exception
*/
private static CacheAccess getCache() throws Exception {
if(cache==null) cache=JCS.getInstance("SuperDB-cache");
return cache;
}
/**
* Print orphan connections
* @throws Exception
*/
private void printOrphanConns() throws Exception {
if(getCache().get("delayPrint")!=null){
System.out.println("~~~SuperDB.connectDB(): Reuse connection, Already connection is active");
}else{
IElementAttributes att= getCache().getDefaultElementAttributes();
att.setMaxLife(600);
getCache().put("delayPrint","delay",att);
try{
System.out.println("=====SuperDB.connectDB(): Reuse connection, Already connection is active====\n"+collectErrorStack(new Exception().getStackTrace()));
//Thread.dumpStack();
}catch(Exception e){
//e.printStackTrace();
}
}
}
/**
* Setup connection pool
* @param marketConnectionURL market connection URL
* @throws Exception
*/
private synchronized void setupConnectionPool(String marketConnectionURL) throws Exception {
Class.forName(this.driver); // load the DB driver
BoneCPConfig config = new BoneCPConfig(); // create a new configuration object
config.setJdbcUrl(marketConnectionURL); // set the JDBC url
config.setMinConnectionsPerPartition(1);
config.setMaxConnectionsPerPartition(25);
config.setPartitionCount(2); //set connectinos returned to pool lives very short
//config.setAcquireIncrement(1);
config.setMaxConnectionAgeInSeconds(10);
config.setLogStatementsEnabled(true);
connPools.put(db, new BoneCP(config));
}
/**
* Close all connections
*/
public static void closeAllConnections(){
for(Iterator it=connPools.keySet().iterator();it.hasNext();) {
String key=(String)it.next();
BoneCP bcp=(BoneCP)connPools.get(key);
bcp.shutdown();
connPools.remove(key);
}
}
/**
* Get connection count
* @return connection count
*/
public static String getConnectionCount() {
String t="Total Conn:"+count+" total delay:"+delays+" average:"+(delays/count)+" ms";
return t;
}
/**
* Get connection objects
* @return connection objects
*/
public static List<SuperDB> getConnectionObjs() {
return connections;
}
/**
* Reset connection count
*/
public static void connectionCountReset() {
count=0;
delays=0;
}
/**
* Get connection status
* @return connection status
*/
public static String getConnStatus(){
String t="\n";
for(Iterator it=connPools.keySet().iterator();it.hasNext();) {
String key=(String)it.next();
BoneCP bcp=(BoneCP)connPools.get(key);
Statistics st=bcp.getStatistics();
t+="Db:"+key+" --->";
t+=" Total Conn:"+st.getTotalCreatedConnections()+" Free:"+st.getTotalFree()+" Cached hits:"+st.getCacheHits()+" Cached miss:"+st.getCacheMiss()+" Req Conn:"+st.getConnectionsRequested()+" Leased:"+st.getTotalLeased();
t+="\n";
//bcp.shutdown();
//connPools.remove(key);
}
return t;
}
/**
* Get opened connections
* @return connection count
*/
public static String getOpenedConnections() {
return "Size:"+connections.size();
}
/**
* Collect error stack
* @return error stack
* @throws Exception
*/
public static String collectStack() throws Exception {
return collectErrorStack(new Exception().getStackTrace());
}
/**
* Kill connections
* @param minsbefore minutes before
* @throws Exception
*/
public static void killConnections(int minsbefore) throws Exception {
Logger log=LogManager.getLogger(SuperDB.class.getName());
Vector<SuperDB> v=new Vector();
synchronized(connections) {
//System.out.println("------" );
for(SuperDB sdb: connections) {
Calendar opened=Calendar.getInstance(); opened.setTime(sdb.getConnectedDate());
Calendar now=Calendar.getInstance(); now.setTime(new Date());
now.add(Calendar.MINUTE, -minsbefore);
long diff=new Date().getTime()-sdb.getConnectedDate().getTime();
diff=diff/1000;
SimpleDateFormat sdf=new SimpleDateFormat("dd-MMM HH:mm:ss");
//System.out.println("Opened at:"+sdf.format(sdb.getConnectedDate())+" now:"+sdf.format(new Date())+"con id: is expired:"+now.after(opened)+" diff:"+diff+" seconds" );
if(now.after(opened)){
//System.out.println("closing connection: as it is expired");
//sdb.closeDB();
v.add(sdb);
}
}
}
if(v.size()>0){
log.error("~~~~~~Closing "+v.size()+" connections after "+minsbefore+" minutes");
}
for(SuperDB sdb: v) {
sdb.closeDB();
}
}
/**
* Collect error stack
* @return error stack
* @throws Exception
*/
private static String collectErrorStack(StackTraceElement[] sts) throws Exception {
String rtn="";
SimpleDateFormat sdf=new SimpleDateFormat("dd-MMM HH:mm:ss.SSS ");
rtn+="\n-- "+sdf.format(new Date())+" Thread:"+Thread.currentThread().getId()+" - "+Thread.currentThread().getName()+" --\n";
for(int loop=0;loop<sts.length;loop++){
if(sts[loop].getClassName().contains("com.fourelementscapital.")){
rtn+=" " +sts[loop].getClassName()+"."+sts[loop].getMethodName()+"\n";
}
}
return rtn;
}
/**
* Collect all stack
* @return stack
* @throws Exception
*/
public static String collectStack4All() throws Exception {
String rtn="";
for(SuperDB sdb: connections){
rtn+=sdb.getCallStack()+"\n";
}
return rtn;
}
//public BoneCP getConnectionPool(){
// return connPools.get(this.db);
//}
/**
* Set database
* @param db database
*/
public void setDb(String db){
this.db=db;
}
/**
* Get database
* @return database
*/
public String getDb(){
return this.db;
}
/**
* Get driver
* @param db database
* @return driver
*/
public String getDriver(String db) {
return Config.getValue(db+".db_driver");
}
/**
* Get connection
* @return connection
*/
public Connection connection(){
return this.con;
}
/**
* Set read only
* @param flag flag
* @throws Exception
*/
public void setReadOnly(boolean flag) throws Exception {
this.con.setReadOnly(flag);
}
/**
* Check whether read only
* @return true if read only
* @throws Exception
*/
public boolean isReadOnly() throws Exception {
return this.con.isReadOnly();
}
/**
* Close database
* @throws Exception
*/
public void closeDB() throws Exception {
if(this.con!=null){
//if(CONNECTION_POOL_ACTIVE){
//}else{
connections.remove(this);
this.con.close();
this.con=null;
//}
}
}
/**
* Check whether driver is MySQL
* @return true if driver is MySQL
*/
public boolean isMySQLDriver(){
if(this.db!=null && getDriver(this.db)!=null && getDriver(this.db).equals(MY_SQL_DRIVER)){
return true;
}else{
return false;
}
}
/**
* Get contract database class
* @param tablename table name
* @param db database
* @return contract database class
*/
public final ContractDB getContractDB(String tablename, String db) {
this.tablename=tablename;
this.db=db;
//if(this.db!=null && getDriver(this.db)!=null && getDriver(this.db).equals(MY_SQL_DRIVER)){
ContractDBMariaDB cdb=new ContractDBMariaDB(this.tablename);
cdb.setDb(db);
return cdb;
/*
}else{
return null;
}
*/
}
//public final ContractDB getContractDB(String tablename) {
// return null;
//}
/**
* Get utility database class
* @param db database
* @return utility database class
*/
public final UtilDB getUtilDB(String db) {
//return this.utilDB;
this.db=db;
//if(this.db!=null && getDriver(this.db)!=null && getDriver(this.db).equals(MY_SQL_DRIVER)){
UtilDBMariaDB udsql=new UtilDBMariaDB();
udsql.setDb(db);
return udsql;
/*
}else{
return null;
}
*/
}
/**
* Get BBSync database class
* @return BBSync database class
*/
public static BBSyncDB getBBSyncDB() {
return new BBSyncDBMariaDB();
}
/**
* Get Flexi Field database class
* @return Flexi Field database class
*/
public static FlexiFieldDB getFlexiFieldDB() {
return new FlexiFieldDBMariaDB();
}
/**
* Get Reference database class
* @return Reference database class
*/
public static ReferenceDB getReferenceDB() {
return new ReferenceDBMariaDB();
}
/**
* Get Scheduler database class
* @return Scheduler database class
*/
public static SchedulerDB getSchedulerDB() {
return new SchedulerDBMariaDB();
}
/**
* Get RFunction database class
* @return RFunction database class
*/
public static RFunctionDB getRFunctionDB() {
return new RFunctionDBMariaDB();
}
/**
* Get IExec database class
* @return IExec database class
*/
public static IExecDB getIExcecDB() {
return new IExecDBMariaDB();
}
/**
* Get DBManager database class
* @return DBManager database class
*/
public static DBManagerDB getDBManagerDB(){
return new DBManagerDBMariaDB();
}
/**
* Get Util database class
* @return Util database class
*/
public static UtilDB getUtilDB4SQLServer() {
return new UtilDBMariaDB();
}
/**
* Get ConstructQuery database class
* @return ConstructQuery database class
*/
public static ConstructQueryDB getConstructQueryDB() {
return new ConstructQueryDBMariaDB();
}
/**
* Get Infrastructure database class
* @return Infrastructure database class
*/
public static InfrastructureDB getInfrastructureDB() {
return new InfrastructureDBMariaDB();
}
}

376
lib-db/src/main/java/com/fourelementscapital/db/UtilDB.java

@ -0,0 +1,376 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Vector;
import com.fourelementscapital.db.vo.ValueObject;
/**
* Abstract class implements methods related to utility
*/
public abstract class UtilDB extends SuperDB {
/**
* List commodities
* @param con connection
* @return commodities
* @throws Exception
*/
public abstract List listCommodities(Connection con) throws Exception ;
/**
* List commodities with filter
* @param con connection
* @param filter filter
* @return commodities
* @throws Exception
*/
public abstract List listCommoditiesWithFilter(Connection con,String filter) throws Exception;
/**
* List first letters of commodities
* @param con connection
* @return commodities
* @throws Exception
*/
public abstract List listCommoditiesFirstLetters(Connection con) throws Exception ;
/**
* Get unique fields of commodity field original
* @param con connection
* @return commodity field original
* @throws Exception
*/
public abstract List uniqueFields(Connection con) throws Exception ;
/**
* List all tables by commodity field original & commodity
* @param con connection
* @param field_arr field arr
* @param commodity_arr commodity arr
* @return tables
* @throws Exception
*/
public abstract List<Map> listAllTables4Fields(Connection con, String field_arr, String commodity_arr ) throws Exception;
/**
* List all orphaned assets
* @param con connection
* @return tables
* @throws Exception
*/
public abstract List<Map> listAllOrphanedAssets(Connection con ) throws Exception;
/**
* Remove all orphaned assets
* @param con connection
* @throws Exception
*/
public abstract void removeAllOrphanedAssets(Connection con) throws Exception;
/**
* List all table strings by commodities
* @param con connection
* @param fieldtype field type
* @param commodities commodities
* @throws Exception
*/
public abstract List<String> listAllTables4Commodities(Connection con, String fieldtype,Vector<String> commodities) throws Exception;
/**
* Get field original
* @param con connection
* @param tablename table name
* @return commodity field original
* @throws Exception
*/
public abstract String getFieldOriginal(Connection con,String tablename) throws Exception;
/**
* List all table value objects by commodities
* @param con connection
* @param fieldtype field type
* @param commodities commodities
* @throws Exception
*/
public abstract Vector<ValueObject> listAllTables4Commodities2(Connection con, String fieldtype,Vector<String> commodities) throws Exception;
/**
* List all contract titles
* @param con connection
* @param jointables join tables
* @return contract titles
* @throws Exception
*/
public abstract TreeMap<String,Vector> listAllContractTitles(Connection con, String jointables) throws Exception;
/**
* List all contract titles
* @param con connection
* @param jointables join tables
* @return contract titles
* @throws Exception
*/
public abstract TreeMap<String,Vector> listAllContractTitles2(Connection con, String jointables) throws Exception;
/**
* List all contract titles in lower case
* @param con connection
* @param jointables join tables
* @return contract titles
* @throws Exception
*/
public abstract List<String> listAllContractTitles2LCase(Connection con, String jointables) throws Exception;
/**
* Remove commodity and fields
* @param con connection
* @param commodity commodity
* @return true
* @throws Exception
*/
public abstract boolean removeCommodityAndFields(Connection con,String commodity) throws Exception;
/**
* Get raw data by table name, contract & date query
* @param datequery date query
* @param con connection
* @param tablename table name
* @param commodity commodity
* @return raw data
* @throws Exception
*/
public abstract Vector getRawData(String datequery,Connection con,String tablename, String commodity) throws Exception;
/**
* Get record count by contract & commodity
* @param con connection
* @param commodity commodity
* @param contract contract
* @return record count
* @throws Exception
*/
public abstract List getRecordCount4Contracts(Connection con, String commodity, String contract ) throws Exception;
/**
* Get raw data
* @param datequery date query
* @param con connection
* @param tablename table name
* @param commodity commodity
* @return raw data
* @throws Exception
*/
public abstract Map getRawData3(String datequery,Connection con,String tablename, String commodity) throws Exception;
/**
* Get raw data by contract
* @param datequery date query
* @param con connection
* @param fieldname field name
* @param contrat contrat
* @param commodity commodity
* @return raw data
* @throws Exception
*/
public abstract Map getRawData2Contract(String datequery,Connection con,String fieldname, String contrat,String commodity) throws Exception;
/**
* Delete raw data
* @param con connection
* @param tablename table name
* @param data data
* @throws Exception
*/
public abstract void deleteRawData(Connection con,String tablename,Map<String,String> data) throws Exception;
/**
* Update raw data
* @param con connection
* @param tablename table name
* @param olddata old data
* @param newdata new data
* @throws Exception
*/
public abstract void updateRawData(Connection con,String tablename,Map<String,String> olddata,Map<String,String> newdata) throws Exception;
/**
* Remove field table
* @param con connection
* @param ftable field table
* @return true
* @throws Exception
*/
public abstract boolean removeFieldTable(Connection con,String ftable) throws Exception;
/**
* Rename field table
* @param con connection
* @param ftable field table
* @param fieldoriginal field original
* @return true if success
* @throws Exception
*/
public abstract boolean renameFieldTable(Connection con,String ftable, String fieldoriginal) throws Exception;
/**
* List field tables for admin
* @param con connection
* @param mtable commodity
* @return field tables
* @throws Exception
*/
public abstract List listFieldTables4Admin(Connection con,String mtable) throws Exception;
/**
* List field tables
* @param con connection
* @param mtable commodity
* @return field tables
* @throws Exception
*/
public abstract List listFieldTables(Connection con,String mtable) throws Exception;
/**
* List all unique fields
* @param con connection
* @return unique fields
* @throws Exception
*/
public abstract List listAllUniqueFields(Connection con) throws Exception;
/**
* List all unique fields by commodity
* @param con connection
* @param commodity commodity
* @return all unique fields
* @throws Exception
*/
public abstract List listAllUniqueFields(Connection con, String commodity) throws Exception;
/**
* Delete contracts
* @param con connection
* @param field_tablename field table name
* @param contract contract
* @throws Exception
*/
public abstract void deleteContracts(Connection con, String field_tablename, String contract) throws Exception;
/**
* Get unique contracts
* @param con connection
* @param field_tablename field table name
* @return contracts
* @throws Exception
*/
public abstract Vector getUniqueContracts(Connection con, String field_tablename) throws Exception;
/**
* List all commodities and fields
* @param con connection
* @return commodities and fields
* @throws Exception
*/
public abstract Map listAllCommoditiesAndFields(Connection con) throws Exception;
/**
* Last sync update
* @param con connection
* @throws Exception
*/
public abstract void LastSyncUpdate(Connection con) throws Exception;
/**
* Last sync days
* @param con connection
* @param today date
* @return sync date
* @throws Exception
*/
public abstract int lastSyncDays(Connection con,Date today) throws Exception;
/**
* Last sync date
* @param con connection
* @return sync date
* @throws Exception
*/
public abstract Date lastSyncDate(Connection con) throws Exception;
/**
* Get daily strategy data
* @param con connection
* @param date date
* @param contractname contract name
* @param fields fields
* @return strategy data
* @throws Exception
*/
public abstract TreeMap dailyStrategyData(Connection con,String date, String contractname, String fields) throws Exception;
/**
* List saved chart
* @param con connection
* @return saved charts
* @throws Exception
*/
public abstract TreeMap listSavedChart(Connection con) throws Exception;
/**
* Delete saved chart
* @param con connection
* @param id id
* @throws Exception
*/
public abstract void deleteSavedChart(Connection con, int id) throws Exception;
/**
* Get saved chart item
* @param con connection
* @param id id
* @return saved chart
* @throws Exception
*/
public abstract Map getSavedChartItem(Connection con, int id) throws Exception;
/**
* Add saved chart
* @param con connection
* @param data data
* @throws Exception
*/
public abstract void savedChart(Connection con,Map data) throws Exception;
/**
* Show old connections
* @param minutesbefore minutes before
* @param computername computer name
* @return SPID
* @throws Exception
*/
public abstract ArrayList showOldConnections(int minutesbefore, String computername) throws Exception;
/**
* Kill connections
* @param conids connection ids
* @throws Exception
*/
public abstract void killConnections(List<Integer> conids) throws Exception ;
}

74
lib-db/src/main/java/com/fourelementscapital/db/Utils.java

@ -0,0 +1,74 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
/**
* This class contains Static Utility functions
* @author manas
*
*/
public class Utils {
private static HashMap<String,String> _config4E;
/**
* Accepts an ArrayList of strings and then returns a delimiter separated string
* @param al The arraylist of strings
* @param delimiter The delimiter
* @return The delimiter separated string
*/
public static String Join(ArrayList<String> al,String delimiter)
{
return al.toString().replaceAll("\\[|\\]", "").replaceAll(", ",delimiter);
}
/**
* Gets the variables defined in the global config located at /mnt/public/Libs/.4E.config
* @param variable
* @return
* @throws IOException
*/
public static String getConfig4E(String variable) throws IOException
{
if(_config4E==null) _config4E = new HashMap<String, String>();
if((_config4E.size()==0))
{
//FileReader fr = new FileReader("/mnt/public/Libs/.4E.config");
FileReader fr = new FileReader(Config.getValue("db_config_path"));
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while(s!=null)
{
if(s.startsWith("#") || s.trim().equals("")){
s = br.readLine();
continue;
}
String[] splits = s.split("=",2);
_config4E.put(splits[0].trim(), splits[1].trim().replaceAll("\"", ""));
s = br.readLine();
}
}
if(_config4E.containsKey(variable.trim()))
return _config4E.get(variable.trim());
else return null;
}
}

691
lib-db/src/main/java/com/fourelementscapital/db/mariadb/BBSyncDBMariaDB.java

@ -0,0 +1,691 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.Vector;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import com.fourelementscapital.db.BBSyncDB;
import com.fourelementscapital.db.GeneralUtilDB;
import com.fourelementscapital.db.vo.BBSyncTrigger;
/**
* BBSync MariaDB DAO implementation
*/
public class BBSyncDBMariaDB extends BBSyncDB {
private Logger log=LogManager.getLogger(BBSyncDB.class.getName());
/**
* {@inheritDoc}
*/
public Vector listAll() throws Exception {
Statement st=this.connection().createStatement();
ResultSet rs=st.executeQuery("Select * from bbsync order by name");
Vector rtn=new Vector();
while(rs.next()){
//Map record=new BasicRowProcessor().toMap(rs);
Map record = GeneralUtilDB.resultsetToMap(rs);
int id=(Integer)record.get("id");
record.put("fieldsids",getFieldIds(id));
record.put("tickers", getContracts(id));
rtn.add(record);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public ArrayList fieldMapping4BBSync(int bbsyncid) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("select * from field_mapping where id in (select field_id from bbsync_fields where bbsync_id=?)");
ps.setLong(1, bbsyncid);
ResultSet rs=ps.executeQuery();
ArrayList rtn=new ArrayList();
while(rs.next()){
//Map record=new BasicRowProcessor().toMap(rs);
Map record = GeneralUtilDB.resultsetToMap(rs);
rtn.add(record);
}
rs.close();
ps.close();
return rtn;
}
/**
* {@inheritDoc}
*/
public Map getDownloadQuery(long id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from bbsync where id=?");
ps.setLong(1, id);
ResultSet rs=ps.executeQuery();
Map record=null;
if(rs.next()){
//record=new BasicRowProcessor().toMap(rs);
record = GeneralUtilDB.resultsetToMap(rs);
}
rs.close();
ps.close();
if(record!=null){
record.put("fieldsids",getFieldIds(id));
record.put("tickers", getContracts(id));
}
return record;
}
/**
* Get field id
* @param bbsyncid bbsync id
* @return field ids
* @throws Exception
*/
private Vector getFieldIds(long bbsyncid) throws Exception {
PreparedStatement ps1=this.connection().prepareStatement("Select field_id from bbsync_fields where bbsync_id=?");
ps1.setLong(1, bbsyncid);
ResultSet rs1=ps1.executeQuery();
Vector v=new Vector();
while(rs1.next()){
v.add((Integer)rs1.getInt("field_id")+""); //convert to string
}
ps1.close();
rs1.clearWarnings();
return v;
}
/**
* Get contracts
* @param bbsyncid bbsync id
* @return contract
* @throws Exception
*/
private String getContracts(long bbsyncid) throws Exception {
PreparedStatement ps1=this.connection().prepareStatement("Select contract from bbsync_contracts where bbsync_id=?");
ps1.setLong(1, bbsyncid);
ResultSet rs1=ps1.executeQuery();
String tickers="";
while(rs1.next()){
tickers+=(tickers.equals(""))?rs1.getString("contract"):","+rs1.getString("contract");
}
ps1.close();
rs1.clearWarnings();
return tickers;
}
/**
* {@inheritDoc}
*/
public Vector getFieldMapping() throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from field_mapping");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn.add(GeneralUtilDB.resultsetToMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void updateTriggeredDate(int id, Timestamp start, Timestamp end) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("UPDATE bbsync SET trigger_startedat=?, trigger_endedat=?,last_executed=? WHERE id=?");
ps.setTimestamp(1, start);
ps.setTimestamp(2, end);
ps.setTimestamp(3, end);
ps.setInt(4, id);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void deleteFieldMapping(int id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("DELETE FROM field_mapping where id=?");
ps.setInt(1, id);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void addFieldMapping(String dbfield, String bbfield) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO field_mapping(db_field, bb_field) VALUES (?,?)");
ps.setString(1, dbfield);
ps.setString(2, bbfield);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void updateContractLogs(Vector<String> contract,String marketsector,Timestamp lastsync, Map<String,String> scommodities, Collection fields) throws Exception {
for(Iterator it=fields.iterator();it.hasNext();){
String field=(String)it.next();
PreparedStatement ps3=this.connection().prepareStatement("SELECT * FROM reference.contractSync WHERE contract_name=? AND contract_field=?");
PreparedStatement ps4=this.connection().prepareStatement("INSERT INTO reference.contractSync(last_sync,contract_name,contract_field) VALUES(?,?,?)");
PreparedStatement ps5=this.connection().prepareStatement("UPDATE reference.contractSync SET last_sync=? WHERE contract_name=? AND contract_field=?");
for(Iterator<String> i=contract.iterator();i.hasNext();){
String cont=i.next();
cont=cont.trim()+" "+marketsector;
ps3.setString(1, cont);
ps3.setString(2, field);
ResultSet rs=ps3.executeQuery();
if(rs.next()){
ps5.setTimestamp(1, lastsync);
ps5.setString(2, cont.trim());
ps5.setString(3, field);
ps5.execute();
}else{
ps4.setTimestamp(1, lastsync);
ps4.setString(2, cont.trim());
ps4.setString(3, field);
ps4.execute();
}
rs.close();
}
ps3.close();
ps4.close();
ps5.close();
}
}
/**
* {@inheritDoc}
*/
public void updateSecuritiesLogs(Vector<String> contract,String marketsector,Timestamp lastsync,Collection fields) throws Exception {
for(Iterator it=fields.iterator();it.hasNext();){
String field=(String)it.next();
PreparedStatement ps3=this.connection().prepareStatement("SELECT * FROM reference.SecuritySync WHERE security_name=? AND security_field=?");
PreparedStatement ps4=this.connection().prepareStatement("INSERT INTO reference.SecuritySync(last_sync,security_name,security_field) VALUES(?,?,?)");
PreparedStatement ps5=this.connection().prepareStatement("UPDATE reference.SecuritySync SET last_sync=? WHERE security_name=? AND security_field=?");
for(Iterator<String> i=contract.iterator();i.hasNext();){
String cont=i.next();
cont=cont.trim()+" "+marketsector;
ps3.setString(1, cont);
ps3.setString(2, field);
ResultSet rs=ps3.executeQuery();
if(rs.next()){
ps5.setTimestamp(1, lastsync);
ps5.setString(2, cont.trim());
ps5.setString(3, field);
ps5.execute();
}else{
ps4.setTimestamp(1, lastsync);
ps4.setString(2, cont.trim());
ps4.setString(3, field);
ps4.execute();
}
rs.close();
}
ps3.close();
ps4.close();
ps5.close();
}
}
/**
* {@inheritDoc}
*/
public Vector<String> getContractNames2RefSync(boolean pendingonly) throws Exception {
Statement st=this.connection().createStatement();
ResultSet rs=null;
if(pendingonly){
rs=st.executeQuery("select * from contract_info WHERE ref_synchronized<=0 OR ref_synchronized is NULL");
}else{
rs=st.executeQuery("select * from contract_info");
}
Vector<String> v=new Vector();
while(rs.next()){
v.add(rs.getString("name"));
}
rs.close();
st.close();
return v;
}
/**
* {@inheritDoc}
*/
public Map<String,String> getSecurityNames2RefSync(boolean pendingonly) throws Exception {
Statement st=this.connection().createStatement();
ResultSet rs=null;
if(pendingonly){
rs=st.executeQuery("select * from security_info WHERE ref_synchronized<=0 OR ref_synchronized is NULL");
}else{
rs=st.executeQuery("select * from security_info");
}
LinkedHashMap<String,String> rtn=new LinkedHashMap();
while(rs.next()){
String name=rs.getString("name");
String marketsector=rs.getString("marketsector");
rtn.put( name+" "+marketsector,name);
}
rs.close();
st.close();
return rtn;
}
/**
* {@inheritDoc}
*/
public Map<String,String> getSecurityName2RefSync(String ticker) throws Exception {
Statement st=this.connection().createStatement();
ResultSet rs=null;
rs=st.executeQuery("select * from security_info where name='"+ticker+"'");
LinkedHashMap<String,String> rtn=new LinkedHashMap();
while(rs.next()){
String name=rs.getString("name");
String marketsector=rs.getString("marketsector");
rtn.put( name+" "+marketsector,name);
}
rs.close();
st.close();
return rtn;
}
/**
* {@inheritDoc}
*/
public void updateContractReference(String contractname, Map<String,String> fielddata ) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("SELECT * FROM contract_info WHERE name=?");
//PreparedStatement ps1=this.connection().prepareStatement("INSERT INTO contract_info(ref_synchronized,first_notice_date,last_trade_date,name) VALUES(?,?,?,?)");
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
Date fndate=null;
Date ltdate=null;
if(fielddata.get("FUT_LAST_TRADE_DT")!=null){
ltdate=new Date(sf.parse(fielddata.get("FUT_LAST_TRADE_DT")).getTime());
}
if(fielddata.get("FUT_NOTICE_FIRST")!=null){
fndate=new Date(sf.parse(fielddata.get("FUT_NOTICE_FIRST")).getTime());
}
ps.setString(1, contractname);
ResultSet rs=ps.executeQuery();
PreparedStatement ps1=null;
int thisid=0;
boolean updatemode=true;
if(rs.next()){
ps1=this.connection().prepareStatement("UPDATE contract_info SET ref_synchronized=?,first_notice_date=?,last_trade_date=? WHERE name=?");
PreparedStatement ps11=this.connection().prepareStatement("DELETE FROM contract_info_fields WHERE contract_id=(select id from contract_info where name=? limit 1)" );
ps11.setString(1, contractname);
ps11.execute();
ps11.close();
PreparedStatement st12=this.connection().prepareStatement("select id from contract_info where name=?");
st12.setString(1,contractname);
ResultSet rs12=st12.executeQuery();
if(rs12.next()){
thisid=rs12.getInt("id");
}
rs12.close();
st12.close();
}else{
ps1=this.connection().prepareStatement("INSERT INTO contract_info(ref_synchronized,first_notice_date,last_trade_date,name) VALUES(?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
updatemode=false;
}
rs.close();
ps1.setInt(1, 1);
ps1.setDate(2, fndate);
ps1.setDate(3, ltdate);
ps1.setString(4, contractname);
ps1.executeUpdate();
if(!updatemode){
ResultSet rs1 = ps1.getGeneratedKeys();
if(rs1.next()){
thisid=rs1.getInt(1);
}
rs1.close();
}
ps1.close();
if(thisid>0){
PreparedStatement ps3=this.connection().prepareStatement("INSERT INTO contract_info_fields(bb_fieldname,value,contract_id) VALUES(?,?,?)");
for(Iterator<String> it=fielddata.keySet().iterator();it.hasNext();){
String bbfield=it.next();
ps3.setString(1,bbfield);
ps3.setString(2,fielddata.get(bbfield));
ps3.setInt(3, thisid);
ps3.executeUpdate();
}
ps3.close();
}
}
/**
* {@inheritDoc}
*/
public void updateSecurityReference(String securityname, String marketsector, Map<String,String> fielddata ) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("SELECT * FROM security_info WHERE name=?");
SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
Date fndate=null;
Date ltdate=null;
ps.setString(1, securityname);
ResultSet rs=ps.executeQuery();
PreparedStatement ps1=null;
int thisid=0;
boolean updatemode=true;
if(rs.next()){
ps1=this.connection().prepareStatement("UPDATE security_info SET ref_synchronized=? WHERE name=?");
PreparedStatement ps11=this.connection().prepareStatement("DELETE FROM security_info_fields WHERE security_id=(select id from security_info where name=? limit 1)" );
ps11.setString(1, securityname);
ps11.execute();
ps11.close();
PreparedStatement st12=this.connection().prepareStatement("select id from security_info where name=?");
st12.setString(1,securityname);
ResultSet rs12=st12.executeQuery();
if(rs12.next()){
thisid=rs12.getInt("id");
}
rs12.close();
st12.close();
}else{
ps1=this.connection().prepareStatement("INSERT INTO security_info(ref_synchronized, name,marketsector) VALUES(?,?,?)",Statement.RETURN_GENERATED_KEYS);
updatemode=false;
}
rs.close();
ps1.setInt(1, 1);
ps1.setString(2, securityname);
if(!updatemode){
ps1.setString(3, marketsector);
}
ps1.executeUpdate();
if(!updatemode){
ResultSet rs1 = ps1.getGeneratedKeys();
if(rs1.next()){
thisid=rs1.getInt(1);
}
rs1.close();
}
ps1.close();
if(thisid>0){
PreparedStatement ps3=this.connection().prepareStatement("INSERT INTO security_info_fields(bb_fieldname,value,security_id) VALUES(?,?,?)");
for(Iterator<String> it=fielddata.keySet().iterator();it.hasNext();){
String bbfield=it.next();
ps3.setString(1,bbfield);
ps3.setString(2,fielddata.get(bbfield));
ps3.setInt(3, thisid);
ps3.executeUpdate();
}
ps3.close();
}
}
/**
* {@inheritDoc}
*/
public void addSyncLogs(int bbsyncid, Timestamp start, Timestamp end, String message, String status, String manual_scheduler) throws Exception {
String dquery="DELETE FROM bbsync_logs WHERE bbsync_id=? AND id NOT IN (select id from (select id from bbsync_logs WHERE bbsync_id=? ORDER BY start_time DESC limit 11) temp_table)";
PreparedStatement st=this.connection().prepareStatement(dquery);
st.setInt(1, bbsyncid);
st.setInt(2, bbsyncid);
st.executeUpdate();
st.close();
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO bbsync_logs(bbsync_id,start_time,end_time,message,status,manual_scheduler) VALUES(?,?,?,?,?,?)");
ps.setInt(1, bbsyncid);
ps.setTimestamp(2, start);
ps.setTimestamp(3, end);
ps.setString(4,message);
ps.setString(5,status);
ps.setString(6,manual_scheduler);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void removeScheduleTicker(int bbsync_id, String ticker) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("DELETE FROM bbsync_contracts WHERE bbsync_id=? AND contract=?" );
ps.setInt(1, bbsync_id);
ps.setString(2, ticker.trim());
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public int saveSchedule(
int id,
String name,
String mkt_secdb,
String dateoption,
Date datefrom,
Date dateto,
int datenumber,
Vector fields,
String contracts,
BBSyncTrigger t,
String marketsector,
String timezone
) throws Exception {
log.debug("saveSchedule() called:");
String query1;
PreparedStatement ps;
if(id>0){
query1="UPDATE bbsync SET name=?,is_mkt_securitydb=?,date_option=?,date_recentnumber=?,date_from=?,date_to=?,tickers=?,trigger_type=?,fields=?,trigger_time=?,trigger_days=?,trigger_day=?,marketsector=?,trigger_week=?,trigger_dailyhour=?,timezone=? WHERE id=?";
ps=this.connection().prepareStatement(query1);
}else{
query1="INSERT INTO bbsync(name,is_mkt_securitydb,date_option,date_recentnumber,date_from,date_to,tickers,trigger_type,fields,trigger_time,trigger_days,trigger_day,marketsector,trigger_week,trigger_dailyhour,timezone) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
ps=this.connection().prepareStatement(query1,Statement.RETURN_GENERATED_KEYS);
}
log.debug("connection:"+connection());
log.debug("ps:"+ps);
log.debug("t:"+t);
log.debug("query:"+query1);
log.debug("id:"+id);
ps.setString(1, name);
ps.setString(2, mkt_secdb);
ps.setString(3, dateoption);
ps.setInt(4, datenumber);
ps.setDate(5, datefrom);
ps.setDate(6, dateto);
//ps.setString(7, contracts);
ps.setString(7, "");
ps.setInt(8, t.getSynctype());
ps.setString(9, ""); // to be removed later.
ps.setString(10, t.getTime());
ps.setString(11, t.getDays());
//ps.setString(13, t.getMonths());
ps.setInt(12, t.getDay());
ps.setString(13, marketsector);
ps.setInt(14, (t.getWeek()!=null)?t.getWeek():0 );
ps.setInt(15, (t.getDailyhour()!=null)?t.getDailyhour():0);
ps.setString(16, timezone);
if(id>0){
ps.setInt(17, id);
ps.executeUpdate();
}else{
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
if(rs.next()){
id=rs.getInt(1);
}
rs.close();
}
ps.close();
if(id>0){
Statement st=this.connection().createStatement();
st.execute("DELETE FROM bbsync_fields WHERE bbsync_id="+id);
st.close();
PreparedStatement ps2=this.connection().prepareStatement("INSERT into bbsync_fields(bbsync_id,field_id) values(?,?)");
for(int a=0;a<fields.size();a++){
ps2.setInt(1, id);
ps2.setInt(2, Integer.parseInt((String)fields.get(a)));
ps2.executeUpdate();
}
ps2.close();
ArrayList tickers= parseFreeTextTokens(contracts);
Statement st1=this.connection().createStatement();
st1.execute("DELETE FROM bbsync_contracts WHERE bbsync_id="+id);
st1.close();
PreparedStatement ps3=this.connection().prepareStatement("INSERT into bbsync_contracts(bbsync_id,contract) values(?,?)");
for(int a=0;a<tickers.size();a++){
ps3.setInt(1, id);
ps3.setString(2, ((String)tickers.get(a)).trim());
ps3.executeUpdate();
}
ps3.close();
}
return id;
}
/**
* {@inheritDoc}
*/
public void deleteQuery(int id) throws Exception {
if(id>0){
Statement st=this.connection().createStatement();
st.execute("DELETE FROM bbsync_fields WHERE bbsync_id="+id);
st.close();
Statement st1=this.connection().createStatement();
st1.execute("DELETE FROM bbsync_contracts WHERE bbsync_id="+id);
st1.close();
Statement st2=this.connection().createStatement();
st2.execute("DELETE FROM bbsync WHERE id="+id);
st2.close();
}
}
/**
* {@inheritDoc}
*/
public void peerStarted(String peername, long sessionid, java.util.Date time) throws Exception {
Timestamp ts=new Timestamp(time.getTime());
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO peer_sessions(peername, sessionid,started_time) VALUES (?,?,?)");
ps.setString(1, peername);
ps.setLong(2, sessionid);
ps.setTimestamp(3,ts );
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void peerStopped(String peername,long sessionid, java.util.Date time) throws Exception {
Timestamp ts=new Timestamp(time.getTime());
PreparedStatement ps=this.connection().prepareStatement("UPDATE peer_sessions SET stopped_time=? WHERE peername=? AND sessionid=?");
ps.setTimestamp(1,ts );
ps.setString(2, peername);
ps.setLong(3, sessionid);
ps.executeUpdate();
ps.close();
}
/**
* Parse free text to list by token
* @param stringToken string token
* @return text separated by token in list
*/
private ArrayList parseFreeTextTokens(String stringToken){
ArrayList rtn=new ArrayList();
if(stringToken!=null && !stringToken.equals("")){
String pline=fieldSeparator4FreeText(stringToken);
StringTokenizer st=new StringTokenizer(stringToken,pline);
while(st.hasMoreTokens()){
rtn.add(st.nextToken());
}
}
return rtn;
}
/**
* Get field separator from free text
* @param stringToken string token
* @return field separator
*/
private String fieldSeparator4FreeText(String stringToken){
return (stringToken.indexOf(",")>=0)?",":"\r\n";
}
}

216
lib-db/src/main/java/com/fourelementscapital/db/mariadb/ConstructQueryDBMariaDB.java

@ -0,0 +1,216 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.util.Map;
import com.fourelementscapital.db.ConstructQueryDB;
/**
* Construct Query MariaDB DAO implementation
*/
public class ConstructQueryDBMariaDB extends ConstructQueryDB {
/**
* {@inheritDoc}
*/
public String constructDateInputQuery(Map rtnobj) {
if (rtnobj == null) {
return null;
}
String q = null;
String filtertype = rtnobj.get("filtertype") == null ? "" : rtnobj.get("filtertype").toString();
if ("daterange".equals(filtertype)) {
String dobj1Success = rtnobj.get("dobj1Success").toString();
String dobj2Success = rtnobj.get("dobj2Success").toString();
String cdatefield = rtnobj.get("cdatefield").toString();
String dobj1Sqldate = rtnobj.get("dobj1Sqldate").toString();
String dobj2Sqldate = rtnobj.get("dobj2Sqldate").toString();
if ("true".equals(dobj1Success) && "true".equals(dobj2Success)) {
q = cdatefield+" BETWEEN '"+ dobj1Sqldate +"' AND '"+ dobj2Sqldate +"'";
}
}
else if ("datefrom".equals(filtertype)) {
String dobj1Success = rtnobj.get("dobj1Success").toString();
String cdatefield = rtnobj.get("cdatefield").toString();
String dobj1Sqldate = rtnobj.get("dobj1Sqldate").toString();
if ("true".equals(dobj1Success)) {
q = cdatefield+" BETWEEN '"+ dobj1Sqldate +"' AND now() ";
}
}
else if ("number".equals(filtertype)) {
String filtervalue = rtnobj.get("filtervalue").toString();
String numbr = rtnobj.get("number").toString();
String cdatefield = rtnobj.get("cdatefield").toString();
if ("ndays".equals(filtervalue)) {
q = cdatefield+">=DATE_ADD(NOW(), interval -"+numbr+" day)";
}
else if ("nweeks".equals(filtervalue)) {
q = cdatefield+">=DATE_ADD(NOW(), interval -"+numbr+" week)";
}
else if ("nmonths".equals(filtervalue)) {
q = cdatefield+">=DATE_ADD(NOW(), interval -"+numbr+" month)";
}
else if ("nyears".equals(filtervalue)) {
q = cdatefield+">=DATE_ADD(NOW(), interval -"+numbr+" year)";
}
}
else {
Object filtervalue = rtnobj.get("filtervalue");
String cdatefield = rtnobj.get("cdatefield").toString();
if (filtervalue!=null && !"".equals(filtervalue.toString()) && cdatefield!=null && !"".equals(cdatefield.toString())) {
q = constructRecentQuery(cdatefield, filtervalue.toString());
}
else {
q = null;
}
}
return q;
}
/**
* {@inheritDoc}
*/
public String constructRecentQuery(String field, String dateQuery) {
if (field == null || "".equals(field)) {
return null;
}
if (dateQuery == null || "".equals(dateQuery)) {
return null;
}
String q = null;
if ("last1Hour".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -1 hour)";
}
else if ("last2Hour".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -2 hour)";
}
else if ("last5Hour".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -5 hour)";
}
else if ("last10Hour".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -10 hour)";
}
else if ("last1Day".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -1 day)";
}
else if ("last2Day".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -2 day)";
}
else if ("last3Day".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -3 day)";
}
else if ("last1Week".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -1 week)";
}
else if ("last10Week".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -10 week)";
}
else if ("last1Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -1 month)";
}
else if ("last2Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -2 month)";
}
else if ("last3Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -3 month)";
}
else if ("last6Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -6 month)";
}
else if ("last12Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -12 month)";
}
else if ("last18Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -18 month)";
}
else if ("last24Month".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -24 month)";
}
else if ("last3Year".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -3 year)";
}
else if ("last4Year".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -4 year)";
}
else if ("last5Year".equals(dateQuery)) {
q = field + ">=DATE_ADD(NOW(), interval -5 year)";
}
else if ("last10Year".equals(dateQuery)) {
q = "trigger_datetime>=DATE_ADD(NOW(), interval -10 year)";
}
return q;
}
/**
* {@inheritDoc}
*/
public String constructQueueHistoryQuery(Map rtnobj) {
if (rtnobj == null) {
return null;
}
String q = null;
//q = rtnobj.get("query") == null ? "null" : rtnobj.get("query").toString();
q = constructDateInputQuery(rtnobj);
String statfilter = rtnobj.get("statfilter") == null ? "" : rtnobj.get("statfilter").toString();
String scd_typefilter = rtnobj.get("scd_typefilter") == null ? "" : rtnobj.get("scd_typefilter").toString();
if ("true".equals(rtnobj.get("queryCheck").toString())) {
if(!"".equals(statfilter)){
if("{null}".equals(statfilter)){
q+=" AND a.status IS NULL";
}else if("#success".equals(statfilter)){
q+=" AND (a.status<>'success' OR a.status IS NULL )";
}else {
q+=" AND a.status='"+statfilter+"'";
}
}
q += (!"".equals(scd_typefilter)) ? " AND b.taskuid='"+ scd_typefilter +"'" : "";
String fld1 = rtnobj.get("fld1") == null ? "" : rtnobj.get("fld1").toString();
String scd_filterfieldval = rtnobj.get("scd_filterfieldval") == null ? "" : rtnobj.get("scd_filterfieldval").toString();
String q1 = "";
if(!"".equals(fld1) && !"tag".equals(fld1) && !"".equals(scd_filterfieldval)){
String val1=scd_filterfieldval;
if("name".equals(fld1)){q1=" b.name LIKE '%"+val1+"%' ";}
if("scheduler_id".equals(fld1)){q1=" a.scheduler_id="+val1+"";}
q += ("".equals(q1)) ? "" : " AND "+ q1 +" ";
}
String scd_filterddval = rtnobj.get("scd_filterddval") == null ? "" : rtnobj.get("scd_filterddval").toString();
if("host".equals(fld1) && !"".equals(scd_filterddval)) {
q1 = " a.host='"+ scd_filterddval +"'";
q += ("".equals(q1)) ? "" : " AND "+ q1 +" ";
}
if("tag".equals(fld1) && !"".equals(scd_filterddval)) {
String val1 = rtnobj.get("scd_filterddval") == null ? "" : rtnobj.get("scd_filterddval").toString();
q1=" a.scheduler_id IN(SELECT scheduler_id from scheduler_tags where tag_id="+val1+") ";
q += ("".equals(q1)) ? "" : " AND "+ q1 +" ";
}
}
return q;
}
}

382
lib-db/src/main/java/com/fourelementscapital/db/mariadb/ContractDBMariaDB.java

@ -0,0 +1,382 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import com.fourelementscapital.db.ContractDB;
import com.fourelementscapital.db.GeneralUtilDB;
import com.fourelementscapital.db.vo.Contract;
import com.fourelementscapital.db.vo.Strategy;
/**
* Contract MySQL DAO implementation
*/
public class ContractDBMariaDB extends ContractDB {
private Logger log=LogManager.getLogger(ContractDB.class.getName());
private String tablename;
/**
* Constructor
* @param tablename table name
*/
public ContractDBMariaDB(String tablename){
this.tablename=tablename;
}
/**
* Constructor
*/
public ContractDBMariaDB(){
}
/**
* {@inheritDoc}
*/
public void updateRecords(Connection con,Vector records) throws Exception {
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+" (cdate,contract,val) VALUES(?,?,?) ");
PreparedStatement st1=con.prepareStatement("SELECT cdate FROM "+this.tablename+" WHERE cdate=? AND contract=?");
PreparedStatement st2=con.prepareStatement("UPDATE "+this.tablename+" SET val=? WHERE cdate=? AND contract=?");
log.debug("records: size:"+records.size());
for(Iterator<Contract> i=records.iterator();i.hasNext();){
Contract contract=i.next();
log.debug("contract: date():"+contract.getCdate());
st1.setDate(1, new java.sql.Date(contract.getCdate().getTime()));
st1.setString(2, contract.getName());
if(!st1.executeQuery().next()){
st.setDate(1, new java.sql.Date(contract.getCdate().getTime()));
st.setString(2, contract.getName());
st.setDouble(3, contract.getValue());
st.executeUpdate();
}else{
st2.setDouble(1, contract.getValue());
st2.setDate(2, new java.sql.Date(contract.getCdate().getTime()));
st2.setString(3, contract.getName());
st2.executeUpdate();
}
}
st1.close();
st2.close();
st.close();
}
/**
* {@inheritDoc}
*/
public void addRecords(Connection con,Vector records) throws Exception {
log.debug("records: size:"+records.size());
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+"(cdate,contract,val) VALUES(?,?,?) ");
for(Iterator<Contract> i=records.iterator();i.hasNext();){
Contract contract=i.next();
log.debug("contract: date():"+contract.getCdate());
log.debug("contract: sqldbs():"+new java.sql.Date(contract.getCdate().getTime()));
log.debug("contract: this.tablename():"+this.tablename);
st.setDate(1, new java.sql.Date(contract.getCdate().getTime()));
st.setString(2, contract.getName());
st.setDouble(3, contract.getValue());
st.executeUpdate();
}
st.close();
}
/**
* {@inheritDoc}
*/
public void createTable(Connection con, int decimalpoint) throws Exception {
String query="CREATE TABLE IF NOT EXISTS "+this.tablename +" ( ";
query+="cdate datetime NOT NULL ,";
query+="contract varchar(50), ";
query+="val numeric(20,"+decimalpoint+") ";
query+=") ";
//System.out.println("ContractDB.class: query:"+query);
Statement st=con.createStatement();
st.execute(query);
st.close();
}
/*
* implemented but that of changing to different field.
public void createNewContract(Connection con,String subtablename, String contract) throws Exception {
String query="IF NOT EXISTS (select * from sysobjects where id = object_id('asset_contracts') and OBJECTPROPERTY(id, 'IsUserTable') = 1) ";
query+="BEGIN ";
query+="CREATE TABLE asset_contracts ( ";
query+="tablename varchar(50) ,";
query+="contract varchar(50) ";
query+=") ";
query+="END ";
Statement st=con.createStatement();
st.execute(query);
st.close();
PreparedStatement st1=con.prepareStatement("INSERT into asset_contracts(tablename,contract) VALUES(?,?) ");
st1.setString(1,subtablename);
st1.setString(2, contract);
st1.executeUpdate();
st1.close();
}
public List getCustomContracts(Connection con,String subtablename) throws Exception {
String query="select * from sysobjects where id = object_id('asset_contracts') and OBJECTPROPERTY(id, 'IsUserTable') = 1 ";
Vector rtn=new Vector();
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(query);
if(rs.next()){
Statement st1=con.createStatement();
ResultSet rs1=st1.executeQuery("select contract from asset_contracts WHERE tablename='"+subtablename+"'");
while(rs1.next()){
rtn.add(rs.getString("contract"));
}
rs1.close();
st1.close();
}
rs.close();
st.close();
return rtn;
}
*/
/**
* {@inheritDoc}
*/
public void updateSValRecords(Connection con,Vector records) throws Exception {
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+"(cdate,contract,val,sval) VALUES(?,?,?,?) ");
PreparedStatement st1=con.prepareStatement("SELECT cdate FROM "+this.tablename+" WHERE cdate=? AND contract=?");
PreparedStatement st2=con.prepareStatement("UPDATE "+this.tablename+" SET val=?,sval=? WHERE cdate=? AND contract=?");
for(Iterator<Strategy> i=records.iterator();i.hasNext();){
Strategy contract=i.next();
st1.setDate(1, new java.sql.Date(contract.getCdate().getTime()));
st1.setString(2, contract.getName());
if(!st1.executeQuery().next()){
st.setDate(1, new java.sql.Date(contract.getCdate().getTime()));
st.setString(2, contract.getName());
if(contract.getSvalue()!=null){
st.setObject(3, null);
}else{
st.setDouble(3, contract.getValue());
}
st.setString(4, contract.getSvalue());
st.executeUpdate();
}else{
if(contract.getSvalue()!=null){
st2.setObject(1, null);
}else{
st2.setDouble(1, contract.getValue());
}
st2.setString(2, contract.getSvalue());
st2.setDate(3, new java.sql.Date(contract.getCdate().getTime()));
st2.setString(4, contract.getName());
st2.executeUpdate();
}
}
st1.close();
st2.close();
st.close();
}
/**
* {@inheritDoc}
*/
public void addSValRecords(Connection con,Vector records) throws Exception {
PreparedStatement st=con.prepareStatement("INSERT into "+this.tablename+"(cdate,contract,sval) VALUES(?,?,?) ");
for(Iterator<Strategy> i=records.iterator();i.hasNext();){
Strategy contract=i.next();
st.setDate(1, new java.sql.Date(contract.getCdate().getTime()));
st.setString(2, contract.getName());
//st.setDouble(3, contract.getValue());
st.setString(3, contract.getSvalue());
st.executeUpdate();
}
st.close();
}
/**
* {@inheritDoc}
*/
public void createSValTable(Connection con, int decimalpoint) throws Exception {
String query="CREATE TABLE IF NOT EXISTS "+this.tablename +" ( ";
query+="cdate datetime NOT NULL ,";
query+="contract varchar(50), ";
query+="sval varchar(50), ";
query+="val numeric(20,"+decimalpoint+") ";
query+=") ";
//System.out.println("ContractDB.class: query:"+query);
Statement st=con.createStatement();
st.execute(query);
st.close();
}
/**
* {@inheritDoc}
*/
public int checkSValueField(Connection con) throws Exception {
String query="select count(*) as cnum from "+this.tablename+" where val is not null";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(query);
int valcount=1;
if(rs.next()){
valcount=rs.getInt("cnum");
}
rs.close();
st.close();
return valcount;
}
/**
* {@inheritDoc}
*/
public int countRecords(Connection con) throws Exception {
String query="select count(*) as cnum from "+this.tablename+" ";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(query);
int valcount=1;
if(rs.next()){
valcount=rs.getInt("cnum");
}
rs.close();
st.close();
return valcount;
}
/**
* {@inheritDoc}
*/
public boolean checkSValueFieldTypeExist(Connection con) throws Exception {
String query="SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '"+this.tablename+"' AND COLUMN_NAME = 'sval' AND table_schema = '"+getDb()+"'";
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(query);
boolean exist=false;
if(rs.next()){
exist=true;
}
return exist;
}
/**
* {@inheritDoc}
*/
public List getContractTitles(Connection con) throws Exception {
Vector rtn=new Vector();
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("SELECT distinct contract FROM "+this.tablename);
while(rs.next()){
rtn.add(rs.getString("contract"));
}
rs.close();
st.close();
return rtn;
}
/**
* {@inheritDoc}
*/
public List getContractTitles(Connection con, String datequery) throws Exception {
Vector rtn=new Vector();
Statement st=con.createStatement();
datequery=GeneralUtilDB.convertFromSQL(datequery);
ResultSet rs=st.executeQuery("SELECT distinct contract FROM "+this.tablename+((datequery!=null && !datequery.equals(""))? " WHERE "+datequery:""));
while(rs.next()){
rtn.add(rs.getString("contract"));
}
rs.close();
st.close();
return rtn;
}
/**
* {@inheritDoc}
*/
public void updateMasterTable(Connection con,String mtable,String fieldname) throws Exception {
String query="CREATE TABLE IF NOT EXISTS asset_master ( ";
query+="commodity varchar(50) NOT NULL ,";
query+="commodity_field varchar(100), ";
query+="commodity_fieldoriginal varchar(100) ";
query+=") ";
Statement st=con.createStatement();
st.execute(query);
st.close();
PreparedStatement st1=con.prepareStatement("SELECT commodity FROM asset_master WHERE commodity=? AND commodity_field=?");
PreparedStatement st2=con.prepareStatement("INSERT into asset_master(commodity,commodity_field,commodity_fieldoriginal) VALUES(?,?,?) ");
st1.setString(1, mtable);
st1.setString(2, this.tablename);
if(!st1.executeQuery().next()){
st2.setString(1, mtable);
st2.setString(2, this.tablename);
st2.setString(3, fieldname);
st2.executeUpdate();
}
st1.close();
st2.close();
}
/**
* {@inheritDoc}
*/
public String generateSQLXLQueryPlainQuery(String fieldtable, int nmonths, List contractTitleList) {
String rtn="SELECT cdate ";
for(Iterator<String> it=contractTitleList.iterator();it.hasNext();){
String contract=it.next();
rtn+=",\r\nMAX(CASE WHEN contract='"+contract+"' THEN val END) AS "+contract+" ";
}
rtn+="\r\nFROM "+fieldtable+" WHERE cdate>=DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL -" + nmonths + " month) GROUP BY cdate ORDER BY cdate DESC";
return rtn;
}
}

39
lib-db/src/main/java/com/fourelementscapital/db/mariadb/DBManagerDBMariaDB.java

@ -0,0 +1,39 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import java.util.Vector;
import com.fourelementscapital.db.DBManagerDB;
import com.fourelementscapital.db.GeneralUtilDB;
/**
* DBManager MariaDB DAO implementation
*/
public class DBManagerDBMariaDB extends DBManagerDB{
/**
* {@inheritDoc}
*/
public List listDBGroups() throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from dbman_group ORDER BY disp_order");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn.add(GeneralUtilDB.resultsetToMap(rs));
}
return rtn;
}
}

152
lib-db/src/main/java/com/fourelementscapital/db/mariadb/FlexiFieldDBMariaDB.java

@ -0,0 +1,152 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.apache.commons.dbutils.BasicRowProcessor;
import com.fourelementscapital.db.FlexiFieldDB;
import com.fourelementscapital.db.GeneralUtilDB;
import com.fourelementscapital.db.vo.FlexiField;
/**
* FlexiField MariaDB DAO implementation
*/
public class FlexiFieldDBMariaDB extends FlexiFieldDB {
/**
* {@inheritDoc}
*/
public List getFlexiFields(String tablename) throws Exception {
PreparedStatement pst=this.connection().prepareStatement("select * from flexi_field WHERE tablename=? ORDER BY displayorder");
pst.setString(1, tablename);
ResultSet rs=pst.executeQuery();
List<FlexiField> list= new BasicRowProcessor().toBeanList(rs, FlexiField.class);
return list;
}
/**
* {@inheritDoc}
*/
public void addFlexiField(FlexiField ffield) throws Exception {
PreparedStatement pst=this.connection().prepareStatement("insert into flexi_field(fieldlabel,fieldtype,fieldoptions,tablename) values(?,?,?,?)");
pst.setString(1, ffield.getFieldlabel());
pst.setString(2, ffield.getFieldtype());
pst.setString(3, ffield.getFieldoptions());
pst.setString(4, ffield.getTablename());
pst.executeUpdate();
}
/**
* {@inheritDoc}
*/
public void updateFlexiField(long id,FlexiField ffield) throws Exception {
PreparedStatement pst=this.connection().prepareStatement("UPDATE flexi_field SET fieldlabel=?,fieldoptions=? WHERE id=?");
pst.setString(1, ffield.getFieldlabel());
pst.setString(2, ffield.getFieldoptions());
pst.setLong(3, id);
pst.executeUpdate();
}
/**
* {@inheritDoc}
*/
public void updateFlexiFieldOrder(long id,int order) throws Exception {
PreparedStatement pst=this.connection().prepareStatement("UPDATE flexi_field SET displayorder=? WHERE id=?");
pst.setInt(1, order);
pst.setLong(2,id);
pst.executeUpdate();
}
/**
* {@inheritDoc}
*/
public void deleteFlexiField(long id) throws Exception {
PreparedStatement pst=this.connection().prepareStatement("DELETE FROM flexi_field WHERE id=?");
pst.setLong(1, id);
pst.executeUpdate();
}
/**
* {@inheritDoc}
*/
public Map getFlexiFieldData (String tablename, String idfield, String idvalue) throws Exception {
PreparedStatement pst=this.connection().prepareStatement("select * from "+tablename+" WHERE "+idfield+"=?");
pst.setString(1, idvalue);
ResultSet rs=pst.executeQuery();
HashMap data=new HashMap();
while(rs.next()){
long flexid= rs.getLong("flexi_field_id");
String val=rs.getString("val");
data.put(flexid, val);
}
return data;
}
/**
* {@inheritDoc}
*/
public Vector<Map> getFlexiFieldData4LuceneToken (String tablename, String idfield, String idvalue) throws Exception {
String query="select a.*,b.fieldlabel from "+tablename+" as a left outer join flexi_field as b on b.id=a.flexi_field_id WHERE a."+idfield+"=?";
PreparedStatement pst=this.connection().prepareStatement(query);
//Log.debug("getFlexiFieldData4LuceneToken() query:"+query);
pst.setString(1, idvalue);
ResultSet rs=pst.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//Map rdata= new BasicRowProcessor().toMap(rs);
Map rdata = GeneralUtilDB.resultsetToMap(rs);
rtn.add(rdata);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void saveFlexiFieldData (String tablename, String idfield, String idvalue, Map data) throws Exception {
PreparedStatement pst1=this.connection().prepareStatement("DELETE FROM "+tablename+" WHERE "+idfield+"=?" );
pst1.setString(1, idvalue);
pst1.executeUpdate();
pst1.close();
PreparedStatement pst=this.connection().prepareStatement("insert into "+tablename+"(flexi_field_id,"+idfield+",val) values (?,?,?)");
for(Iterator i=data.keySet().iterator();i.hasNext();){
Object ky=i.next();
Object val=data.get(ky);
Long fid=Long.parseLong(ky+"");
pst.setLong(1, fid);
pst.setString(2, idvalue);
pst.setString(3, val+"");
pst.execute();
}
pst1.close();
}
}

497
lib-db/src/main/java/com/fourelementscapital/db/mariadb/IExecDBMariaDB.java

@ -0,0 +1,497 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
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 org.apache.commons.dbutils.BasicRowProcessor;
import com.fourelementscapital.db.IExecDB;
/**
* IExec MariaDB DAO implementation
*/
public class IExecDBMariaDB extends IExecDB{
/**
* {@inheritDoc}
*/
public List listGroups() throws Exception {
//PreparedStatement ps=this.connection().prepareStatement("Select * from `ie_group` ORDER BY disp_order");
PreparedStatement ps=this.connection().prepareStatement("Select * from ie_group ORDER BY disp_order");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void setGroupOrder( Vector groupids) throws Exception {
//PreparedStatement ps1=this.connection().prepareStatement("UPDATE `ie_group` SET disp_order=? WHERE group_uid=?");
PreparedStatement ps1=this.connection().prepareStatement("UPDATE ie_group SET disp_order=? WHERE group_uid=?");
int count=0;
for(Iterator<String> i=groupids.iterator();i.hasNext();){
ps1.setInt(1, count++);
ps1.setString(2, i.next());
ps1.executeUpdate();
}
}
/**
* {@inheritDoc}
*/
public List listFolders( ) throws Exception {
PreparedStatement ps=null;
ps=this.connection().prepareStatement("Select * FROM ie_folder ORDER BY folder_name");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public String getFolderName(int folder_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select folder_name FROM ie_folder WHERE id=?");
ps.setInt(1,folder_id);
ResultSet rs=ps.executeQuery();
String rtn=null;
while(rs.next()){
rtn=rs.getString(1);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void renameStrategy(int strategy_id, String strategy_name, String file_name) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("UPDATE ie_strategy SET strategy_name=?,file_name=? WHERE id=?");
ps.setString(1, strategy_name);
ps.setString(2, file_name);
ps.setInt(3,strategy_id);
ps.executeUpdate();
}
/**
* {@inheritDoc}
*/
public void renameParentStrategy(int strategy_id, String strategy_name, String file_name, String old_strategy_name) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("UPDATE ie_strategy SET strategy_name=?,file_name=? WHERE id=?");
ps.setString(1, strategy_name);
ps.setString(2, file_name);
ps.setInt(3,strategy_id);
ps.executeUpdate();
PreparedStatement ps2=this.connection().prepareStatement("UPDATE ie_strategy SET parent_strategy=? WHERE parent_strategy=?");
ps2.setString(1, strategy_name);
ps2.setString(2, old_strategy_name);
ps2.executeUpdate();
}
/**
* {@inheritDoc}
*/
public void moveFolder(int folder_id, String new_group_id) throws Exception{
PreparedStatement ps=this.connection().prepareStatement("UPDATE ie_folder SET group_uid = ? WHERE id=?");
ps.setString(1, new_group_id);
ps.setInt(2,folder_id);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void updateStrategyFolder(int strategy_id,int new_folder_id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("UPDATE ie_strategy SET folder_id=? WHERE id=?");
ps.setInt(1,new_folder_id);
ps.setInt(2, strategy_id);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public List listStrategies() throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select a.*,b.folder_name FROM ie_strategy as a left outer join ie_folder as b on a.folder_id=b.id order by a.parent_strategy, a.strategy_name");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public Map getStrategy(int strategy_id) throws Exception {
//PreparedStatement ps=this.connection().prepareStatement("Select * FROM r_function WHERE id=?");
PreparedStatement ps=this.connection().prepareStatement("Select a.*,b.folder_name FROM ie_strategy as a left outer join ie_folder as b on a.folder_id=b.id WHERE a.id=? ORDER BY a.strategy_name ");
ps.setInt(1, strategy_id);
ResultSet rs=ps.executeQuery();
Map rtn=null;
if(rs.next()){
rtn=new BasicRowProcessor().toMap(rs);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public Vector getUniqueContracts(String strategy_name) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select DISTINCT contract FROM ie_parameter WHERE strategy_name=? ");
ps.setString(1,strategy_name);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(rs.getString("contract"));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void addParameters(ArrayList<Map> data,String strategy_name) throws Exception {
PreparedStatement ps1=this.connection().prepareStatement("DELETE FROM ie_parameter WHERE strategy_name=?");
ps1.setString(1,strategy_name);
ps1.executeUpdate();
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO ie_parameter(strategy_name,contract,placeholder,value) VALUES(?,?,?,?)");
for(Iterator i=data.iterator();i.hasNext();){
Map row=(Map)i.next();
ps.setString(1, (String)row.get("strategy_name"));
ps.setString(2, (String)row.get("contract"));
ps.setString(3, (String)row.get("placeholder"));
ps.setString(4, (String)row.get("value"));
ps.executeUpdate();
}
}
/**
* {@inheritDoc}
*/
public void removeContract(String strategy_name, String contract) throws Exception {
PreparedStatement ps1=this.connection().prepareStatement("DELETE FROM ie_parameter WHERE strategy_name=? AND contract=?");
ps1.setString(1,strategy_name);
ps1.setString(2,contract);
ps1.executeUpdate();
}
/**
* {@inheritDoc}
*/
public Map getParameterValues(String strategy_name, String contract) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select placeholder,value FROM ie_parameter WHERE strategy_name=? AND contract=?");
ps.setString(1, strategy_name);
ps.setString(2, contract);
ResultSet rs=ps.executeQuery();
HashMap h=new HashMap();
while(rs.next()){
h.put(rs.getString("placeholder"), rs.getString("value"));
}
rs.close();
ps.close();
return h;
}
/**
* {@inheritDoc}
*/
public Map getStrategy(String strategy_name) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * FROM ie_strategy WHERE strategy_name=?");
ps.setString(1, strategy_name);
ResultSet rs=ps.executeQuery();
Map rtn=null;
if(rs.next()){
rtn=new BasicRowProcessor().toMap(rs);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public Vector getStrategies(Vector strategy_names) throws Exception {
//PreparedStatement ps=this.connection().prepareStatement("Select * FROM r_function WHERE id=?");
String sfunc="''";
for(Iterator i=strategy_names.iterator();i.hasNext();){
sfunc+=",'"+i.next()+"'";
}
PreparedStatement ps=this.connection().prepareStatement("Select * FROM ie_strategy WHERE strategy_name IN ("+sfunc+") ORDER BY strategy_name ");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public int createStrategy(int folder_id,String strategy_name, String path) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO ie_strategy(folder_id,strategy_name,file_name) VALUES(?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setInt(1,folder_id);
ps.setString(2, strategy_name);
ps.setString(3, path);
ps.executeUpdate();
int id=0;
ResultSet generatedKeys = ps.getGeneratedKeys();
if (generatedKeys.next()) {
id=generatedKeys.getInt(1);
}
ps.close();
return id;
}
/**
* {@inheritDoc}
*/
public int createChildStrategy(String parent_name,String strategy_name) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO ie_strategy(parent_strategy,strategy_name) VALUES(?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,parent_name);
ps.setString(2, strategy_name);
ps.executeUpdate();
int id=0;
ResultSet generatedKeys = ps.getGeneratedKeys();
if (generatedKeys.next()) {
id=generatedKeys.getInt(1);
}
ps.close();
return id;
}
/**
* {@inheritDoc}
*/
public int getFolderID(String folder_name) throws Exception {
PreparedStatement ps=null;
ps=this.connection().prepareStatement("Select * FROM ie_folder WHERE folder_name=?");
ps.setString(1, folder_name);
ResultSet rs=ps.executeQuery();
int rtn=0;
if(rs.next()){
rtn=rs.getInt("id");
}
return rtn;
}
/**
* {@inheritDoc}
*/
public int createFolder(String folder, String new_group_id) throws Exception{
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO ie_folder(folder_name,group_uid) VALUES(?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1, folder);
ps.setString(2, new_group_id);
ps.executeUpdate();
ResultSet generatedKeys = ps.getGeneratedKeys();
int id=0;
if (generatedKeys.next()) {
id=generatedKeys.getInt(1);
}
ps.close();
return id;
}
/**
* {@inheritDoc}
*/
public List listOfFolders(String group_id) throws Exception {
PreparedStatement ps=null;
ps=this.connection().prepareStatement("Select * FROM ie_folder WHERE group_uid=? ORDER BY folder_name");
ps.setString(1, group_id);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
/*
public Vector getContractTree() throws Exception {
StringBuffer sb = new StringBuffer();
sb.append("SELECT contract,commodity as commodity FROM trading.tblContractAllocation WHERE commodity in (SELECT commodity from tradingRef.commodityRef) ");
sb.append("AND date= ");
sb.append("CASE DAYOFWEEK(SUBDATE(CURRENT_DATE, 1)) ");
sb.append(" WHEN 1 THEN SUBDATE(CURRENT_DATE, 3) ");
sb.append(" WHEN 7 THEN SUBDATE(CURRENT_DATE, 2) ");
sb.append(" ELSE SUBDATE(CURRENT_DATE, 1) ");
sb.append("END ");
sb.append("ORDER BY commodity, year ASC, month ASC ");
PreparedStatement ps=this.connection().prepareStatement(sb.toString());
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
*/
/**
* {@inheritDoc}
*/
public Vector getContractTree() throws Exception {
StringBuffer sb = new StringBuffer();
/*sb.append("SELECT contract,commodity as commodity FROM " + DB_NAME_TRADING + ".dbo.tblContractAllocation WHERE commodity in (SELECT commodity from " + DB_NAME_TRADINGREF + ".dbo.commodityRef) ");
sb.append("AND date= ");
sb.append("CASE DAYOFWEEK(SUBDATE(CURRENT_DATE, 1)) ");
sb.append(" WHEN 1 THEN SUBDATE(CURRENT_DATE, 3) ");
sb.append(" WHEN 7 THEN SUBDATE(CURRENT_DATE, 2) ");
sb.append(" ELSE SUBDATE(CURRENT_DATE, 1) ");
sb.append("END ");
sb.append("ORDER BY commodity, year ASC, month ASC ");*/
sb.append("SELECT contract,commodity as commodity ");
sb.append("FROM trading.dbo.tblContractAllocation ");
sb.append("WHERE commodity in (SELECT commodity from tradingRef.dbo.commodityRef) ");
sb.append("AND date= CASE DATEPART(w,DATEADD(DAY,1,CONVERT(date, GETDATE()))) ");
sb.append("WHEN 1 THEN DATEADD(DAY,-3,CONVERT(date, GETDATE())) ");
sb.append("WHEN 7 THEN DATEADD(DAY,-2,CONVERT(date, GETDATE())) ");
sb.append("ELSE DATEADD(DAY,-1,CONVERT(date, GETDATE())) END ");
sb.append("ORDER BY commodity, year ASC, month ASC");
PreparedStatement ps=this.connection().prepareStatement(sb.toString());
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
return rtn;
}
/*
public Vector<String> getCommodityTree() throws Exception {
String query="SELECT commodity from tradingRef.commodityRef ORDER BY orderNo";
PreparedStatement ps=this.connection().prepareStatement(query);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn.add(rs.getString("commodity"));
}
return rtn;
}
*/
/**
* {@inheritDoc}
*/
public Vector<String> getCommodityTree() throws Exception {
String query="SELECT commodity from " + DB_NAME_TRADINGREF + ".dbo.commodityRef ORDER BY orderNo";
PreparedStatement ps=this.connection().prepareStatement(query);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn.add(rs.getString("commodity"));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public boolean isParent(String strategy_name) throws Exception {
boolean rtn=false;
String query="select * from ie_strategy where parent_strategy=?";
PreparedStatement ps=this.connection().prepareStatement(query);
ps.setString(1, strategy_name);
ResultSet rs=ps.executeQuery();
if(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn=true;
}
return rtn;
}
}

140
lib-db/src/main/java/com/fourelementscapital/db/mariadb/InfrastructureDBMariaDB.java

@ -0,0 +1,140 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.dbutils.BasicRowProcessor;
import com.fourelementscapital.db.InfrastructureDB;
/**
* Infrastructure MariaDB DAO implementation
*/
public class InfrastructureDBMariaDB extends InfrastructureDB {
/**
* {@inheritDoc}
*/
public Map getThemes4Users(String user) throws Exception {
//String query="select * from tblTeamOrganization where theme in ('bb','port','itools')";
String query="select * from tblTeamOrganization ";
PreparedStatement ps=this.connection().prepareStatement(query);
ResultSet rs=ps.executeQuery();
ResultSetMetaData rm= rs.getMetaData();
ArrayList<String> columns=new ArrayList();
for(int i=0;i<rm.getColumnCount();i++){
String column=rm.getColumnName(i+1);
columns.add(column);
}
TreeMap<String, String> themes=new TreeMap();
while(rs.next()){
String leter=rs.getString(user);
String theme=rs.getString("theme");
if(leter!=null && !leter.trim().equals("")){
themes.put(theme, leter);
}
}
return themes;
}
/**
* {@inheritDoc}
*/
public Map getTeamOrg(String themes, List hierarchy) throws Exception {
//String query="select * from tblTeamOrganization where theme in ('bb','port','itools')";
String query="select * from tblTeamOrganization where theme in ("+themes+")";
PreparedStatement ps=this.connection().prepareStatement(query);
ResultSet rs=ps.executeQuery();
ResultSetMetaData rm= rs.getMetaData();
ArrayList<String> columns=new ArrayList();
for(int i=0;i<rm.getColumnCount();i++){
String column=rm.getColumnName(i+1);
columns.add(column);
}
TreeMap<String, String> usrs=new TreeMap();
while(rs.next()){
for(String user:columns){
String val=rs.getString(user);
if(val!=null && !val.trim().equals("") ){
if(usrs.get(user)!=null){
String old=usrs.get(user);
int oldorder=hierarchy.indexOf(old);
int neworder=hierarchy.indexOf(val);
if(neworder<oldorder){
usrs.put(user,val);
}
}else{
usrs.put(user,val);
}
}
}
}
return usrs;
}
/**
* {@inheritDoc}
*/
public void updateBloomberDailyCounter(String date, int count) throws Exception {
String query="INSERT INTO tblInfrastructureInfo (date, BBGDailyCounter) VALUES ("+ date +","+ count +") ON DUPLICATE KEY UPDATE BBGDailyCounter=BBGDailyCounter+" + count;
PreparedStatement ps=this.connection().prepareStatement(query);
ps.execute();
ps.close();
}
/**
* {@inheritDoc}
*/
public List<String> getThemeByUsernameAccess(String username) throws Exception {
String query="select 'thm-'+theme from tblTeamOrganization where "+username+" IN ('X','B','C'))";
PreparedStatement ps=this.connection().prepareStatement(query);
ResultSet rs=ps.executeQuery();
ArrayList rtn=new ArrayList();
while(rs.next()){
rtn.add(new BasicRowProcessor().toMap(rs));
}
rs.close();
ps.close();
return rtn;
}
/**
* {@inheritDoc}
*/
public List getAccessByAppAndUsername(String application, String username) throws Exception {
List al=new ArrayList();
String query="SELECT access FROM ApplicationUserAccess WHERE application=? and username=?";
PreparedStatement ps=this.connection().prepareStatement(query);
ps.setString(1, application);
ps.setString(2, username);
ResultSet rs=ps.executeQuery();
while(rs.next()){
al.add(rs.getString(1));
}
rs.close();
ps.close();
return al;
}
}

1125
lib-db/src/main/java/com/fourelementscapital/db/mariadb/RFunctionDBMariaDB.java

File diff suppressed because it is too large Load Diff

307
lib-db/src/main/java/com/fourelementscapital/db/mariadb/ReferenceDBMariaDB.java

@ -0,0 +1,307 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.mariadb;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.Vector;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import com.fourelementscapital.db.GeneralUtilDB;
import com.fourelementscapital.db.ReferenceDB;
import com.fourelementscapital.db.vo.CommodityInfo;
/**
* Reference MariaDB DAO implementation
*/
public class ReferenceDBMariaDB extends ReferenceDB {
private Logger log=LogManager.getLogger(ReferenceDB.class.getName());
/**
* {@inheritDoc}
*/
public Map getComContracts() throws Exception {
Statement st=this.connection().createStatement();
//ResultSet rs=st.executeQuery("select left(ltrim(name),2) as com,name from contract_info order by name,last_trade_date");
ResultSet rs=st.executeQuery("select ifnull(commodity_specify, left(ltrim(name),2)) as com,name from contract_info order by name,last_trade_date");
Vector commodity=new Vector();
TreeMap contract=new TreeMap();
while(rs.next()){
String com=rs.getString("com");
String cname=rs.getString("name");
Vector t=null;
if(commodity.contains(com)){
t=(Vector)contract.get(com);
}else{
t=new Vector();
contract.put(com,t);
commodity.add(com);
}
t.add(cname);
}
st.close();
rs.close();
TreeMap rtn=new TreeMap();
rtn.put("commodity", commodity);
rtn.put("contract", contract);
return rtn;
}
/**
* {@inheritDoc}
*/
public void deleteFieldMapping(int id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("DELETE FROM static_field_mapping WHERE id=?");
ps.setInt(1, id);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void addFieldMapping(String dbfield, String bbfield) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO static_field_mapping(friendly_name, bb_fieldname) VALUES (?,?)");
ps.setString(1, dbfield);
ps.setString(2, bbfield);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public Vector getFieldMapping() throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from static_field_mapping");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn.add(GeneralUtilDB.resultsetToMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void deleteSecFieldMapping(int id) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("DELETE FROM security_static_fieldmapping WHERE id=?");
ps.setInt(1, id);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public void addSecFieldMapping(String dbfield, String bbfield) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("INSERT INTO security_static_fieldmapping(friendly_name, bb_fieldname) VALUES (?,?)");
ps.setString(1, dbfield);
ps.setString(2, bbfield);
ps.executeUpdate();
ps.close();
}
/**
* {@inheritDoc}
*/
public Vector getSecFieldMapping() throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from security_static_fieldmapping");
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//rtn.add(new BasicRowProcessor().toMap(rs));
rtn.add(GeneralUtilDB.resultsetToMap(rs));
}
return rtn;
}
/**
* {@inheritDoc}
*/
public void updateCommodity(CommodityInfo comm) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("SELECT * from commodity_info WHERE commodity=?");
ps.setString(1, comm.getCommodity());
ResultSet rs=ps.executeQuery();
String query="INSERT INTO commodity_info(bbticker,fepricesample,fetradeunit,glsample,glticker,multiplefactorbn,name,nepricesample,netradeunit,nename,sector,units,multiplefactor,commodity) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
if(rs.next()){
query="UPDATE commodity_info SET bbticker=?,fepricesample=?,fetradeunit=?,glsample=?,glticker=?,multiplefactorbn=?,name=?,nepricesample=?,netradeunit=?,nename=?,sector=?,units=?,multiplefactor=? WHERE commodity=?";
}
ps.close();
PreparedStatement ps1=this.connection().prepareStatement(query);
ps1.setString(1,comm.getBbticker());
ps1.setString(2,comm.getFepricesample());
ps1.setString(3,comm.getFetradeunit());
ps1.setString(4,comm.getGlsample());
ps1.setString(5,comm.getGlticker());
ps1.setString(6,comm.getMultiplefactorbn());
ps1.setString(7,comm.getName());
ps1.setString(8,comm.getNepricesample());
ps1.setString(9,comm.getNetradeunit());
ps1.setString(10,comm.getNename());
ps1.setString(11,comm.getSector());
ps1.setString(12,comm.getUnits());
ps1.setString(13,comm.getMultiplefactor());
ps1.setString(14,comm.getCommodity());
ps1.executeUpdate();
ps1.close();
}
/**
* {@inheritDoc}
*/
public Map getCommodityInfo(String commodity) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from commodity_info WHERE commodity=?");
ps.setString(1, commodity);
ResultSet rs=ps.executeQuery();
Map record=null;
while(rs.next()){
//record=new BasicRowProcessor().toMap(rs);
record = GeneralUtilDB.resultsetToMap(rs);
}
return record;
}
/**
* {@inheritDoc}
*/
public Map getContractInfo(String contract) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from contract_info WHERE ltrim(name)=?");
ps.setString(1, contract.trim());
ResultSet rs=ps.executeQuery();
Map record=null;
while(rs.next()){
//record=new BasicRowProcessor().toMap(rs);
record = GeneralUtilDB.resultsetToMap(rs);
}
return record;
}
/**
* {@inheritDoc}
*/
public Map getSecurityInfo(String security) throws Exception {
PreparedStatement ps=this.connection().prepareStatement("Select * from security_info WHERE ltrim(name)=?");
ps.setString(1, security.trim());
ResultSet rs=ps.executeQuery();
Map record=null;
while(rs.next()){
//record=new BasicRowProcessor().toMap(rs);
record = GeneralUtilDB.resultsetToMap(rs);
}
return record;
}
/**
* {@inheritDoc}
*/
public Vector getContractBBInfo(String contract) throws Exception {
//PreparedStatement ps=this.connection().prepareStatement("select bb_fieldname,value from contract_info_fields where contract_id in (select id from contract_info where name=?)");
PreparedStatement ps=this.connection().prepareStatement("select b.friendly_name,value from contract_info_fields as a left outer join static_field_mapping as b on a.bb_fieldname=b.bb_fieldname where a.contract_id in (select id from contract_info where name=?)");
ps.setString(1, contract);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//Map record=new BasicRowProcessor().toMap(rs);
Map record = GeneralUtilDB.resultsetToMap(rs);
rtn.add(record);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public Vector getSecurityBBInfo(String security) throws Exception {
//PreparedStatement ps=this.connection().prepareStatement("select bb_fieldname,value from contract_info_fields where contract_id in (select id from contract_info where name=?)");
PreparedStatement ps=this.connection().prepareStatement("select b.friendly_name,value,b.bb_fieldname from security_info_fields as a left outer join security_static_fieldmapping as b on a.bb_fieldname=b.bb_fieldname where a.security_id in (select id from security_info where name=?)");
ps.setString(1, security);
ResultSet rs=ps.executeQuery();
Vector rtn=new Vector();
while(rs.next()){
//Map record=new BasicRowProcessor().toMap(rs);
Map record = GeneralUtilDB.resultsetToMap(rs);
rtn.add(record);
}
return rtn;
}
/**
* {@inheritDoc}
*/
public Map getAllSecFieldValues(String friendlyname) throws Exception {
log.debug("getAllSecFieldValue() called");
PreparedStatement ps=this.connection().prepareStatement("select a.name,b.value from security_info as a left outer join security_info_fields as b on a.id=b.security_id left outer join security_static_fieldmapping as c on c.bb_fieldname=b.bb_fieldname where c.friendly_name=?");
ps.setString(1, friendlyname);
ResultSet rs=ps.executeQuery();
LinkedHashMap<String,String> rtn=new LinkedHashMap();
while(rs.next()){
String sec=rs.getString("name");
//String fname=rs.getString("friendly_name");
String fval=rs.getString("value");
rtn.put(sec, fval);
/*
if(fname!=null ){
Map<String,String> record=null;
if(rtn.containsKey(sec)){
record=rtn.get(sec);
}else{
record=new LinkedHashMap();
rtn.put(sec, record);
}
record.put(fname, fval);
}
*/
}
//log.debug("record:"+rtn);
return rtn;
}
}

3245
lib-db/src/main/java/com/fourelementscapital/db/mariadb/SchedulerDBMariaDB.java

File diff suppressed because it is too large Load Diff

1163
lib-db/src/main/java/com/fourelementscapital/db/mariadb/UtilDBMariaDB.java

File diff suppressed because it is too large Load Diff

125
lib-db/src/main/java/com/fourelementscapital/db/vo/BBSyncTrigger.java

@ -0,0 +1,125 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
/**
* Trigger POJO (Bean)
*/
public class BBSyncTrigger {
public static final int HOURLY=1;
public static final int WEEKLY=2;
public static final int MONTHLY=3;
private int synctype;
private String time;
private String days;
private int day;
private Integer week;
private Integer dailyhour;
/**
* Get daily hour
* @return daily hour
*/
public Integer getDailyhour() {
return dailyhour;
}
/**
* Set daily hour
* @param dailyhour daily hour
*/
public void setDailyhour(Integer dailyhour) {
this.dailyhour = dailyhour;
}
/**
* Get week
* @return week
*/
public Integer getWeek() {
return week;
}
/**
* Set week
* @param week week
*/
public void setWeek(Integer week) {
this.week = week;
}
/**
* Get days
* @return days
*/
public String getDays() {
return days;
}
/**
* Set days
* @param days days
*/
public void setDays(String days) {
this.days = days;
}
/**
* Get sync type
* @return sync type
*/
public int getSynctype() {
return synctype;
}
/**
* Set sync type
* @param synctype sync type
*/
public void setSynctype(int synctype) {
this.synctype = synctype;
}
/**
* Get time
* @return time
*/
public String getTime() {
return time;
}
/**
* Set time
* @param time time
*/
public void setTime(String time) {
this.time = time;
}
/**
* Get day
* @return day
*/
public int getDay() {
return day;
}
/**
* Set day
* @param day day
*/
public void setDay(int day) {
this.day = day;
}
}

276
lib-db/src/main/java/com/fourelementscapital/db/vo/CommodityInfo.java

@ -0,0 +1,276 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
import java.io.Serializable;
/**
* Commodity POJO (Bean)
*/
public class CommodityInfo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String bbticker;
private String fepricesample;
private String fetradeunit;
private String glsample;
private String glticker;
private String multiplefactor;
private String multiplefactorbn;
private String name;
private String nepricesample;
private String netradeunit;
/**
* Get multiple factor
* @return multiple factor
*/
public String getMultiplefactor() {
return multiplefactor;
}
/**
* Set multiple factor
* @param multiplefactor multiple factor
*/
public void setMultiplefactor(String multiplefactor) {
this.multiplefactor = multiplefactor;
}
private String nename;
private String sector;
private String units;
private String commodity;
/**
* Get commodity
* @return commodity
*/
public String getCommodity() {
return commodity;
}
/**
* Set commodity
* @param commodity commodity
*/
public void setCommodity(String commodity) {
this.commodity = commodity;
}
/**
* Get id
* @return id
*/
public Long getId() {
return id;
}
/**
* Set id
* @param id id
*/
public void setId(Long id) {
this.id = id;
}
/**
* Get bb ticker
* @return bb ticker
*/
public String getBbticker() {
return bbticker;
}
/**
* Set bb ticker
* @param bbticker bb ticker
*/
public void setBbticker(String bbticker) {
this.bbticker = bbticker;
}
/**
* Get fe price sample
* @return fe price sample
*/
public String getFepricesample() {
return fepricesample;
}
/**
* Set fe price sample
* @param fepricesample fe price sample
*/
public void setFepricesample(String fepricesample) {
this.fepricesample = fepricesample;
}
/**
* Get fe trade unit
* @return fe trade unit
*/
public String getFetradeunit() {
return fetradeunit;
}
/**
* Set fe trade unit
* @param fetradeunit fe trade unit
*/
public void setFetradeunit(String fetradeunit) {
this.fetradeunit = fetradeunit;
}
/**
* Get gl sample
* @return gl sample
*/
public String getGlsample() {
return glsample;
}
/**
* Set gl sample
* @param glsample gl sample
*/
public void setGlsample(String glsample) {
this.glsample = glsample;
}
/**
* Get gl ticker
* @return gl ticker
*/
public String getGlticker() {
return glticker;
}
/**
* Set gl ticker
* @param glticker gl ticker
*/
public void setGlticker(String glticker) {
this.glticker = glticker;
}
/**
* Get multiple factor bn
* @return multiple factor bn
*/
public String getMultiplefactorbn() {
return multiplefactorbn;
}
/**
* Set multiple factor bn
* @param multiplefactorbn multiple factor bn
*/
public void setMultiplefactorbn(String multiplefactorbn) {
this.multiplefactorbn = multiplefactorbn;
}
/**
* Get name
* @return name
*/
public String getName() {
return name;
}
/**
* Set name
* @param name name
*/
public void setName(String name) {
this.name = name;
}
/**
* Get ne price sample
* @return ne price sample
*/
public String getNepricesample() {
return nepricesample;
}
/**
* Set ne price sample
* @param nepricesample ne price sample
*/
public void setNepricesample(String nepricesample) {
this.nepricesample = nepricesample;
}
/**
* Get ne trade unit
* @return ne trade unit
*/
public String getNetradeunit() {
return netradeunit;
}
/**
* Set ne trade unit
* @param netradeunit ne trade unit
*/
public void setNetradeunit(String netradeunit) {
this.netradeunit = netradeunit;
}
/**
* Get ne name
* @return ne name
*/
public String getNename() {
return nename;
}
/**
* Set ne name
* @param nename ne name
*/
public void setNename(String nename) {
this.nename = nename;
}
/**
* Get sector
* @return sector
*/
public String getSector() {
return sector;
}
/**
* Set sector
* @param sector sector
*/
public void setSector(String sector) {
this.sector = sector;
}
/**
* Get units
* @return units
*/
public String getUnits() {
return units;
}
/**
* Set units
* @param units units
*/
public void setUnits(String units) {
this.units = units;
}
}

78
lib-db/src/main/java/com/fourelementscapital/db/vo/Contract.java

@ -0,0 +1,78 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
import java.util.Date;
/**
* Contract POJO (Bean)
*/
public class Contract {
private String name;
private double value;
private Date cdate;
/**
* Get name
* @return name
*/
public String getName() {
return name;
}
/**
* Set name
* @param name name
*/
public void setName(String name) {
this.name = name;
}
/**
* Get value
* @return value
*/
public double getValue() {
return value;
}
/**
* Set value
* @param value value
*/
public void setValue(double value) {
this.value = value;
}
/**
* Get cdate
* @return cdate
*/
public Date getCdate() {
return cdate;
}
/**
* Set cdate
* @param cdate cdate
*/
public void setCdate(Date cdate) {
this.cdate = cdate;
}
/**
* Overriding toString() method
* @return string
*/
public String toString(){
return "Name:"+this.name+", CDate:"+this.cdate+", Value:"+this.value;
}
}

130
lib-db/src/main/java/com/fourelementscapital/db/vo/FlexiField.java

@ -0,0 +1,130 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
/**
* Flexible field POJO (Bean)
*/
public class FlexiField {
public final static String TYPE_TEXTBOX ="textbox";
public final static String TYPE_DROP_DOWNLIST ="dropdown";
public final static String TYPE_CHECKBOX ="checkbox";
public final static String TYPE_RADIO ="radio";
public final static String TYPE_FREETEXT ="textarea";
public final static String TYPE_HIDDENFIED ="hidden";
public final static String TYPE_RSCRIPTEDITOR ="rscript";
public final static String TYPE_RSCRIPTEDITOR_PARAM ="rscript_param";
public final static String TYPE_RHINOSCRIPTEDITOR ="rhinoscript";
public final static String TYPE_BLOOMBERG_PLUGGIN="bloomberg_pluggin";
private long id;
private String fieldlabel;
private String fieldtype;
private String fieldoptions;
private String tablename;
private String dropdowninitial;
/**
* Get dropdown initial
* @return dropdown initial
*/
public String getDropdowninitial() {
return dropdowninitial;
}
/**
* Set dropdown initial
* @param dropdowninitial dropdown initial
*/
public void setDropdowninitial(String dropdowninitial) {
this.dropdowninitial = dropdowninitial;
}
/**
* Get id
* @return id
*/
public long getId() {
return id;
}
/**
* Set id
* @param id id
*/
public void setId(long id) {
this.id = id;
}
/**
* Get field label
* @return field label
*/
public String getFieldlabel() {
return fieldlabel;
}
/**
* Set field label
* @param fieldlabel field label
*/
public void setFieldlabel(String fieldlabel) {
this.fieldlabel = fieldlabel;
}
/**
* Get field type
* @return field type
*/
public String getFieldtype() {
return fieldtype;
}
/**
* Set field type
* @param fieldtype field type
*/
public void setFieldtype(String fieldtype) {
this.fieldtype = fieldtype;
}
/**
* Get field options
* @return field options
*/
public String getFieldoptions() {
return fieldoptions;
}
/**
* Set field options
* @param fieldoptions field options
*/
public void setFieldoptions(String fieldoptions) {
this.fieldoptions = fieldoptions;
}
/**
* Get table name
* @return table name
*/
public String getTablename() {
return tablename;
}
/**
* Set table name
* @param tablename table name
*/
public void setTablename(String tablename) {
this.tablename = tablename;
}
}

87
lib-db/src/main/java/com/fourelementscapital/db/vo/PeerPackage.java

@ -0,0 +1,87 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
import java.util.Date;
/**
* Peer package POJO (Bean)
*/
public class PeerPackage {
private String peername;
private String packagename;
private String version;
private Date lastchecked;
/**
* Get peer name
* @return peer name
*/
public String getPeername() {
return peername;
}
/**
* Set peer name
* @param peername peer name
*/
public void setPeername(String peername) {
this.peername = peername;
}
/**
* Get package name
* @return package name
*/
public String getPackagename() {
return packagename;
}
/**
* Set package name
* @param packagename package name
*/
public void setPackagename(String packagename) {
this.packagename = packagename;
}
/**
* Get version
* @return version
*/
public String getVersion() {
return version;
}
/**
* Set version
* @param version version
*/
public void setVersion(String version) {
this.version = version;
}
/**
* Get last checked
* @return last checked
*/
public Date getLastchecked() {
return lastchecked;
}
/**
* Set last checked
* @param lastchecked last checked
*/
public void setLastchecked(Date lastchecked) {
this.lastchecked = lastchecked;
}
}

136
lib-db/src/main/java/com/fourelementscapital/db/vo/SchedulerTrigger.java

@ -0,0 +1,136 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
/**
* Trigger POJO (Bean)
*/
public class SchedulerTrigger {
private String exp_second;
private String exp_minute;
private String exp_hour;
private String exp_week;
private String exp_day;
private String exp_month;
private String inject_code;
/**
* Get inject code
* @return inject code
*/
public String getInject_code() {
return inject_code;
}
/**
* Set inject code
* @param inject_code inject code
*/
public void setInject_code(String inject_code) {
this.inject_code = inject_code;
}
/**
* Get exp second
* @return exp second
*/
public String getExp_second() {
return exp_second;
}
/**
* Set exp second
* @param exp_second exp second
*/
public void setExp_second(String exp_second) {
this.exp_second = exp_second;
}
/**
* Get exp minute
* @return exp minute
*/
public String getExp_minute() {
return exp_minute;
}
/**
* Set exp minute
* @param exp_minute exp minute
*/
public void setExp_minute(String exp_minute) {
this.exp_minute = exp_minute;
}
/**
* Get exp hour
* @return exp hour
*/
public String getExp_hour() {
return exp_hour;
}
/**
* Set exp hour
* @param exp_hour exp hour
*/
public void setExp_hour(String exp_hour) {
this.exp_hour = exp_hour;
}
/**
* Get exp week
* @return exp week
*/
public String getExp_week() {
return exp_week;
}
/**
* Set exp week
* @param exp_week exp week
*/
public void setExp_week(String exp_week) {
this.exp_week = exp_week;
}
/**
* Get exp day
* @return exp day
*/
public String getExp_day() {
return exp_day;
}
/**
* Set exp day
* @param exp_day exp day
*/
public void setExp_day(String exp_day) {
this.exp_day = exp_day;
}
/**
* Get exp month
* @return exp month
*/
public String getExp_month() {
return exp_month;
}
/**
* Set exp month
* @param exp_month exp month
*/
public void setExp_month(String exp_month) {
this.exp_month = exp_month;
}
}

34
lib-db/src/main/java/com/fourelementscapital/db/vo/Strategy.java

@ -0,0 +1,34 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
/**
* Strategy extended from Contract POJO
*/
public class Strategy extends Contract {
private String svalue=null;
/**
* Get svalue
* @return svalue
*/
public String getSvalue() {
return svalue;
}
/**
* Set svalue
* @param svalue svalue
*/
public void setSvalue(String svalue) {
this.svalue = svalue;
}
}

75
lib-db/src/main/java/com/fourelementscapital/db/vo/ValueObject.java

@ -0,0 +1,75 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db.vo;
import java.io.Serializable;
/**
* Value object used for various purposes to handle key value peer operations
*/
public class ValueObject implements Serializable {
private static final long serialVersionUID = 1L;
private String key;
private String value;
/**
* Get key
* @return key
*/
public String getKey() {
return this.key;
}
/**
* Set key
* @param key key
*/
public void setKey(String key) {
this.key = key;
}
/**
* Get value
* @return value
*/
public String getValue() {
return value;
}
/**
* Set value
* @param value value
*/
public void setValue(String value) {
this.value = value;
}
/**
* Overriding equals method to get uniqueness based on the key
*/
public boolean equals(Object old){
ValueObject oldvo=(ValueObject)old;
if(this.key!=null && oldvo.key!=null && this.key.trim().equals(oldvo.key.trim())){
return true;
}else{
return false;
}
}
/**
* Overriding toString() method
* @return string
*/
public String toString(){
return this.key;
}
}

2
lib-db/src/main/resources/config_db.properties

@ -0,0 +1,2 @@
db_close_timeout=20
db_config_path=/mnt/public/Libs/.4E.config

13
lib-db/src/main/resources/log4j2.xml

@ -0,0 +1,13 @@
<?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>
</Loggers>
</Configuration>

309
lib-db/src/test/java/com/fourelementscapital/db/LibDbTest.java

@ -0,0 +1,309 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Vector;
import javax.swing.JOptionPane;
import junit.framework.TestCase;
/**
* lib-db unit test
*/
public class LibDbTest extends TestCase {
/**
* Test BBSyncDB.listAll()
*/
public void testBBSyncDBListAll() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
String properties_path = Config.getString("db_config_path");
File file =new File(properties_path);
if ( !file.exists() ) {
JOptionPane.showMessageDialog(null, "Please set the config_db.properties file first");
assertTrue(false);
//System.exit(0);
}
else{
boolean isPass = false;
BBSyncDB db = BBSyncDB.getBBSyncDB();
try {
db.connectDB();
Vector v = db.listAll();
if (v != null) isPass = true; // check null / not. can contains no data.
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
JOptionPane.showMessageDialog(null, "Successfully connect to BBSyncDB");
assertTrue( isPass );
}
*/
assertTrue(true);
}
/**
* Test ConstructQueryDB.constructDateInputQuery()
*/
public void testConstructQueryDBConstructDateInputQuery() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
ConstructQueryDB db = ConstructQueryDB.getConstructQueryDB();
try {
Map<String, String> m = new HashMap<String, String>();
m.put("filtertype", "number");
m.put("filtervalue", "ndays");
m.put("number", "1");
m.put("cdatefield", "date");
String result = db.constructDateInputQuery(m);
if (result != null && !"".equals(result)) isPass = true;
JOptionPane.showMessageDialog(null,"Construct Query MariaDB result: "+ result);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test FlexiFieldDB.getFlexiFields()
*/
public void testFlexiFieldDBGetFlexiFields() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
FlexiFieldDB db = FlexiFieldDB.getFlexiFieldDB();
try {
db.connectDB();
List l = db.getFlexiFields("tablename");
if (l != null) isPass = true; // check null / not. can contains no data.
JOptionPane.showMessageDialog(null,"FlexiFields contain data");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test GeneralUtilDB.resultsetToMap()
*/
public void testGeneralUtilDBResultsetToMap() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
GeneralUtilDB g = new GeneralUtilDB();
try {
Map m = g.resultsetToMap(null);
}
catch (Exception e) {
isPass = true; // produce error, input resultset can not be null.
}
finally {
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test IExecDB.listGroups()
*/
public void testIExecDBListGroups() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
IExecDB db = IExecDB.getIExcecDB();
try {
db.connectDB();
List l = db.listGroups();
if (l != null) isPass = true; // check null / not. can contains no data.
JOptionPane.showMessageDialog(null, "iExec ie_group is not null");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test InfrastructureDB.getThemes4Users()
*/
public void testInfrastructureDBGetThemes4Users() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
InfrastructureDB db = InfrastructureDB.getInfrastructureDB();
try {
db.connectDB();
Map m = (Map) db.getThemes4Users("Intan");
if ("B".equals(m.get("it"))) isPass = true;
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
JOptionPane.showMessageDialog(null, "InfrastructureDBGetThemes4Users success");
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test ReferenceDB.getFieldMapping()
*/
public void testReferenceDBGetFieldMapping() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
ReferenceDB db = ReferenceDB.getReferenceDB();
try {
db.connectDB();
Vector v = db.getFieldMapping();
if (v != null) isPass = true; // check null / not. can contains no data.
JOptionPane.showMessageDialog(null, "static_field_mapping contain data");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test RFunctionDB.listOfFolders()
*/
public void testRFunctionDBListOfFolders() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
RFunctionDB db = RFunctionDB.getRFunctionDB();
try {
db.connectDB();
List<Map> folders = db.listOfFolders();
// for(Map fold: folders){
// System.out.println("folder name : " + fold.get("folder_name"));
// }
if (folders.size() > 0)
for(Map fold: folders){
//System.out.println("folder name : " + fold.get("folder_name"));
JOptionPane.showMessageDialog(null, "RFunction folder name : " + fold.get("folder_name"));
}
isPass = true;
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test SchedulerDB.getGroupOrder()
*/
public void testSchedulerDBGetGroupOrder() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
SchedulerDB db = SchedulerDB.getSchedulerDB();
try {
db.connectDB();
Vector v = db.getGroupOrder();
if (v.size() > 0) isPass = true;
JOptionPane.showMessageDialog(null, "scheduler_group is not null");
}
catch (Exception e) {
e.printStackTrace();
}
finally {
db.closeDB();
}
assertTrue( isPass );
*/
assertTrue(true);
}
/**
* Test DBManager.GetDatabase()
*/
public void testDBManagerGetDatabase() throws Exception
{
// Remove the comment tag to test. The code are commented out to prevent accessing db when installing this lib (edit properties file first) :
/*
boolean isPass = false;
DBManager dbm = new DBManager("infrastructure");
dbm.connect();
String tableName = "tblTeamOrganization";
ArrayList<String> selectedFields = new ArrayList<String>();
selectedFields.add("Intan");
ResultSet rs = dbm.getDatabase(tableName, selectedFields, null, null);
ArrayList<String> al = new ArrayList<String>();
while (rs.next()) {
al.add(rs.getString(1));
}
if (al.size() > 0) isPass = true;
JOptionPane.showMessageDialog(null, "DBManager test");
dbm.closeConnection();
assertTrue(isPass);
*/
assertTrue(true);
}
}

214
lib-db/src/test/java/com/fourelementscapital/db/VOTest.java

@ -0,0 +1,214 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.db;
import java.util.Date;
import junit.framework.TestCase;
import com.fourelementscapital.db.vo.BBSyncTrigger;
import com.fourelementscapital.db.vo.CommodityInfo;
import com.fourelementscapital.db.vo.Contract;
import com.fourelementscapital.db.vo.FlexiField;
import com.fourelementscapital.db.vo.PeerPackage;
import com.fourelementscapital.db.vo.SchedulerTrigger;
import com.fourelementscapital.db.vo.Strategy;
import com.fourelementscapital.db.vo.ValueObject;
public class VOTest extends TestCase {
/**
* Test BBSyncTrigger Setter Getter
*/
public void testBBSyncTriggerSetterGetter()
{
boolean isEquals = true;
BBSyncTrigger o = new BBSyncTrigger();
o.setDailyhour(1);
o.setDay(2);
o.setDays("Mon");
o.setSynctype(3);
o.setTime("time");
o.setWeek(4);
if (1 != o.getDailyhour()) isEquals = false;
if (2 != o.getDay()) isEquals = false;
if (!"Mon".equals(o.getDays())) isEquals = false;
if (3 != o.getSynctype()) isEquals = false;
if (!"time".equals(o.getTime())) isEquals = false;
if (4 != o.getWeek()) isEquals = false;
assertTrue( isEquals );
}
/**
* Test CommodityInfo Setter Getter
*/
public void testCommodityInfoSetterGetter()
{
boolean isEquals = true;
CommodityInfo o = new CommodityInfo();
o.setBbticker("bbticker");
o.setCommodity("commodity");
o.setFepricesample("fepricesample");
o.setFetradeunit("fetradeunit");
o.setGlsample("glsample");
o.setGlticker("glticker");
o.setId(1L);
o.setMultiplefactor("multiplefactor");
o.setMultiplefactorbn("multiplefactorbn");
o.setName("name");
o.setNename("nename");
o.setNepricesample("nepricesample");
o.setNetradeunit("netradeunit");
o.setSector("sector");
o.setUnits("units");
if (!"bbticker".equals(o.getBbticker())) isEquals = false;
if (!"commodity".equals(o.getCommodity())) isEquals = false;
if (!"fepricesample".equals(o.getFepricesample())) isEquals = false;
if (!"fetradeunit".equals(o.getFetradeunit())) isEquals = false;
if (!"glsample".equals(o.getGlsample())) isEquals = false;
if (!"glticker".equals(o.getGlticker())) isEquals = false;
if (1L != o.getId()) isEquals = false;
if (!"multiplefactor".equals(o.getMultiplefactor())) isEquals = false;
if (!"multiplefactorbn".equals(o.getMultiplefactorbn())) isEquals = false;
if (!"name".equals(o.getName())) isEquals = false;
if (!"nename".equals(o.getNename())) isEquals = false;
if (!"nepricesample".equals(o.getNepricesample())) isEquals = false;
if (!"netradeunit".equals(o.getNetradeunit())) isEquals = false;
if (!"sector".equals(o.getSector())) isEquals = false;
if (!"units".equals(o.getUnits())) isEquals = false;
assertTrue( isEquals );
}
/**
* Test Contract Setter Getter
*/
public void testContractSetterGetter()
{
boolean isEquals = true;
Date date = new Date();
Contract o = new Contract();
o.setCdate(date);
o.setName("name");
o.setValue(1.0d);
if (date != o.getCdate()) isEquals = false;
if (!"name".equals(o.getName())) isEquals = false;
if (1.0d != o.getValue()) isEquals = false;
assertTrue( isEquals );
}
/**
* Test FlexiField Setter Getter
*/
public void testFlexiFieldSetterGetter()
{
boolean isEquals = true;
FlexiField o = new FlexiField();
o.setDropdowninitial("dropdowninitial");
o.setFieldlabel("fieldlabel");
o.setFieldoptions("fieldoptions");
o.setFieldtype("fieldtype");
o.setId(1L);
o.setTablename("tablename");
if (!"dropdowninitial".equals(o.getDropdowninitial())) isEquals = false;
if (!"fieldlabel".equals(o.getFieldlabel())) isEquals = false;
if (!"fieldoptions".equals(o.getFieldoptions())) isEquals = false;
if (!"fieldtype".equals(o.getFieldtype())) isEquals = false;
if (1.0d != o.getId()) isEquals = false;
if (!"tablename".equals(o.getTablename())) isEquals = false;
assertTrue( isEquals );
}
/**
* Test PeerPackage Setter Getter
*/
public void testPeerPackageSetterGetter()
{
boolean isEquals = true;
Date date = new Date();
PeerPackage o = new PeerPackage();
o.setLastchecked(date);
o.setPackagename("packagename");
o.setPeername("peername");
o.setVersion("version");
if (date != o.getLastchecked()) isEquals = false;
if (!"packagename".equals(o.getPackagename())) isEquals = false;
if (!"peername".equals(o.getPeername())) isEquals = false;
if (!"version".equals(o.getVersion())) isEquals = false;
assertTrue( isEquals );
}
/**
* Test SchedulerTrigger Setter Getter
*/
public void testSchedulerTriggerSetterGetter()
{
boolean isEquals = true;
SchedulerTrigger o = new SchedulerTrigger();
o.setExp_day("exp_day");
o.setExp_hour("exp_hour");
o.setExp_minute("exp_minute");
o.setExp_month("exp_month");
o.setExp_second("exp_second");
o.setExp_week("exp_week");
o.setInject_code("inject_code");
if (!"exp_day".equals(o.getExp_day())) isEquals = false;
if (!"exp_hour".equals(o.getExp_hour())) isEquals = false;
if (!"exp_minute".equals(o.getExp_minute())) isEquals = false;
if (!"exp_month".equals(o.getExp_month())) isEquals = false;
if (!"exp_second".equals(o.getExp_second())) isEquals = false;
if (!"exp_week".equals(o.getExp_week())) isEquals = false;
if (!"inject_code".equals(o.getInject_code())) isEquals = false;
assertTrue( isEquals );
}
/**
* Test Strategy Setter Getter
*/
public void testStrategySetterGetter()
{
boolean isEquals = true;
Strategy o = new Strategy();
o.setSvalue("svalue");
if (!"svalue".equals(o.getSvalue())) isEquals = false;
assertTrue( isEquals );
}
/**
* Test ValueObject Setter Getter
*/
public void testValueObjectSetterGetter()
{
boolean isEquals = true;
ValueObject o = new ValueObject();
o.setKey("key");
o.setValue("value");
if (!"key".equals(o.getKey())) isEquals = false;
if (!"value".equals(o.getValue())) isEquals = false;
assertTrue( isEquals );
}
}

29
lib-fileutils/pom.xml

@ -0,0 +1,29 @@
<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>
<parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib</artifactId>
<version>${revision}</version>
</parent>
<groupId>com.fourelementscapital</groupId>
<artifactId>lib-fileutils</artifactId>
<packaging>jar</packaging>
<name>lib-fileutils</name>
<description>Common / general utilities</description>
<url>http://www.fourelementscapital.com</url>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
</dependencies>
</project>

138
lib-fileutils/src/main/java/com/fourelementscapital/fileutils/BeanUtil.java

@ -0,0 +1,138 @@
/******************************************************************************
*
* Copyright: Intellectual Property of Four Elements Capital Pte Ltd, Singapore.
* All rights reserved.
*
******************************************************************************/
package com.fourelementscapital.fileutils;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
/**
* Utility class to convert bean to properties and vice versa.
*/
public class BeanUtil {
/**
* Private constructor
*/
private BeanUtil(){
}
/**
* Converts a JavaBean to a collection of properties
* @param bean The JavaBean to convert
* @return A map of properties
*/
public static Map<String, Object> convertBeanToProperties(Object bean)
throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
Map<String, Object> properties = new HashMap<String, Object>();
BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(), Object.class);
for (PropertyDescriptor p : beanInfo.getPropertyDescriptors()) {
String name = p.getName();
Method reader = p.getReadMethod();
if (reader != null) {
Object value = reader.invoke(bean);
properties.put(name, value);
}
}
return properties;
}
/**
* Applies a collection of properties to a JavaBean.
* @param properties A map of the properties to set on the JavaBean
* @param bean The JavaBean to set the properties on
*/
public static void convertPropertiesToBean(Map<String, Object> properties, Object bean)
throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(), Object.class);
for (PropertyDescriptor p : beanInfo.getPropertyDescriptors()) {
String name = p.getName();
Object value = properties.get(name);
Method reader = p.getReadMethod();
Method writer = p.getWriteMethod();
// we only care about "complete" properties
if (reader != null && writer != null) {
if (value != null) {
Class<?> propertyType = writer.getParameterTypes()[0];
Class<?> valueType = value.getClass();
if (!propertyType.isAssignableFrom(valueType)) {
// convert string input values to property type
try {
if (valueType == String.class) {
value = ConvertUtils.convert((String) value, propertyType);
} else if (valueType == String[].class) {
value = ConvertUtils.convert((String[]) value, propertyType);
} else if (valueType == Object[].class) {
// best effort conversion
Object[] objectValues = (Object[]) value;
String[] stringValues = new String[objectValues.length];
for (int i = 0; i < objectValues.length; i++) {
stringValues[i] = objectValues[i] == null ?
null : objectValues[i].toString();
}
value = ConvertUtils.convert(stringValues, propertyType);
}
} catch (ConversionException e) {
throw new IllegalArgumentException("Conversion failed for " +
"property '" + name + "' with value '" + value + "'", e);
}
}
// We only write values that are present in the map. This allows
// defaults or previously set values in the bean to be retained.
writer.invoke(bean, value);
}
}
}
}
/**
* Compares two JavaBeans for equality by comparing their properties and the class of the beans.
* @param bean1 Bean to compare
* @param bean2 Bean to compare
* @return True if {@code bean2} has the same properties with the same values as {@code bean1} and if they share the same class.
*/
public static boolean equals(Object bean1, Object bean2)
throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
if (bean1.getClass() != bean2.getClass()) {
return false;
}
BeanInfo bean1Info =
Introspector.getBeanInfo(bean1.getClass(), Object.class);
for (PropertyDescriptor p : bean1Info.getPropertyDescriptors()) {
String name = p.getName();
Method reader = p.getReadMethod();
if (reader != null) {
Object value1 = reader.invoke(bean1);
Object value2 = reader.invoke(bean2);
if ((value1 != null && !value1.equals(value2)) ||
(value2 != null && !value2.equals(value1))) {
return false;
}
}
}
return true;
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save