package com.bagri.client.hazelcast.impl; import static com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl.cli_FixedCursor; import static com.bagri.client.hazelcast.serialize.DataSerializationFactoryImpl.factoryId; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.bagri.core.api.BagriException; import com.bagri.core.api.impl.ResultCursorBase; import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import com.hazelcast.nio.serialization.IdentifiedDataSerializable; public class FixedCursorImpl extends ResultCursorBase implements IdentifiedDataSerializable { private Object value = null; private Iterator<Object> iter; private List<Object> values = new ArrayList<>(); public FixedCursorImpl() { // } public FixedCursorImpl(List<Object> values) { setValues(values); } @Override public void close() throws Exception { values = null; value = null; iter = null; } protected Object getCurrent() { return value; } @Override public List<Object> getList() throws BagriException { return values; } @Override public boolean isFixed() { return true; } @Override public boolean next() { boolean result = iter.hasNext(); if (result) { value = iter.next(); } else { value = null; } return result; } @Override public int getFactoryId() { return factoryId; } @Override public int getId() { return cli_FixedCursor; } private void setValues(List<Object> values) { if (values != null) { this.values.addAll(values); } iter = this.values.iterator(); } @Override public void readData(ObjectDataInput in) throws IOException { setValues((List<Object>) in.readObject()); } @Override public void writeData(ObjectDataOutput out) throws IOException { out.writeObject(values); } @Override public String toString() { return "FixedCursorImpl [values=" + values.size() + "]"; } }