Source Code : Monitored GregorianCalendar

Java Is Open Source Programming Language You Can Download From Java and Java Libraries From http://www.oracle.com. Click Here to download
We provide this code related to title for you to solve your developing problem easily. Libraries which is import in this program you can download from http://www.oracle.com. Click Here or search from google with Libraries Name you get jar file related it

Monitored GregorianCalendar

     


import java.util.*;

/**
 * @author Matthew D. Hicks
 *
 */
public class MonitoredGregorianCalendar extends GregorianCalendar {
  private ArrayList listeners;
  
  private boolean blocked;
  
  public MonitoredGregorianCalendar() {
    super();
    listeners = new ArrayList();
  }
  
  public MonitoredGregorianCalendar(int year, int month, int dayOfMonth) {
    super(year, month, dayOfMonth);
    listeners = new ArrayList();
  }
  
  public MonitoredGregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) {
    super(year, month, dayOfMonth, hourOfDay, minute);
    listeners = new ArrayList();
  }
  
  public MonitoredGregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) {
    super(year, month, dayOfMonth, hourOfDay, minute, second);
    listeners = new ArrayList();
  }
  
  public MonitoredGregorianCalendar(Locale aLocale) {
    super(aLocale);
    listeners = new ArrayList();
  }
  
  public MonitoredGregorianCalendar(TimeZone zone) {
    super(zone);
    listeners = new ArrayList();
  }
  
  public void add(int field, int amount) {
    if (!blocked) {
      blocked = true;
      super.add(field, amount);
      blocked = false;
      changed(CalendarChangeListener.TYPE_ADD, field, amount);
    } else {
      super.add(field, amount);
    }
  }
  
  public void roll(int field, boolean up) {
    if (!blocked) {
      blocked = true;
      super.roll(field, up);
      blocked = false;
      int amount = 0;
      if (up) amount = 1;
      changed(CalendarChangeListener.TYPE_ROLL, field, amount);
    } else {
      super.roll(field, up);
    }
  }
  
  public void roll(int field, int amount) {
    if (!blocked) {
      blocked = true;
      super.roll(field, amount);
      blocked = false;
      changed(CalendarChangeListener.TYPE_ROLL, field, amount);
    } else {
      super.roll(field, amount);
    }
  }
  
  public void setGregorianChange(Date date) {
    if (!blocked) {
      blocked = true;
      super.setGregorianChange(date);
      blocked = false;
      changed(CalendarChangeListener.TYPE_SET, CalendarChangeListener.TIME_IN_MILLIS, date.getTime());
    } else {
      super.setGregorianChange(date);
    }
  }
  
  public void setTimeZone(TimeZone zone) {
    if (!blocked) {
      blocked = true;
      super.setTimeZone(zone);
      blocked = false;
      changed(CalendarChangeListener.TYPE_SET, CalendarChangeListener.TIME_ZONE, zone.getRawOffset());
    } else {
      super.setTimeZone(zone);
    }
  }
  
  public void set(int field, int value) {
    if (!blocked) {
      blocked = true;
      super.set(field, value);
      blocked = false;
      changed(CalendarChangeListener.TYPE_SET, field, value);
    } else {
      super.set(field, value);
    }
  }
  
  public void setFirstDayOfWeek(int value) {
    if (!blocked) {
      blocked = true;
      super.setFirstDayOfWeek(value);
      blocked = false;
      changed(CalendarChangeListener.TYPE_SET, CalendarChangeListener.FIRST_DAY_OF_WEEK, value);
    } else {
      super.setFirstDayOfWeek(value);
    }
  }
  
  public void setLenient(boolean lenient) {
    if (!blocked) {
      blocked = true;
      super.setLenient(lenient);
      blocked = false;
      int amount = 0;
      if (lenient) amount = 1;
      changed(CalendarChangeListener.TYPE_SET, CalendarChangeListener.LENIENT, amount);
    } else {
      super.setLenient(lenient);
    }
  }
  
  public void setMinimalDaysInFirstWeek(int value) {
    if (!blocked) {
      blocked = true;
      super.setMinimalDaysInFirstWeek(value);
      blocked = false;
      changed(CalendarChangeListener.TYPE_SET, CalendarChangeListener.MINIMAL_DAYS_IN_FIRST_WEEK, value);
    } else {
      super.setMinimalDaysInFirstWeek(value);
    }
  }
  
  public void setTimeInMillis(long millis) {
    if (!blocked) {
      blocked = true;
      super.setTimeInMillis(millis);
      blocked = false;
      changed(CalendarChangeListener.TYPE_SET, CalendarChangeListener.TIME_IN_MILLIS, millis);
    } else {
      super.setTimeInMillis(millis);
    }
  }
  
  private void changed(int type, int field, long value) {
    if ((listeners != null) && (!blocked)) {
      for (int i = 0; i < listeners.size(); i++) {
        ((CalendarChangeListener)listeners.get(i)).changed(this, type, field, value);
      }
    }
  }
  
  public void addListener(CalendarChangeListener listener) {
    listeners.add(listener);
  }
}


/**
 * @author Matthew D. Hicks
 *
 */
interface CalendarChangeListener {
  public static final int TYPE_ADD = 1;
  public static final int TYPE_ROLL = 2;
  public static final int TYPE_SET = 3;
  
  public static final int TIME_ZONE = 1;
  public static final int FIRST_DAY_OF_WEEK = 2;
  public static final int LENIENT = 3;
  public static final int MINIMAL_DAYS_IN_FIRST_WEEK = 4;
  public static final int TIME_IN_MILLIS = 5;
  
  /**
   * This method is called when a MonitoredGregorianCalendar changes.
   * 
   * @param c
   *    A reference to the MonitoredGregorianCalendar that has been changed.
   * @param type
   *    The type of change that occurred:
   *      TYPE_ADD, TYPE_ROLL, or TYPE_SET
   * @param field
   *    The field that was changed either a Calendar type or:
   *      TIME_ZONE, FIRST_DAY_OF_WEEK, LENIENT, MINIMAL_DAYS_IN_FIRST_WEEK, or TIME_IN_MILLIS
   * @param value
   *    The value associated with the change.
   */
  public void changed(MonitoredGregorianCalendar c, int type, int field, long value);
}

   
    
    
    
    
  

Thank with us