CollectionRuleFactory.java
package com.mycim.valueobject.edcspc.rule;
import com.mycim.valueobject.consts.EDCConst;
import com.mycim.valueobject.edcspc.DataCollectionRule;
import com.mycim.valueobject.wip.Unit;
import java.util.List;
/**
* 用于返回一个可用的采集规则
*
* @author Qiansheng.Wang
*/
public class CollectionRuleFactory {
private CollectionRuleAbstract collectionRuleAbstract;
private DataCollectionRule dataCollectionRule;
private List<Unit> unitList;
public CollectionRuleFactory(DataCollectionRule dataCollectionRule, List<Unit> unitList) {
this.dataCollectionRule = dataCollectionRule;
this.unitList = unitList;
}
public CollectionRule getAndCheckAvailableRule() {
for (EDCConst.CollectionRuleEnum ruleName : EDCConst.CollectionRuleEnum.values()) {
if (ruleName.toString().equals(dataCollectionRule.getCollectionRule())) {
matchRule(ruleName);
break;
}
}
return getAvailableDataCollectionRule();
}
private void matchRule(EDCConst.CollectionRuleEnum ruleName) {
switch (ruleName) {
case MANUAL:
collectionRuleAbstract = new ManualRule(dataCollectionRule, unitList);
break;
case SLOT:
collectionRuleAbstract = new SLotRule(dataCollectionRule, unitList);
break;
case WAFER:
collectionRuleAbstract = new WaferRule(dataCollectionRule, unitList);
break;
case SPECIAL:
collectionRuleAbstract = new SpecialRule(dataCollectionRule, unitList);
break;
case INVERSE:
collectionRuleAbstract = new InverseRule(dataCollectionRule, unitList);
break;
case OCAP:
collectionRuleAbstract = new OCAPRule(dataCollectionRule, unitList);
break;
default:
break;
}
}
private CollectionRule getAvailableDataCollectionRule() {
return isAvailableDataCollectionRule() ? collectionRuleAbstract : null;
}
private Boolean isAvailableDataCollectionRule() {
return collectionRuleAbstract != null && collectionRuleAbstract.isAvailableDataCollectionRule();
}
public CollectionRule getDataCollectionRule() {
for (EDCConst.CollectionRuleEnum ruleName : EDCConst.CollectionRuleEnum.values()) {
if (ruleName.toString().equals(dataCollectionRule.getCollectionRule())) {
matchRule(ruleName);
break;
}
}
return collectionRuleAbstract;
}
}