package io.vivarium.serialization;
import java.util.LinkedList;
import java.util.List;
import com.googlecode.gwtstreamer.client.Streamable;
import io.vivarium.util.UUID;
@SuppressWarnings("serial") // Default serialization is never used for a durable store
public class VivariumObjectCollection implements Streamable
{
private List<VivariumObject> _data;
public VivariumObjectCollection()
{
_data = new LinkedList<>();
}
public void add(VivariumObject object)
{
_data.add(object);
}
public List<UUID> getUUIDs()
{
List<UUID> uuids = new LinkedList<>();
for (VivariumObject object : _data)
{
uuids.add(object.getUUID());
}
return uuids;
}
@SuppressWarnings("unchecked") // Not actually unchecked...
public <T extends VivariumObject> List<T> getAll(Class<T> clazz)
{
List<T> result = new LinkedList<>();
for (VivariumObject object : _data)
{
Class<?> specificClazz = object.getClass();
while (specificClazz != null)
{
if (specificClazz == clazz)
{
result.add((T) object);
break;
}
specificClazz = specificClazz.getSuperclass();
}
}
return result;
}
@SuppressWarnings("unchecked") // Not actually unchecked...
public <T extends VivariumObject> T getFirst(Class<T> clazz)
{
for (VivariumObject object : _data)
{
Class<?> specificClazz = object.getClass();
while (specificClazz != null)
{
if (specificClazz == clazz)
{
return (T) object;
}
specificClazz = specificClazz.getSuperclass();
}
}
return null;
}
public VivariumObject getObject(UUID uuid)
{
for (VivariumObject object : _data)
{
if (object.getUUID().equals(uuid))
{
return object;
}
}
return null;
}
}