Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

汎用Validator

パンくず

Java
JUnit
汎用Validator

概要

汎用Validator

内容

汎用的なValidatorを作成します。
要件は以下とします。

・1つのValidatorの中に複数のエラー判定処理が存在する
それぞれのエラー判定のどれか一つのエラーが成立した場合に
Validator全体としてはエラーとする。

・各エラー判定処理は前提条件が存在する
それぞれのエラー判定は前提条件が存在し、前提条件が成立しない場合は
無条件で正常とする。
※前提条件が存在しない場合もあり

・エラーごとにエラーコードが存在する
各エラーはそれぞれ対応するエラーコードがある。

上記のような要件のValidatorを作成する機会が多く、
一つのValidator内で大量のチェックを行う場合は
このサンプルのような形式が役に立ちます。

クラス構成

gr.java_conf.tb.tbpg_util.validator
│ ValidationResult.java : Validatorの結果保存用クラス

├─checker
│ │ BaseIsSameValueChecker.java : 同値チェック用基底クラス
│ │ BigDecimalIsSameValueChecker.java : BigDecimal同値チェック用クラス
│ │ IntegerIsSameValueChecker.java : Integer同値チェック用クラス
│ │ StringIsSameValueChecker.java : String同値チェック用クラス
│ │
│ └─intf
│ ValidationCheckerIntf.java : 個別チェック用インターフェース

├─manager
│ ValidationManager.java : Validation管理用インターフェース

├─sample
│ ├─data
│ │ SampleData.java : 動作確認用サンプルデータ
│ │
│ ├─target
│ │ ATargetChecker.java : サンプルターゲットチェッカー
│ │
│ └─validator
│ │ SampleValidator.java : サンプルValidator
│ │ SampleValidatorTest.java : サンプルValidatorテストクラス
│ │
│ └─intf
│ SampleValidatorIntf.java : サンプルValidatorのインターフェース

└─target
│ NullTargetChecker.java : チェックなし用ターゲットチェッカー

└─intf
TargetCheckerIntf.java : ターゲットチェッカー用インターフェース

シーケンス図


サンプルケース

gr.java_conf.tb.tbpg_util.validatorパッケージ

ValidationResult.java

package gr.java_conf.tb.tbpg_util.validator;

/**
 * Validation結果保存用クラス.
 *
 * @author tbpg
 *
 */
public class ValidationResult {
  /** エラーコード */
  private String errorCode;

  /**
   * デフォルトコンストラクタ.
   */
  public ValidationResult() {
    super();
  }

  public boolean hasError() {
    return this.errorCode != null;
  }

  /**
   * errorCodeを取得する。
   *
   * @return errorCode
   */
  public String getErrorCode() {
    return errorCode;
  }

  /**
   * errorCodeを設定する.
   *
   * @param errorCode セットする errorCode
   */
  public void setErrorCode(String errorCode) {
    this.errorCode = errorCode;
  }
}
gr.java_conf.tb.tbpg_util.validator.checkerパッケージ

BaseIsSameValueChecker

package gr.java_conf.tb.tbpg_util.validator.checker;

public class BaseIsSameValueChecker<V> {
  V value;
  V compare;

  public BaseIsSameValueChecker(V value, V compare) {
    this.value = value;
    this.compare = compare;
  }
}

BigDecimalIsSameValueChecker

package gr.java_conf.tb.tbpg_util.validator.checker;

import gr.java_conf.tb.tbpg_util.validator.checker.intf.ValidationCheckerIntf;

import java.math.BigDecimal;

/**
 * BigDecimalが同じ値であることを確認するチェッカー。
 *
 */
public class BigDecimalIsSameValueChecker extends BaseIsSameValueChecker<BigDecimal> implements ValidationCheckerIntf {
  /**
   * @param value
   * @param compare
   */
  public BigDecimalIsSameValueChecker(BigDecimal value, BigDecimal compare) {
    super(value, compare);
    this.value = value;
    this.compare = compare;
  }

  @Override
  public boolean isValid() {
    if (value == null && compare != null) {
      return false;
    }
    if (value != null && compare == null) {
      return false;
    }
    if (value == null && compare == null) {
      return true;
    }
    return value.equals(compare);
  }
}

IntegerIsSameValueChecker

package gr.java_conf.tb.tbpg_util.validator.checker;

import gr.java_conf.tb.tbpg_util.validator.checker.intf.ValidationCheckerIntf;

