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;
    }

}