package com.taobao.yugong.applier; import java.util.List; import com.taobao.yugong.common.model.YuGongContext; import com.taobao.yugong.common.model.record.IncrementRecord; import com.taobao.yugong.common.model.record.Record; import com.taobao.yugong.common.utils.YuGongUtils; import com.taobao.yugong.exception.YuGongException; /** * 全量+增量的applier实现 * * @author agapple 2013-9-26 下午4:43:20 */ public class AllRecordApplier extends AbstractRecordApplier { private RecordApplier fullApplier; private RecordApplier incApplier; @SuppressWarnings("unused") private YuGongContext context; public AllRecordApplier(YuGongContext context){ this.context = context; } public void start() { super.start(); if (!fullApplier.isStart()) { fullApplier.start(); } // inc启动基本不占资源,一起启动了,省的每次判断 if (!incApplier.isStart()) { incApplier.start(); } } public void stop() { super.stop(); if (fullApplier.isStart()) { fullApplier.stop(); } if (incApplier.isStart()) { incApplier.stop(); } } public void apply(List<Record> records) throws YuGongException { if (YuGongUtils.isEmpty(records)) { return; } if (!isInc(records)) { fullApplier.apply(records); } else { incApplier.apply(records); } } /** * 不会出现数据一半是全量,一半是增量的数据,只有一种类型的数据 */ private boolean isInc(List<Record> records) { return records.get(0) instanceof IncrementRecord; } public void setFullApplier(RecordApplier fullApplier) { this.fullApplier = fullApplier; } public void setIncApplier(RecordApplier incApplier) { this.incApplier = incApplier; } }