/**
* Alipay.com Inc.
* Copyright (c) 2004-2012 All Rights Reserved.
*/
package com.alipay.zdal.rule.ruleengine.entities.abstractentities;
import java.util.Collections;
import java.util.List;
import com.alipay.zdal.rule.bean.RuleChainImp;
import com.alipay.zdal.rule.ruleengine.entities.abstractentities.ListSharedElement.DEFAULT_LIST_RESULT_STRAGETY;
import com.alipay.zdal.rule.ruleengine.entities.convientobjectmaker.DefaultTableMapProvider;
import com.alipay.zdal.rule.ruleengine.entities.convientobjectmaker.TableMapProvider;
import com.alipay.zdal.rule.ruleengine.rule.ListAbstractResultRule;
/**
* ����+��ɢһЩ���Ե�ָ�����ӽڵ���
*
* ������һЩһ�Զ�ķַ��������õ���������й���
*
* û���ر�����壬ֻ��һ����һ������ij��ᷢ����logictable��database�����һЩ������Ҫ���ݸ������ӽڵ㡣
*
* �����������ݶ����Էŵ�����������С�
*
*
*
*
*/
public class OneToManyEntry {
/**
* ���ݸ����ɱ����ı�ݷ�����
*/
private String logicTableName;
/**
* ���ַַ��ı����
*/
protected RuleChain transmitedtableRuleChain;
/**
* �DZ���������һ�ֱ�����ʽ
*/
protected List<ListAbstractResultRule> tableRuleList;
/**
* ������������database�ڵ�ʹ��
*/
private TableMapProvider tableMapProvider = new DefaultTableMapProvider();
DEFAULT_LIST_RESULT_STRAGETY defaultListResultStragety;
private boolean isInited = false;
// /**
// * ����һЩ��Ҫ��ɢ�����ݴӸ����䵽�ӽڵ�
// * ���������init����֮ǰ������
// */
// public void transmit() {
// for (SharedElement sharedElement : subSharedElement.values()) {
// if (isCurrentSubSharedElementGlovalEntryTransmitter(sharedElement)) {
//
// OneToManyEntry transmitter = upcastSubEntry(sharedElement);
// //�����
// transmitter.setTableRuleChain(transmitedtableRuleChain);
// // ���ڱ�ݵĹ����
// transmitter.setLogicTableName(logicTableName);
// // ��table map������������ȥ
// transmitter.setTableMapProvider(tableMapProvider);
// }
// }
// }
//
// private OneToManyEntry upcastSubEntry(SharedElement sharedElement) {
// OneToManyEntry transmitter = (OneToManyEntry) sharedElement;
// return transmitter;
// }
//
// private boolean isCurrentSubSharedElementGlovalEntryTransmitter(
// SharedElement sharedElement) {
// return sharedElement instanceof OneToManyEntry;
// }
public List<ListAbstractResultRule> getTableRule() {
if (transmitedtableRuleChain != null) {
return transmitedtableRuleChain.getListResultRule();
} else {
return Collections.emptyList();
}
}
/**
* ���������Ĭ�ϵ�����£�Ŀ����transmitedtableRuleChain.
* ����database�㸲���������������Ŀ��ָ��ÿһ��database��tableRule.
*
* �������ᱻtransmit�������á�
*
* @param tableRule
*/
public void setTableRuleChain(RuleChain ruleChain) {
this.transmitedtableRuleChain = ruleChain;
}
public RuleChain getTableRuleChain() {
return transmitedtableRuleChain;
}
public void setTableRule(List<ListAbstractResultRule> tableRule) {
tableRuleList = tableRule;
}
public void init() {
if (isInited) {
return;
}
isInited = true;
if (tableRuleList != null) {
RuleChainImp ruleChainImp = getRuleChain(tableRuleList);
if (transmitedtableRuleChain == null) {
transmitedtableRuleChain = ruleChainImp;
} else {
throw new IllegalArgumentException("ruleChain�Ѿ��������ˣ�����Ȼ����ʹ��init�����г�ʼ��");
}
}
if (transmitedtableRuleChain != null) {
transmitedtableRuleChain.init();
}
}
public static RuleChainImp getRuleChain(List<ListAbstractResultRule> tableRuleList) {
RuleChainImp ruleChainImp = new RuleChainImp();
ruleChainImp.setDatabaseRuleChain(false);
ruleChainImp.setListResultRule(tableRuleList);
return ruleChainImp;
}
public TableMapProvider getTableMapProvider() {
return tableMapProvider;
}
/**
* ��ΪtableMapProvider��Ҫ���ݸ�ÿһ��database������������ǰdatabase�����Ѿ�����tableMapProvider
* ��ô�Ͳ���Ҫ�ٽ��ⲿ��tableMapProviderָ��������
*
* @param tableMapProvider
*/
public void setTableMapProvider(TableMapProvider tableMapProvider) {
// ��������tableProvider����
// --���ҵ�ǰ�ڵ��tableMapProviderΪ�ջ�ΪĬ�ϱ����(Ҳ����Ĭ�ϵ���logicTable��Ϊ�����Ļ�)
// --&& (this.tableMapProvider == null || this.tableMapProvider
// instanceof DefaultTableMapProvider)
if (tableMapProvider != null && (!(tableMapProvider instanceof DefaultTableMapProvider))) {
this.tableMapProvider = tableMapProvider;
}
}
public String getLogicTableName() {
return logicTableName;
}
public void setLogicTableName(String logicTablename) {
this.logicTableName = logicTablename;
}
public DEFAULT_LIST_RESULT_STRAGETY getDefaultListResultStragety() {
return defaultListResultStragety;
}
public void setDefaultListResultStragety(DEFAULT_LIST_RESULT_STRAGETY defaultListResultStragety) {
this.defaultListResultStragety = defaultListResultStragety;
}
}