/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE @UMPLE_VERSION@ modeling language!*/

package example;
import java.util.*;

public class Student
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //Student Attributes
  private int intId;
  private double doubleId;
  private boolean booleanId;
  private String stringId;
  private List<String> stringListIds;

  //Helper Variables
  private int cachedHashCode;
  private boolean canSetIntId;
  private boolean canSetDoubleId;
  private boolean canSetBooleanId;
  private boolean canSetStringId;
  private boolean canSetStringListIds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public Student(int aIntId, double aDoubleId, boolean aBooleanId, String aStringId)
  {
    cachedHashCode = -1;
    canSetIntId = true;
    canSetDoubleId = true;
    canSetBooleanId = true;
    canSetStringId = true;
    canSetStringListIds = true;
    intId = aIntId;
    doubleId = aDoubleId;
    booleanId = aBooleanId;
    stringId = aStringId;
    stringListIds = new ArrayList<String>();
  }

  //------------------------
  // INTERFACE
  //------------------------

  public boolean setIntId(int aIntId)
  {
    boolean wasSet = false;
    if (!canSetIntId) { return false; }
    intId = aIntId;
    wasSet = true;
    return wasSet;
  }

  public boolean setDoubleId(double aDoubleId)
  {
    boolean wasSet = false;
    if (!canSetDoubleId) { return false; }
    doubleId = aDoubleId;
    wasSet = true;
    return wasSet;
  }

  public boolean setBooleanId(boolean aBooleanId)
  {
    boolean wasSet = false;
    if (!canSetBooleanId) { return false; }
    booleanId = aBooleanId;
    wasSet = true;
    return wasSet;
  }

  public boolean setStringId(String aStringId)
  {
    boolean wasSet = false;
    if (!canSetStringId) { return false; }
    stringId = aStringId;
    wasSet = true;
    return wasSet;
  }

  public boolean addStringListId(String aStringListId)
  {
    boolean wasAdded = false;
    if (!canSetStringListIds) { return false; }
    wasAdded = stringListIds.add(aStringListId);
    return wasAdded;
  }

  public boolean removeStringListId(String aStringListId)
  {
    boolean wasRemoved = false;
    if (!canSetStringListIds) { return false; }
    wasRemoved = stringListIds.remove(aStringListId);
    return wasRemoved;
  }

  public int getIntId()
  {
    return intId;
  }

  public double getDoubleId()
  {
    return doubleId;
  }

  public boolean getBooleanId()
  {
    return booleanId;
  }

  public String getStringId()
  {
    return stringId;
  }

  public String getStringListId(int index)
  {
    String aStringListId = stringListIds.get(index);
    return aStringListId;
  }

  public String[] getStringListIds()
  {
    String[] newStringListIds = stringListIds.toArray(new String[stringListIds.size()]);
    return newStringListIds;
  }

  public int numberOfStringListIds()
  {
    int number = stringListIds.size();
    return number;
  }

  public boolean hasStringListIds()
  {
    boolean has = stringListIds.size() > 0;
    return has;
  }

  public int indexOfStringListId(String aStringListId)
  {
    int index = stringListIds.indexOf(aStringListId);
    return index;
  }

  public boolean isBooleanId()
  {
    return booleanId;
  }

  public boolean equals(Object obj)
  {
    if (obj == null) { return false; }
    if (!getClass().equals(obj.getClass())) { return false; }

    Student compareTo = (Student)obj;
  
    if (getIntId() != compareTo.getIntId())
    {
      return false;
    }

    if (getDoubleId() != compareTo.getDoubleId())
    {
      return false;
    }

    if (getBooleanId() != compareTo.getBooleanId())
    {
      return false;
    }

    if (getStringId() == null && compareTo.getStringId() != null)
    {
      return false;
    }
    else if (getStringId() != null && !getStringId().equals(compareTo.getStringId()))
    {
      return false;
    }

    if (getStringListIds().length != compareTo.getStringListIds().length)
    {
      return false;
    }

    for (int i=0; i<getStringListIds().length; i++)
    {
      String me = getStringListIds()[i];
      String them = compareTo.getStringListIds()[i];
      if (me == null && them != null)
      {
       return false;
      }
      else if (me != null && !me.equals(them))
      {
        return false;
      }
    }

    return true;
  }

  public int hashCode()
  {
    if (cachedHashCode != -1)
    {
      return cachedHashCode;
    }
    cachedHashCode = 17;
    cachedHashCode = cachedHashCode * 23 + getIntId();

    cachedHashCode = cachedHashCode * 23 + (Double.valueOf(getDoubleId())).hashCode();

    cachedHashCode = cachedHashCode * 23 + (getBooleanId() ? 1 : 0);

    if (getStringId() != null)
    {
      cachedHashCode = cachedHashCode * 23 + getStringId().hashCode();
    }
    else
    {
      cachedHashCode = cachedHashCode * 23;
    }

    if (getStringListIds() != null)
    {
      cachedHashCode = cachedHashCode * 23 + getStringListIds().hashCode();
    }
    else
    {
      cachedHashCode = cachedHashCode * 23;
    }

    canSetIntId = false;
    canSetDoubleId = false;
    canSetBooleanId = false;
    canSetStringId = false;
    canSetStringListIds = false;
    return cachedHashCode;
  }

  public void delete()
  {}


  public String toString()
  {
    return super.toString() + "["+
            "stringId" + ":" + getStringId()+ "," +
            "booleanId" + ":" + getBooleanId()+ "," +
            "doubleId" + ":" + getDoubleId()+ "," +
            "intId" + ":" + getIntId()+ "]";
  }
}
