// Using a proper class with a private constructor to represent a day.
// Barry Cornelius, 19 June 2000
import java.util. Arrays;
import java.util. Iterator;
import java.util. List;
public class Day implements Comparable
{
   private String iString;
   private int iPosition;
   private Day(final String pString)
   {
      iString = pString;
      iPosition = iNumberOfDays;
   }
   public boolean equals(final Object pObject)
   {
      if ( pObject==null || getClass()!=pObject.getClass() )
      {
         return false;
      }
      return iPosition==((Day)pObject).iPosition;
   }
   public int hashCode()
   {
      return iPosition;
   } //BJCHEREFIRST
   public int compareTo(final Object pObject)
   { 
      final Day tDay = (Day)pObject;
      return iPosition - tDay.iPosition;
   }
   public String toString()
   {
      return iString;
   }

   private static Day iCreateDay(final String pString)
   {
      final Day tDay = new Day(pString);
      iDays[iNumberOfDays] = tDay;
      iNumberOfDays++;
      return tDay;
   }
   private static int iNumberOfDays = 0;
   private static final Day[] iDays = new Day[7];
   public static final Day monday    = iCreateDay("Monday");
   public static final Day tuesday   = iCreateDay("Tuesday");
   public static final Day wednesday = iCreateDay("Wednesday");
   public static final Day thursday  = iCreateDay("Thursday");
   public static final Day friday    = iCreateDay("Friday");
   public static final Day saturday  = iCreateDay("Saturday");
   public static final Day sunday    = iCreateDay("Sunday");
   public static Day getInstance(final String pString)
   {
      for (int tDayNumber = 0; tDayNumber<iNumberOfDays; tDayNumber++)
      {
         final Day tArrayDay = iDays[tDayNumber];
         final String tArrayDayString = tArrayDay.iString;
         if (tArrayDayString.equalsIgnoreCase(pString))
         {
            return tArrayDay;
         }
      }
      return null;
   }
   public static Iterator iterator()
   {
      final List tList = Arrays.asList(iDays);
      return tList.iterator();
   }
}
