/**
 * THE TimeStampLabel.java WRITEME...
 */
package com.tootsville.tootsbook.client.util;

import java.util.Enumeration;
import java.util.Vector;

import com.google.gwt.user.client.ui.Label;
import com.tootsville.tootsbook.client.TootsBook;
import com.tootsville.tootsbook.client.util.tasks.Task;

/**
 * Time-stamped labels that auto-update
 * 
 * @author <a href="mailto:twheys@gmail.com">Tim Heys</a>
 */
public class TimeStampLabel extends Label {

	/**
	 * Collection of all timestamp labels known to exist
	 */
	private static Vector <TimeStampLabel> timeStampLabels = new Vector <TimeStampLabel> ();

	/**
	 * Set up a global task to update timestamp labels
	 */
	static {
		TootsBook.clientMetronome.addGlobalTask (new Task () {
			@Override
			public void execute () {
				TimeStampLabel.updateLabels ();
			}
		});
	}

	/**
	 * <pre>
	 * twheys@gmail.com Feb 4, 2010
	 * </pre>
	 * 
	 * TO destroy WRITEME...
	 */
	public static void cleanup () {
		TimeStampLabel.timeStampLabels.removeAllElements ();
	}

	/**
	 * <pre>
	 * twheys@gmail.com Feb 4, 2010
	 * </pre>
	 * 
	 * TO updateLabels WRITEME...
	 */
	protected static void updateLabels () {
		final Enumeration <TimeStampLabel> labels = TimeStampLabel.timeStampLabels
		.elements ();
		while (labels.hasMoreElements ()) {
			labels.nextElement ().update ();
		}
	}

	/**
	 * WRITEME twheys@gmail.com
	 */
	private final long postTimeStamp;

	/**
	 * <pre>
	 * twheys@gmail.com Feb 4, 2010
	 * </pre>
	 * 
	 * A TimeStampLabel WRITEME...
	 * 
	 * @param time WRITEME twheys@gmail.com
	 */
	public TimeStampLabel (final long time) {
		super (DisplayText.formatPastDate_English (time));
		postTimeStamp = time;
		TimeStampLabel.timeStampLabels.add (this);
	}

	/**
	 * <pre>
	 * twheys@gmail.com Feb 4, 2010
	 * </pre>
	 * 
	 * TO update WRITEME...
	 */
	private void update () {
		final String formatPastDateEnglish = DisplayText
		.formatPastDate_English (postTimeStamp);
		if ( !getText ().equals (formatPastDateEnglish)) {
			setText (formatPastDateEnglish);
		}
	}
}
