package org.prevayler.demos.scalability;
import java.io.Serializable;
import java.util.*;
import java.math.BigDecimal;

public class Record implements Serializable {
  private static final long serialVersionUID=7098880197177237832L;
  private static final String largeString=generateLargeString();
  private final long id;
  private final String name;
  private final String string1;
  private final BigDecimal bigDecimal1;
  private final BigDecimal bigDecimal2;
  private final long date1;
  private final long date2;
  private static final Random RANDOM=new Random();
  public Record(  long id){
    this(id,RANDOM);
  }
  public Record(  long id,  Random random){
    this(id,"NAME" + (id % 10000),(id % 10000) == 0 ? largeString + id : null,new BigDecimal(random.nextInt()),new BigDecimal(random.nextInt()),new Date(random.nextInt(10000000)),new Date(random.nextInt(10000000)));
  }
  public Record(  long id,  String name,  String string1,  BigDecimal bigDecimal1,  BigDecimal bigDecimal2,  Date date1,  Date date2){
    this.id=id;
    this.name=name;
    this.string1=string1;
    this.bigDecimal1=bigDecimal1;
    this.bigDecimal2=bigDecimal2;
    this.date1=date1.getTime();
    this.date2=date2.getTime();
  }
  public long getId(){
    return id;
  }
  public String getName(){
    return name;
  }
  public String getString1(){
    return string1;
  }
  public BigDecimal getBigDecimal1(){
    return bigDecimal1;
  }
  public BigDecimal getBigDecimal2(){
    return bigDecimal2;
  }
  public Date getDate1(){
    return new Date(date1);
  }
  public Date getDate2(){
    return new Date(date2);
  }
  public int hashCode(){
    return (int)(id + name.hashCode() + ("" + string1).hashCode()+ bigDecimal1.hashCode()+ bigDecimal2.hashCode()+ date1+ date2);
  }
  static private String generateLargeString(){
    char[] chars=new char[980];
    Arrays.fill(chars,'A');
    return new String(chars);
  }
}
