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