/**
 * Copyright (c) 2011, Martin Foster <martin@ethereal-realms.org>
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright notice, 
 *       this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright 
 *       notice, this list of conditions and the following disclaimer in the 
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the Ethereal-Realms.org nor the names of its
 *       contributors may be used to endorse or promote products derived
 *       from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.lyra.Widgets;

import java.awt.Component;

import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

import org.lyra.Interface.Constants;

/**
 * Generates a user interface necessary to modify the rating section of the
 * song listing.   Will display a series of stars that when clicked will 
 * set the rating to a specific value. 
 * <p>
 * @author Martin Foster
 * @version 1.0.4, %Revision, 108%, %LastChangedDate, 17/04/11 4:16PM%
 * @since 1.0.1
 */
public class RatingCellEditor extends AbstractCellEditor implements TableCellEditor{

	// Serial Requirements
	private static final long serialVersionUID = 1L;

	/*
	 * CLASS ELEMENTS
	 */
	
	// String containing actual value
	private RatingBar myRating;

	

	/* (non-Javadoc)
	 * @see javax.swing.CellEditor#getCellEditorValue()
	 */
	public Object getCellEditorValue() {

		// We return what we know
		return myRating.fetchRating();
	}
	// End of getCellEditorValue Method
	

	/* (non-Javadoc)
	 * @see javax.swing.table.TableCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int)
	 */
	public Component getTableCellEditorComponent(
			JTable table, 
			Object value,
			boolean isSelected, 
			int row, 
			int column) {
		
		/*
		 * We have to take the value and use it to generate the actual display.
		 * By default the value will be zero accounting for instances where the
		 * current value is null.
		 */
		
		// Safety assign
		int actual = 0;
		
		// Parse in the actual value if not already assigned
		if (value != null) {
			
			// Parse
			actual = Integer.parseInt(value.toString());
		
			// Safety
			if (actual > Constants.getMaxRating())
				actual = 0;
		}
		
		// Return generated element
		myRating = RatingBar.getDynamic(actual);
		myRating.updateEditor(this);
		
		// Return Instance
		return myRating;
	}
	// End of getTableCellEditorComponent Method
}