/**
 * Integerが同じ値であることを確認するチェッカー。
 *
 */
public class IntegerIsSameValueChecker extends BaseIsSameValueChecker<Integer> implements ValidationCheckerIntf {
  /**
   * @param value
   * @param compare
   */
  public IntegerIsSameValueChecker(Integer value, Integer compare) {
    super(value, compare);
    this.value = value;
    this.compare = compare;
  }

  @Override
  public boolean isValid() {
    if (value == null && compare != null) {
      return false;
    }
    if (value != null && compare == null) {
      return false;
    }
    if (value == null && compare == null) {
      return true;
    }
    return value.equals(compare);
  }
}

StringIsSameValueChecker

package gr.java_conf.tb.tbpg_util.validator.checker;

import gr.java_conf.tb.tbpg_util.validator.checker.intf.ValidationCheckerIntf;

/**
 * Stringが同じ値であることを確認するチェッカー。
 *
 */
public class StringIsSameValueChecker extends BaseIsSameValueChecker<String> implements ValidationCheckerIntf {
  /**
   * @param value
   * @param compare
   */
  public StringIsSameValueChecker(String value, String compare) {
    super(value, compare);
    this.value = value;
    this.compare = compare;
  }

  @Override
  public boolean isValid() {
    if (value == null && compare != null) {
      return false;
    }
    if (value != null && compare == null) {
      return false;
    }
    if (value == null && compare == null) {
      return true;
    }
    return value.equals(compare);
  }
}
gr.java_conf.tb.tbpg_util.validator.checker.intfパッケージ

ValidationCheckerIntf

package gr.java_conf.tb.tbpg_util.validator.checker.intf;

/**
 * Validation内部の個別Validatoion判定用インターフェース。
 *
 * <pre>
 * 複数のValidationからなるValidatorの内部にある個別の
 * Validationを表すインターフェース
 * </pre>
 *
 */
public interface ValidationCheckerIntf {
  /**
   * 個別Validationが正当な値かどうか確認する。
   *
   * @return 正当な値ならtrue,不当な値ならfalse
   */
  boolean isValid();
}
gr.java_conf.tb.tbpg_util.validator.managerパッケージ

ValidationManager

package gr.java_conf.tb.tbpg_util.validator.manager;

import gr.java_conf.tb.tbpg_util.validator.checker.intf.ValidationCheckerIntf;
import gr.java_conf.tb.tbpg_util.validator.target.NullTargetChecker;
import gr.java_conf.tb.tbpg_util.validator.target.intf.TargetCheckerIntf;

/**
 * Validationの個別部品の事前条件,チェック内容,エラーコードを管理するクラス.
 *
 */
public class ValidationManager {
  /** Validationのターゲット判定(デフォルトはチェックなし). */
  TargetCheckerIntf targetChecker = new NullTargetChecker();
  /** Validation内容. */
  ValidationCheckerIntf validationChecker;
  /** Validationエラーコード. */
  String errorCode;

  public ValidationManager targetChecker(TargetCheckerIntf targetChecker) {
    this.targetChecker = targetChecker;
    return this;
  }

  public ValidationManager validationChecker(ValidationCheckerIntf validationChecker) {
    this.validationChecker = validationChecker;
    return this;
  }

  public ValidationManager errorCode(String errorCode) {
    this.errorCode = errorCode;
    return this;
  }

  public TargetCheckerIntf getTargetChecker() {
    return targetChecker;
  }

  public ValidationCheckerIntf getValidationChecker() {
    return validationChecker;
  }

  public String getErrorCode() {
    return errorCode;
  }

}
gr.java_conf.tb.tbpg_util.validator.sample.dataパッケージ

SampleData

package gr.java_conf.tb.tbpg_util.validator.sample.data;

import java.math.BigDecimal;

public class SampleData {
  String a;
  String b;
  String c;
  String d;
  String e;
  Integer f;
  Integer g;
  Integer h;
  Integer i;
  Integer j;
  BigDecimal k;
  BigDecimal l;
  BigDecimal m;
  BigDecimal n;
  BigDecimal o;

  public String getA() {
    return a;
  }

  public void setA(String a) {
    this.a = a;
  }

  public String getB() {
    return b;
  }

  public void setB(String b) {
    this.b = b;
  }

  public String getC() {
    return c;
  }

  public void setC(String c) {
    this.c = c;
  }

