package com.alvazan.orm.layer0.base; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.alvazan.orm.api.z5api.NoSqlSession; import com.alvazan.orm.api.z8spi.KeyValue; import com.alvazan.orm.api.z8spi.Row; import com.alvazan.orm.api.z8spi.iter.AbstractCursor; import com.alvazan.orm.api.z8spi.iter.StringLocal; import com.alvazan.orm.api.z8spi.meta.DboColumnIdMeta; import com.alvazan.orm.impl.meta.data.MetaClass; import com.alvazan.orm.impl.meta.data.MetaInfo; public class CursorRowPlain<T> extends AbstractCursor<T>{ private static final Logger log = LoggerFactory.getLogger(CursorRowPlain.class); private MetaClass<T> meta; private AbstractCursor<Row> cursor; private NoSqlSession session; private MetaInfo metaInfo; private boolean isVirtual; public CursorRowPlain(NoSqlSession session, MetaClass<T> meta2, AbstractCursor<Row> cursor, MetaInfo metaInfo, boolean isVirtual) { this.session = session; this.meta = meta2; this.cursor = cursor; this.metaInfo = metaInfo; this.isVirtual = isVirtual; } @Override public void beforeFirst() { cursor.beforeFirst(); } @Override public void afterLast() { cursor.afterLast(); } @Override public Holder<T> nextImpl() { Holder<Row> nextImpl = cursor.nextImpl(); if(nextImpl == null) return null; Row kv = nextImpl.getValue(); T result = translateRow(kv); return new Holder<T>(result); } @Override public Holder<T> previousImpl() { Holder<Row> prevImpl = cursor.previousImpl(); if(prevImpl == null) return null; Row kv = prevImpl.getValue(); T result = translateRow(kv); return new Holder<T>(result); } @SuppressWarnings("unchecked") private T translateRow(Row row) { MetaClass<T> newMeta = meta; KeyValue<T> keyVal; if(isVirtual) { String tableName = DboColumnIdMeta.fetchTableNameIfVirtual(row.getKey()); newMeta = metaInfo.getMetaClass(tableName); } keyVal = newMeta.translateFromRow(row, session); return keyVal.getValue(); } @Override public String toString() { String tabs = StringLocal.getAndAdd(); String retVal = "CursorRow(rowToEntity)["+tabs+cursor+tabs+"]"; StringLocal.set(tabs.length()); return retVal; } }