/*******************************************************************************
 * Copyright (c) 1998, 2014 Oracle and/or its affiliates. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at 
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Oracle - initial API and implementation from Oracle TopLink
 ******************************************************************************/
package org.eclipse.persistence.testing.oxm.mappings.directcollection;

import java.util.Calendar;
import java.util.Vector;

public class Employee  {

  private int id;
	private Vector responsibilities;
	private Vector outdoorResponsibilities; 
	
  public Employee() {
    super();
  }

  public int getID() {
    return id;
  }

  public void setID(int newId) {
    id = newId;
  }

  public Vector getResponsibilities() {
    return responsibilities;
  }

  public void setResponsibilities(Vector newResponsibilities) {
    responsibilities = newResponsibilities;
  }

	public Vector getOutdoorResponsibilities() {
    return outdoorResponsibilities;
  }

  public void setOutdoorResponsibilities(Vector newOutdoorResponsibilities) {
    outdoorResponsibilities = newOutdoorResponsibilities;
  }

  public String toString()
  {
		String returnString =  "Employee: " + this.getID() + " ";
		if(getResponsibilities() != null)
		{
			returnString += "Responsiblities: ";
			for(int i=0; i<getResponsibilities().size(); i++)
			{
				Object next = getResponsibilities().elementAt(i);
				if(next != null){
					returnString += next.toString() + " ";
				}else{
					returnString += "null_item" + " ";
				}
			}
		}

		if(getOutdoorResponsibilities() != null)
		{
			returnString += "Outdoor Responsiblities: ";
			for(int i=0; i<getOutdoorResponsibilities().size(); i++)
			{
				Object next = getOutdoorResponsibilities().elementAt(i);
				returnString += next.toString() + " ";
			}
		}
		return returnString;
  } 

  public boolean equals(Object object)
  {
    if(!(object instanceof Employee))
      return false;
    Employee employeeObject = (Employee)object;

    if(this.getResponsibilities()==null && employeeObject.getResponsibilities()!=null)
    {
      return false;
    }
    if(employeeObject.getResponsibilities()==null && this.getResponsibilities()!=null)
    {
      return false;
    }


    if((this.getID() == employeeObject.getID()) &&
      ((this.getResponsibilities()==null && employeeObject.getResponsibilities()==null) ||(this.getResponsibilities().isEmpty() && employeeObject.getResponsibilities().isEmpty()) || (fixCalendar(this.getResponsibilities()).containsAll((fixCalendar(employeeObject.getResponsibilities()))))) &&
			((this.getOutdoorResponsibilities()==null && employeeObject.getOutdoorResponsibilities()==null) ||(this.getOutdoorResponsibilities().isEmpty() && employeeObject.getOutdoorResponsibilities().isEmpty())|| (fixCalendar(this.getOutdoorResponsibilities()).containsAll(fixCalendar(employeeObject.getOutdoorResponsibilities()))))
			)
          return true;

    return false;
  }

  private Vector fixCalendar(Vector v) {

      if (null == v) {
          return null;
      }

      Vector result = new Vector();
      for (Object item : v) {
          if (null != item && item instanceof java.util.Calendar) {
              Calendar normalizedCalendar = Calendar.getInstance();
              normalizedCalendar.setTimeInMillis(((Calendar)item).getTimeInMillis());
              result.add(normalizedCalendar);
          } else {
              result.add(item);
          }
      }

      return result;
  }
}