  public String getD() {
    return d;
  }

  public void setD(String d) {
    this.d = d;
  }

  public String getE() {
    return e;
  }

  public void setE(String e) {
    this.e = e;
  }

  public Integer getF() {
    return f;
  }

  public void setF(Integer f) {
    this.f = f;
  }

  public Integer getG() {
    return g;
  }

  public void setG(Integer g) {
    this.g = g;
  }

  public Integer getH() {
    return h;
  }

  public void setH(Integer h) {
    this.h = h;
  }

  public Integer getI() {
    return i;
  }

  public void setI(Integer i) {
    this.i = i;
  }

  public Integer getJ() {
    return j;
  }

  public void setJ(Integer j) {
    this.j = j;
  }

  public BigDecimal getK() {
    return k;
  }

  public void setK(BigDecimal k) {
    this.k = k;
  }

  public BigDecimal getL() {
    return l;
  }

  public void setL(BigDecimal l) {
    this.l = l;
  }

  public BigDecimal getM() {
    return m;
  }

  public void setM(BigDecimal m) {
    this.m = m;
  }

  public BigDecimal getN() {
    return n;
  }

  public void setN(BigDecimal n) {
    this.n = n;
  }

  public BigDecimal getO() {
    return o;
  }

  public void setO(BigDecimal o) {
    this.o = o;
  }
}
gr.java_conf.tb.tbpg_util.validator.sample.targetパッケージ

ATargetChecker

package gr.java_conf.tb.tbpg_util.validator.sample.target;

import gr.java_conf.tb.tbpg_util.validator.target.intf.TargetCheckerIntf;

/**
 * Aの事前条件用のターゲットチェッカー。
 *
 *
 */
public class ATargetChecker implements TargetCheckerIntf {

  String b;

  public ATargetChecker(String b) {
    this.b = b;
  }

  /**
   * bがnullではない場合のみチェックする
   */
  @Override
  public boolean isTarget() {
    return (b != null);
  }

}
gr.java_conf.tb.tbpg_util.validator.sample.validatorパッケージ

SampleValidator

package gr.java_conf.tb.tbpg_util.validator.sample.validator;

import gr.java_conf.tb.tbpg_util.validator.ValidationResult;
import gr.java_conf.tb.tbpg_util.validator.checker.BigDecimalIsSameValueChecker;
import gr.java_conf.tb.tbpg_util.validator.checker.IntegerIsSameValueChecker;
import gr.java_conf.tb.tbpg_util.validator.checker.StringIsSameValueChecker;
import gr.java_conf.tb.tbpg_util.validator.manager.ValidationManager;
import gr.java_conf.tb.tbpg_util.validator.sample.data.SampleData;
import gr.java_conf.tb.tbpg_util.validator.sample.target.ATargetChecker;
import gr.java_conf.tb.tbpg_util.validator.sample.validator.intf.SampleValidatorIntf;

import java.util.ArrayList;
import java.util.List;

public class SampleValidator implements SampleValidatorIntf {
  private SampleData sampleData;
  private SampleData compare;

  public SampleValidator(SampleData sampleData, SampleData compare) {
    this.sampleData = sampleData;
    this.compare = compare;
  }

  @Override
  public ValidationResult validate(ValidationResult result) {
    List<ValidationManager> managers = getValidationManagers();

    for (int i = 0; i < managers.size(); i++) {
      // 前提
      if (managers.get(i).getTargetChecker().isTarget()) {
        // 比較
        if (!managers.get(i).getValidationChecker().isValid()) {
          result.setErrorCode(managers.get(i).getErrorCode());
          return result;
        }
      }
    }
    return result;
  }

