Skip to content

Commit

Permalink
[PJ-254] modify refDataFactory to support "exchange/category/symbol"
Browse files Browse the repository at this point in the history
template structure
  • Loading branch information
shuwei.kuo committed Nov 9, 2015
1 parent a004003 commit 9f6dd63
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class RefDataFactory extends RefDataService {
private String strategyPack = "com.cyanspring.common.staticdata.strategy";
private String refDataTemplatePath;
private List<RefData> refDataTemplateList;
private Map<String, List<RefData>> refDataTemplateMap = new HashMap<String, List<RefData>>();
private Map<String, Map<String, List<RefData>>> templateMap = new HashMap<>(); // exchange/category/refdatas
private Map<String, Quote> qMap;

@SuppressWarnings("unchecked")
Expand All @@ -54,15 +54,34 @@ public void init() throws Exception {

private void buildTemplateMap(List<RefData> refDataTemplateList) {
for (RefData ref : refDataTemplateList) {
String spotName = ref.getCategory();
List<RefData> list = refDataTemplateMap.get(spotName);
if (list == null) {
list = new ArrayList<>();
refDataTemplateMap.put(spotName, list);
String symbol = ref.getSymbol();
String exchange = ref.getExchange();
if (exchange == null) {
log.warn("Template exchange is null, skip it, symbol:{}", symbol);
continue;
}
String category = ref.getCategory();
if (category == null) {
log.warn("Template category is null, skip it, symbol:{}", symbol);
continue;
}

Map<String, List<RefData>> exchangeMap = templateMap.get(exchange);
if (exchangeMap == null) {
exchangeMap = new HashMap<>();
templateMap.put(exchange, exchangeMap);
}
List<RefData> categoryList = exchangeMap.get(category);
if (categoryList == null) {
categoryList = new ArrayList<>();
exchangeMap.put(category, categoryList);
}

if (!categoryList.contains(ref)) {
log.info("build template, excahnge: " + exchange + ", category: "
+ category + ", symbol: " + symbol + ", strategy: " + ref.getStrategy());
categoryList.add(ref);
}

log.info("build template category:{},strategy:{}", spotName, ref.getStrategy());
list.add(ref);
}
}

Expand All @@ -72,12 +91,14 @@ public List<RefData> updateAll(String tradeDate) throws Exception {
List<RefData> addList = new ArrayList<>();
Calendar cal = Calendar.getInstance();
cal.setTime(getSettlementDateFormat().parse(tradeDate));
for (Entry<String, List<RefData>> entry : refDataTemplateMap.entrySet()) {
List<RefData> tmpList = entry.getValue();
for (RefData refData : tmpList) {
List<RefData> list = updateRefData(cal, refData);
if (list.size() > 0) {
addList.addAll(list);

for (Entry<String, Map<String, List<RefData>>> eMap : templateMap.entrySet()) {
for (Entry<String, List<RefData>> cateMap : eMap.getValue().entrySet()) {
for (RefData refData : cateMap.getValue()) {
List<RefData> list = updateRefData(cal, refData);
if (list.size() > 0) {
addList.addAll(list);
}
}
}
}
Expand Down Expand Up @@ -185,7 +206,7 @@ public List<RefData> update(String index, String tradeDate) throws Exception {
List<RefData> ret = new ArrayList<>();
Calendar cal = Calendar.getInstance();
cal.setTime(getSettlementDateFormat().parse(tradeDate));
List<RefData> list = refDataTemplateMap.get(index);
List<RefData> list = searchTemplate(index);
if (list != null) {
for (RefData tmp : list) {
ret.addAll(updateRefData(cal, tmp));
Expand All @@ -204,13 +225,42 @@ public List<RefData> update(String index, String tradeDate) throws Exception {

return ret;
}

public Map<String, List<RefData>> getRefDataTemplateMap() {
return refDataTemplateMap;

private List<RefData> searchTemplate(String index) {
List<RefData> list = new ArrayList<>();
Map<String, List<RefData>> exchangeMap = templateMap.get(index);
if (exchangeMap != null) {
for (Entry<String, List<RefData>> cateMap : exchangeMap.entrySet()) {
list.addAll(cateMap.getValue());
}
return list;
}

for (Entry<String, Map<String, List<RefData>>> eMap : templateMap.entrySet()) {
List<RefData> tempList = eMap.getValue().get(index);
if (tempList != null) {
list.addAll(tempList);
return list;
}
}

for (Entry<String, Map<String, List<RefData>>> eMap : templateMap.entrySet()) {
for (Entry<String, List<RefData>> cateMap : eMap.getValue().entrySet()) {
for (RefData refData : cateMap.getValue()) {
if(refData.getSymbol().equals(index)) {
list.add(refData);
return list;
}
}
}
}

log.warn("No refData template found, index: " + index);
return list;
}

public void setRefDataTemplateMap(Map<String, List<RefData>> refDataTemplateMap) {
this.refDataTemplateMap = refDataTemplateMap;
public Map<String, Map<String, List<RefData>>> getTemplateMap() {
return templateMap;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;

Expand All @@ -29,12 +30,16 @@ public class TestRefDataFactory {
public void validateRefDataTemplateMap() throws Exception {
// Only allow category INDEX to have multiple records in single template
factory.init();
Map<String, List<RefData>> lstRefDataTemplateMap = factory.getRefDataTemplateMap();
Set<String> keys = lstRefDataTemplateMap.keySet();
for (String key : keys) {
List<RefData> lstRefData = lstRefDataTemplateMap.get(key);
if (!key.equals("INDEX") && lstRefData.size() > 1) {
fail("Categoy " + key + " is not allowed to have multiple entries in template_FC");
Map<String, Map<String, List<RefData>>> refDataTemplateMap = factory.getTemplateMap();

for (Entry<String, Map<String, List<RefData>>> eMap : refDataTemplateMap.entrySet()) {
Map<String, List<RefData>> lstRefDataTemplateMap = eMap.getValue();
Set<String> keys = lstRefDataTemplateMap.keySet();
for (String key : keys) {
List<RefData> lstRefData = lstRefDataTemplateMap.get(key);
if (!key.equals("INDEX") && lstRefData.size() > 1) {
fail("Categoy " + key + " is not allowed to have multiple entries in template_FC");
}
}
}
}
Expand Down

0 comments on commit 9f6dd63

Please sign in to comment.