package kg.apc.charting.rows;
import kg.apc.charting.AbstractGraphRow;
import kg.apc.charting.elements.GraphPanelChartExactElement;
import kg.apc.charting.AbstractGraphPanelChartElement;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentSkipListMap;
public class GraphRowExactValues
extends AbstractGraphRow
implements Iterator<Entry<Long, AbstractGraphPanelChartElement>>
{
private ConcurrentSkipListMap<Long, AbstractGraphPanelChartElement> values;
private Iterator<Entry<Long, AbstractGraphPanelChartElement>> iterator;
/**
*
*/
public GraphRowExactValues()
{
super();
values = new ConcurrentSkipListMap<Long, AbstractGraphPanelChartElement>();
}
/**
*
* @param xVal
* @param yVal
*/
@Override
public void add(long xVal, double yVal)
{
GraphPanelChartExactElement el;
el = new GraphPanelChartExactElement(xVal, yVal);
values.put((long) values.size(), el);
super.add(xVal, yVal);
}
/**
*
* @return
*/
@Override
public Iterator<Entry<Long, AbstractGraphPanelChartElement>> iterator()
{
iterator = values.entrySet().iterator();
return this;
}
public boolean hasNext()
{
return iterator==null?false:iterator.hasNext();
}
public Entry<Long, AbstractGraphPanelChartElement> next()
{
GraphPanelChartExactElement el = (GraphPanelChartExactElement) iterator.next().getValue();
return new ExactEntry(el.getX(), el);
}
public void remove()
{
throw new UnsupportedOperationException("Not supported yet.");
}
private static class ExactEntry
implements Entry<Long, AbstractGraphPanelChartElement>
{
private long key;
private final AbstractGraphPanelChartElement value;
public ExactEntry(long aKey, AbstractGraphPanelChartElement aValue)
{
key = aKey;
value = aValue;
}
public Long getKey()
{
return key;
}
public AbstractGraphPanelChartElement getValue()
{
return value;
}
public AbstractGraphPanelChartElement setValue(AbstractGraphPanelChartElement value)
{
throw new UnsupportedOperationException("Not supported yet.");
}
}
@Override
public int size()
{
return values.size();
}
@Override
public AbstractGraphPanelChartElement getElement(long value)
{
AbstractGraphPanelChartElement ret = null;
Iterator<Entry<Long, AbstractGraphPanelChartElement>> it = values.entrySet().iterator();
while(it.hasNext() && ret == null)
{
GraphPanelChartExactElement el = (GraphPanelChartExactElement) it.next().getValue();
if(el.getX() == value)
{
ret = el;
}
}
return ret;
}
}