  private List<ValidationManager> getValidationManagers() {
    List<ValidationManager> managers = new ArrayList<ValidationManager>();
    managers.add(new ValidationManager().targetChecker(new ATargetChecker(sampleData.getB()))
        .validationChecker(new StringIsSameValueChecker(sampleData.getA(), compare.getA())).errorCode("error A"));
    managers.add(new ValidationManager().validationChecker(
        new StringIsSameValueChecker(sampleData.getB(), compare.getB())).errorCode("error B"));
    managers.add(new ValidationManager().validationChecker(
        new StringIsSameValueChecker(sampleData.getC(), compare.getC())).errorCode("error C"));
    managers.add(new ValidationManager().validationChecker(
        new StringIsSameValueChecker(sampleData.getD(), compare.getD())).errorCode("error D"));
    managers.add(new ValidationManager().validationChecker(
        new StringIsSameValueChecker(sampleData.getE(), compare.getE())).errorCode("error E"));
    managers.add(new ValidationManager().validationChecker(
        new IntegerIsSameValueChecker(sampleData.getF(), compare.getF())).errorCode("error F"));
    managers.add(new ValidationManager().validationChecker(
        new IntegerIsSameValueChecker(sampleData.getG(), compare.getG())).errorCode("error G"));
    managers.add(new ValidationManager().validationChecker(
        new IntegerIsSameValueChecker(sampleData.getH(), compare.getH())).errorCode("error H"));
    managers.add(new ValidationManager().validationChecker(
        new IntegerIsSameValueChecker(sampleData.getI(), compare.getI())).errorCode("error I"));
    managers.add(new ValidationManager().validationChecker(
        new IntegerIsSameValueChecker(sampleData.getJ(), compare.getJ())).errorCode("error J"));
    managers.add(new ValidationManager().validationChecker(
        new BigDecimalIsSameValueChecker(sampleData.getK(), compare.getK())).errorCode("error K"));
    managers.add(new ValidationManager().validationChecker(
        new BigDecimalIsSameValueChecker(sampleData.getL(), compare.getL())).errorCode("error L"));
    managers.add(new ValidationManager().validationChecker(
        new BigDecimalIsSameValueChecker(sampleData.getM(), compare.getM())).errorCode("error M"));
    managers.add(new ValidationManager().validationChecker(
        new BigDecimalIsSameValueChecker(sampleData.getN(), compare.getN())).errorCode("error N"));
    managers.add(new ValidationManager().validationChecker(
        new BigDecimalIsSameValueChecker(sampleData.getO(), compare.getO())).errorCode("error O"));
    return managers;
  }
}
gr.java_conf.tb.tbpg_util.validator.sample.validator.intfパッケージ

SampleValidatorIntf

package gr.java_conf.tb.tbpg_util.validator.sample.validator.intf;

import gr.java_conf.tb.tbpg_util.validator.ValidationResult;

public interface SampleValidatorIntf {
  ValidationResult validate(ValidationResult result);
}
gr.java_conf.tb.tbpg_util.validator.targetパッケージ

NullTargetChecker

package gr.java_conf.tb.tbpg_util.validator.target;

import gr.java_conf.tb.tbpg_util.validator.target.intf.TargetCheckerIntf;

/**
 * 事前条件なしの場合用のターゲットチェッカー。
 *
 *
 */
public class NullTargetChecker implements TargetCheckerIntf {

  @Override
  public boolean isTarget() {
    return true;
  }

}
gr.java_conf.tb.tbpg_util.validator.target.intfパッケージ
package gr.java_conf.tb.tbpg_util.validator.target.intf;

/**
 * Validationの事前条件判定用ターゲットチェッカー。
 *
 * <pre>
 * 処理対象の場合にtrue,処理対象外の場合はfalseを返却するisTargetメソッドを持つ。
 * </pre>
 *
 */
public interface TargetCheckerIntf {
  boolean isTarget();
}
テストコード

SampleValidatorTest

package gr.java_conf.tb.tbpg_util.validator.sample.validator;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import gr.java_conf.tb.tbpg_util.common.CommonUtil;
import gr.java_conf.tb.tbpg_util.validator.ValidationResult;
import gr.java_conf.tb.tbpg_util.validator.sample.data.SampleData;

import java.math.BigDecimal;

import org.junit.experimental.runners.Enclosed;
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;

@RunWith(Enclosed.class)
public class SampleValidatorTest {

  @RunWith(Theories.class)
  public static class Validate {

