/*
* *************************************************************************************
* Copyright (C) 2008 EsperTech, Inc. All rights reserved. *
* http://esper.codehaus.org *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
* *************************************************************************************
*/
package com.espertech.esper.view.ext;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.collection.MultiKeyUntyped;
import com.espertech.esper.support.bean.SupportBean;
import com.espertech.esper.support.event.SupportEventBeanFactory;
import com.espertech.esper.util.MultiKeyCastingComparator;
import com.espertech.esper.util.MultiKeyComparator;
import com.espertech.esper.view.window.RandomAccessByIndex;
import com.espertech.esper.view.window.RandomAccessByIndexObserver;
import junit.framework.TestCase;
import java.util.LinkedList;
import java.util.List;
import java.util.TreeMap;
public class TestIStreamSortedRandomAccess extends TestCase
{
private IStreamSortRankRandomAccess access;
private TreeMap<Object, Object> sortedEvents;
private EventBean[] events;
public void setUp()
{
RandomAccessByIndexObserver updateObserver = new RandomAccessByIndexObserver()
{
public void updated(RandomAccessByIndex randomAccessByIndex)
{
}
};
access = new IStreamSortRankRandomAccess(updateObserver);
sortedEvents = new TreeMap<Object, Object>(new MultiKeyCastingComparator(new MultiKeyComparator(new boolean[] {false})));
events = new EventBean[100];
for (int i = 0; i < events.length; i++)
{
events[i] = SupportEventBeanFactory.createObject(new SupportBean());
}
}
public void testGet()
{
access.refresh(sortedEvents, 0, 10);
assertNull(access.getNewData(0));
assertNull(access.getNewData(1));
add("C", events[0]);
access.refresh(sortedEvents, 1, 10);
assertData(new EventBean[] {events[0]});
add("E", events[1]);
access.refresh(sortedEvents, 2, 10);
assertData(new EventBean[] {events[0], events[1]});
add("A", events[2]);
access.refresh(sortedEvents, 3, 10);
assertData(new EventBean[] {events[2], events[0], events[1]});
add("C", events[4]);
access.refresh(sortedEvents, 4, 10);
assertData(new EventBean[] {events[2], events[4], events[0], events[1]});
add("E", events[5]);
access.refresh(sortedEvents, 5, 10);
assertData(new EventBean[] {events[2], events[4], events[0], events[5], events[1]});
add("A", events[6]);
access.refresh(sortedEvents, 6, 10);
assertData(new EventBean[] {events[6], events[2], events[4], events[0], events[5], events[1]});
add("B", events[7]);
access.refresh(sortedEvents, 7, 10);
assertData(new EventBean[] {events[6], events[2], events[7], events[4], events[0], events[5], events[1]});
add("F", events[8]);
access.refresh(sortedEvents, 8, 10);
assertData(new EventBean[] {events[6], events[2], events[7], events[4], events[0], events[5], events[1], events[8]});
// A A B C C E E F
add("D", events[9]);
access.refresh(sortedEvents, 9, 10);
assertSame(events[9], access.getNewData(5));
}
private void assertData(EventBean[] events)
{
for (int i = 0; i < events.length; i++)
{
assertSame("Failed for index " + i, events[i], access.getNewData(i));
}
assertNull(access.getNewData(events.length));
}
private void add(String key, EventBean theEvent)
{
((SupportBean)theEvent.getUnderlying()).setTheString(key);
MultiKeyUntyped mkey = new MultiKeyUntyped(new Object[] {key});
List<EventBean> eventList = (List<EventBean>) sortedEvents.get(mkey);
if (eventList == null)
{
eventList = new LinkedList<EventBean>();
}
eventList.add(0, theEvent);
sortedEvents.put(mkey, eventList);
}
}