content: /*
   * @(#)DrawingToolTipState.java
   *
   * Copyright 2002 EGANTT LLP. All rights reserved.
   * PROPRIETARY/QPL. Use is subject to license terms.
   */
  
  package com.egantt.swing.component.tooltip.state;
  
  import com.egantt.swing.cell.CellState;
  import com.egantt.swing.component.tooltip.ToolTipState;
  
  import com.egantt.model.drawing.DrawingPart;
  import com.egantt.model.drawing.DrawingState;
  
  import com.egantt.model.drawing.axis.AxisInterval;
  
  import java.awt.event.MouseEvent;
  
  import java.text.DateFormat;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  import java.util.Iterator;
  
  import javax.swing.JToolTip;
  
  /**
   *  A twist on tooltips, to use the DrawingState to get the values, as the
   *  DrawingState has the ability to convert the location into a key
   */
  public class DrawingToolTipState implements ToolTipState
  {
  	/**
  	 *  Strange things can happen in JDK 1.3.x if the ToolTipManager
  	 *  RETURNS NULL on #getToolTipText
  	 */
  	private static final String EMPTY_STRING = "";
  
  	// __________________________________________________________________________
  
  	/**
  	 *  Creates a new instance of JToolTip this needs to be checked at some point
  	 *  wether creating or caching this tooltip instance is the correct way of
  	 *  going about things. It is uncertain from looking at the ToolTipManager code
  	 *  to do this we need to test on all JDK's
  	 */
  	public JToolTip createToolTip()
  	{
  		return new JToolTip();
  	}
  
  	// __________________________________________________________________________
  
  	/**
  	 *  The current implementation is less than desired basically we interrogate
  	 *  the state to find out what the underlying key is and from there it is
  	 *  possible to get the Interval from the appropriate part.
  	 */
  	public String getToolTipText(MouseEvent event, CellState cellState)
  	{
  		DrawingState drawing = cellState.getDrawing();
  		Object key = drawing != null ? drawing.getValueAt(event.getPoint()): null;
  		if (key == null)
  			return EMPTY_STRING;
  
  		DateFormat format = SimpleDateFormat.getDateInstance();
  
  		// iterate throught the drawing parts looking for a part that contains our key
  		for (Iterator iter = drawing.parts(); iter.hasNext();)
  		{
  			DrawingPart part = (DrawingPart) iter.next();
  			AxisInterval [] empty = new AxisInterval[0];
  
  			// display the xAxis on the screen
  			AxisInterval [ ]intervals = part.getInterval(key, empty);
  			if (intervals != null && intervals[0] != null)
  			{
  				Date d1 = new Date(((Long)intervals[0].getStart()).longValue());
  				Date d2 = new Date(((Long)intervals[0].getFinish()).longValue());
  				return format.format(d1) + " to " + format.format(d2);
  			}
  		}
  		return EMPTY_STRING;
  	}
  }
  