    /**
     * SampleValidatorTestのFixture
     *
     * @author sample
     *
     */
    public static class Fixture {
      /** caseNo. */
      int caseNo;
      /** a. */
      String a;
      /** b. */
      String b;
      /** c. */
      String c;
      /** d. */
      String d;
      /** e. */
      String e;
      /** f. */
      Integer f;
      /** g. */
      Integer g;
      /** h. */
      Integer h;
      /** i. */
      Integer i;
      /** j. */
      Integer j;
      /** k. */
      BigDecimal k;
      /** l. */
      BigDecimal l;
      /** m. */
      BigDecimal m;
      /** n. */
      BigDecimal n;
      /** o. */
      BigDecimal o;
      /** compare_a */
      String compare_a;
      /** compare_b */
      String compare_b;
      /** compare_c */
      String compare_c;
      /** compare_d */
      String compare_d;
      /** compare_e */
      String compare_e;
      /** compare_f */
      Integer compare_f;
      /** compare_g */
      Integer compare_g;
      /** compare_h */
      Integer compare_h;
      /** compare_i */
      Integer compare_i;
      /** compare_j */
      Integer compare_j;
      /** compare_k */
      BigDecimal compare_k;
      /** compare_l */
      BigDecimal compare_l;
      /** compare_m */
      BigDecimal compare_m;
      /** compare_n */
      BigDecimal compare_n;
      /** compare_o */
      BigDecimal compare_o;
      boolean hasError;
      String errorCode;

      public Fixture caseNo(int caseNo) {
        this.caseNo = caseNo;
        return this;
      }

      public Fixture a(String a) {
        this.a = a;
        return this;
      }

      public Fixture b(String b) {
        this.b = b;
        return this;
      }

      public Fixture c(String c) {
        this.c = c;
        return this;
      }

      public Fixture d(String d) {
        this.d = d;
        return this;
      }

      public Fixture e(String e) {
        this.e = e;
        return this;
      }

      public Fixture f(Integer f) {
        this.f = f;
        return this;
      }

      public Fixture g(Integer g) {
        this.g = g;
        return this;
      }

      public Fixture h(Integer h) {
        this.h = h;
        return this;
      }

      public Fixture i(Integer i) {
        this.i = i;
        return this;
      }

      public Fixture j(Integer j) {
        this.j = j;
        return this;
      }

      public Fixture k(BigDecimal k) {
        this.k = k;
        return this;
      }

      public Fixture l(BigDecimal l) {
        this.l = l;
        return this;
      }

      public Fixture m(BigDecimal m) {
        this.m = m;
        return this;
      }

      public Fixture n(BigDecimal n) {
        this.n = n;
        return this;
      }

      public Fixture o(BigDecimal o) {
        this.o = o;
        return this;
      }

      public Fixture compare_a(String compare_a) {
        this.compare_a = compare_a;
        return this;
      }

      public Fixture compare_b(String compare_b) {
        this.compare_b = compare_b;
        return this;
      }

      public Fixture compare_c(String compare_c) {
        this.compare_c = compare_c;
        return this;
      }

      public Fixture compare_d(String compare_d) {
        this.compare_d = compare_d;
        return this;
      }

      public Fixture compare_e(String compare_e) {
        this.compare_e = compare_e;
        return this;
      }

      public Fixture compare_f(Integer compare_f) {
        this.compare_f = compare_f;
        return this;
      }

      public Fixture compare_g(Integer compare_g) {
        this.compare_g = compare_g;
        return this;
      }

      public Fixture compare_h(Integer compare_h) {
        this.compare_h = compare_h;
        return this;
      }

      public Fixture compare_i(Integer compare_i) {
        this.compare_i = compare_i;
        return this;
      }

      public Fixture compare_j(Integer compare_j) {
        this.compare_j = compare_j;
        return this;
      }

      public Fixture compare_k(BigDecimal compare_k) {
        this.compare_k = compare_k;
        return this;
      }

      public Fixture compare_l(BigDecimal compare_l) {
        this.compare_l = compare_l;
        return this;
      }

      public Fixture compare_m(BigDecimal compare_m) {
        this.compare_m = compare_m;
        return this;
      }

      public Fixture compare_n(BigDecimal compare_n) {
        this.compare_n = compare_n;
        return this;
      }

      public Fixture compare_o(BigDecimal compare_o) {
        this.compare_o = compare_o;
        return this;
      }

      public Fixture errorCode(String errorCode) {
        this.errorCode = errorCode;
        return this;
      }

      public Fixture hasError(boolean hasError) {
        this.hasError = hasError;
        return this;
      }

      public String toString() {
        // Fixtureの内容を一括出力
        return CommonUtil.getAllFiledInfo(this);
      }
    }

