package org.rr.jeborker.gui.cell;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.beans.PropertyEditor;
import java.util.List;
import java.util.logging.Level;
import javax.swing.JPanel;
import org.rr.commons.log.LoggerFactory;
import org.rr.commons.swing.SwingUtils;
import org.rr.commons.swing.components.StarRater;
import org.rr.commons.utils.CommonUtils;
public class StarRatingPropertyEditor extends JPanel implements PropertyEditor {
private static final long serialVersionUID = 8069880556160736365L;
private StarRater starRater;
public StarRatingPropertyEditor() {
starRater = new StarRater();
this.setLayout(new BorderLayout());
this.add(starRater, BorderLayout.CENTER);
SwingUtils.setColor(this, true);
}
public Component getCustomEditor() {
return this;
}
@SuppressWarnings("rawtypes")
public void setValue(Object value) {
if(value instanceof List) {
value = ((List)value).get(0);
}
Number number = CommonUtils.toNumber(value);
if (number != null) {
float rating = number.floatValue() / 2f;
starRater.setRating(rating);
} else {
LoggerFactory.log(Level.WARNING, this, "could not parse the entered value \"" + String.valueOf(value) + "\"as Number.");
}
}
/**
* Returns the rating as string
*
* @return the rating value. This value is an integer between 1 and 10.
*/
public Object getValue() {
float rating = starRater.getSelection();
Float valueOf = Float.valueOf(rating * 2f);
return String.valueOf(valueOf.intValue());
}
@Override
public boolean isPaintable() {
return false;
}
@Override
public void paintValue(Graphics gfx, Rectangle box) {
}
@Override
public String getJavaInitializationString() {
return null;
}
@Override
public String getAsText() {
return null;
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
}
@Override
public String[] getTags() {
return null;
}
@Override
public boolean supportsCustomEditor() {
return false;
}
}