    @DataPoints
    public static Fixture[] getFixture() {
      Fixture[] fixture = {

          // 正常系
          new Fixture().caseNo(1).a("a").b("b").c("c").d("d").e("e").f(1).g(2).h(3).i(4).j(5).k(new BigDecimal(6))
              .l(new BigDecimal(7)).m(new BigDecimal(8)).n(new BigDecimal(9)).o(new BigDecimal(10)).compare_a("a")
              .compare_b("b").compare_c("c").compare_d("d").compare_e("e").compare_f(1).compare_g(2).compare_h(3)
              .compare_i(4).compare_j(5).compare_k(new BigDecimal(6)).compare_l(new BigDecimal(7))
              .compare_m(new BigDecimal(8)).compare_n(new BigDecimal(9)).compare_o(new BigDecimal(10)).hasError(false)
              .errorCode(""),
          // 異常系(Aが異なる)
          new Fixture().caseNo(2).a("b").b("b").c("c").d("d").e("e").f(1).g(2).h(3).i(4).j(5).k(new BigDecimal(6))
              .l(new BigDecimal(7)).m(new BigDecimal(8)).n(new BigDecimal(9)).o(new BigDecimal(10)).compare_a("a")
              .compare_b("b").compare_c("c").compare_d("d").compare_e("e").compare_f(1).compare_g(2).compare_h(3)
              .compare_i(4).compare_j(5).compare_k(new BigDecimal(6)).compare_l(new BigDecimal(7))
              .compare_m(new BigDecimal(8)).compare_n(new BigDecimal(9)).compare_o(new BigDecimal(10)).hasError(true)
              .errorCode("error A"),
          // 正常系(Aが異なるが前提となるBがnull)
          new Fixture().caseNo(3).a("b").b(null).c("c").d("d").e("e").f(1).g(2).h(3).i(4).j(5).k(new BigDecimal(6))
              .l(new BigDecimal(7)).m(new BigDecimal(8)).n(new BigDecimal(9)).o(new BigDecimal(10)).compare_a("a")
              .compare_b(null).compare_c("c").compare_d("d").compare_e("e").compare_f(1).compare_g(2).compare_h(3)
              .compare_i(4).compare_j(5).compare_k(new BigDecimal(6)).compare_l(new BigDecimal(7))
              .compare_m(new BigDecimal(8)).compare_n(new BigDecimal(9)).compare_o(new BigDecimal(10)).hasError(false)
              .errorCode(""),

      };
      return fixture;
    };

    @Theory
    public void testValidate(Fixture fixture) {
      /*--- 初期化 ---*/
      SampleData sampleData = getSampleData(fixture);
      SampleData compare = getCompare(fixture);
      SampleValidator validator = new SampleValidator(sampleData, compare);
      ValidationResult result = new ValidationResult();

      /*--- 実行 ---*/
      result = validator.validate(result);

      /*--- 検証 ---*/
      assertThat(fixture.toString(), result.hasError(), is(fixture.hasError));
      if (fixture.hasError) {
        assertThat(fixture.toString(), result.getErrorCode(), is(fixture.errorCode));
      }
    }

    private SampleData getSampleData(Fixture fixture) {
      SampleData sampleData = new SampleData();
      sampleData.setA(fixture.a);
      sampleData.setB(fixture.b);
      sampleData.setC(fixture.c);
      sampleData.setD(fixture.d);
      sampleData.setE(fixture.e);
      sampleData.setF(fixture.f);
      sampleData.setG(fixture.g);
      sampleData.setH(fixture.h);
      sampleData.setI(fixture.i);
      sampleData.setJ(fixture.j);
      sampleData.setK(fixture.k);
      sampleData.setL(fixture.l);
      sampleData.setM(fixture.m);
      sampleData.setN(fixture.n);
      sampleData.setO(fixture.o);
      return sampleData;
    }

    private SampleData getCompare(Fixture fixture) {
      SampleData sampleData = new SampleData();
      sampleData.setA(fixture.compare_a);
      sampleData.setB(fixture.compare_b);
      sampleData.setC(fixture.compare_c);
      sampleData.setD(fixture.compare_d);
      sampleData.setE(fixture.compare_e);
      sampleData.setF(fixture.compare_f);
      sampleData.setG(fixture.compare_g);
      sampleData.setH(fixture.compare_h);
      sampleData.setI(fixture.compare_i);
      sampleData.setJ(fixture.compare_j);
      sampleData.setK(fixture.compare_k);
      sampleData.setL(fixture.compare_l);
      sampleData.setM(fixture.compare_m);
      sampleData.setN(fixture.compare_n);
      sampleData.setO(fixture.compare_o);
      return sampleData;
    }
  }

}