// Path: mardao-core/src/main/java/net/sf/mardao/core/CursorPage.java
// public class CursorPage<T extends Object> implements Serializable {
//     
//     /** requested page size, not acutal */
//     @Deprecated
//     private transient int requestedPageSize;
//     
//     /** provide this to get next page */
//     private String cursorKey;
//     
//     /** the page of items */
//     private Collection<T> items;
// 
//     /**
//      * The total number of items available. Use for progress indication.
//      */
//     private Integer totalSize;
//     
//     public String getCursorKey() {
//         return cursorKey;
//     }
// 
//     public void setCursorKey(String cursorKey) {
//         this.cursorKey = cursorKey;
//     }
// 
//     public Collection<T> getItems() {
//         return items;
//     }
// 
//     public void setItems(Collection<T> items) {
//         this.items = items;
//     }
// 
//     @Deprecated
//     public int getRequestedPageSize() {
//         return requestedPageSize;
//     }
// 
//     @Deprecated
//     public void setRequestedPageSize(int requestedPageSize) {
//         this.requestedPageSize = requestedPageSize;
//     }
// 
//     public Integer getTotalSize() {
//         return totalSize;
//     }
// 
//     public void setTotalSize(Integer totalSize) {
//         this.totalSize = totalSize;
//     }
// 
// }
// 
// Path: mardao-core/src/main/java/net/sf/mardao/core/filter/Filter.java
// public class Filter {
//     private final String column;
//     private final FilterOperator operator;
//     private final Object operand;
// 
//     private Filter(String column, FilterOperator operation, Object operand) {
//         this.column = column;
//         this.operator = operation;
//         this.operand = operand;
//     }
// 
//     /** Builds an EqualsFilter */
//     public static Filter equalsFilter(String column, Object operand) {
//       return new Filter(column, FilterOperator.EQUALS, operand);
//     }
// 
//     /** Builds an InFilter */
//     public static Filter inFilter(String column, Object operand) {
//       return new Filter(column, FilterOperator.IN, operand);
//     }
// 
//     public static Filter greaterThan(String column, Object operand) {
//         return new Filter(column, FilterOperator.GREATER_THAN, operand);
//     }
// 
//     public static Filter greaterThanOrEquals(String column, Object operand) {
//         return new Filter(column, FilterOperator.GREATER_THAN_OR_EQUALS, operand);
//     }
// 
//     public static Filter lessThan(String column, Object operand) {
//         return new Filter(column, FilterOperator.LESS_THAN, operand);
//     }
// 
//     public static Filter notEqualsFilter(String column, Object operand) {
//       return new Filter(column, FilterOperator.NOT_EQUALS, operand);
//     }
// 
//     public String toString() {
//         return column + " " + operator + " " + operand;
//     }
// 
//     public String getColumn() {
//         return column;
//     }
// 
//     public FilterOperator getOperator() {
//         return operator;
//     }
// 
//     public Object getOperand() {
//         return operand;
//     }
// 
// }


import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import net.sf.mardao.core.CursorPage;
import net.sf.mardao.core.filter.Filter;
import java.io.IOException;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.*;
import java.util.concurrent.Callable;
  @Override
  public InMemoryKey writeValue(Object tx, Mapper mapper, InMemoryKey key, Map<String, Object> core) throws IOException {
    // assign long key?
    if (null == key.getName()) {
      key = InMemoryKey.of(key.getParentKey(), key.getKind(), Long.toString(Math.round(Math.random() * Long.MAX_VALUE)));
    }
    kindStore(key).put(key.getName(), core);
    return key;
  }

  @Override
  public InMemoryKey toKey(InMemoryKey parentKey, String kind, Serializable id) {
    return InMemoryKey.of(parentKey, kind, null != id ? id.toString() : null);
  }

  @Override
  public Long toLongKey(InMemoryKey key) {
    return null != key ? Long.parseLong(key.getName()) : null;
  }

  @Override
  public String toStringKey(InMemoryKey key) {
    return null != key ? key.getName() : null;
  }

  @Override
  public InMemoryKey toParentKey(InMemoryKey key) {
    return null != key ? key.getParentKey() : null;
  }

// Path: mardao-core/src/main/java/net/sf/mardao/core/CursorPage.java
// public class CursorPage<T extends Object> implements Serializable {
//     
//     /** requested page size, not acutal */
//     @Deprecated
//     private transient int requestedPageSize;
//     
//     /** provide this to get next page */
//     private String cursorKey;
//     
//     /** the page of items */
//     private Collection<T> items;
// 
//     /**
//      * The total number of items available. Use for progress indication.
//      */
//     private Integer totalSize;
//     
//     public String getCursorKey() {
//         return cursorKey;
//     }
// 
//     public void setCursorKey(String cursorKey) {
//         this.cursorKey = cursorKey;
//     }
// 
//     public Collection<T> getItems() {
//         return items;
//     }
// 
//     public void setItems(Collection<T> items) {
//         this.items = items;
//     }
// 
//     @Deprecated
//     public int getRequestedPageSize() {
//         return requestedPageSize;
//     }
// 
//     @Deprecated
//     public void setRequestedPageSize(int requestedPageSize) {
//         this.requestedPageSize = requestedPageSize;
//     }
// 
//     public Integer getTotalSize() {
//         return totalSize;
//     }
// 
//     public void setTotalSize(Integer totalSize) {
//         this.totalSize = totalSize;
//     }
// 
// }
// 
// Path: mardao-core/src/main/java/net/sf/mardao/core/filter/Filter.java
// public class Filter {
//     private final String column;
//     private final FilterOperator operator;
//     private final Object operand;
// 
//     private Filter(String column, FilterOperator operation, Object operand) {
//         this.column = column;
//         this.operator = operation;
//         this.operand = operand;
//     }
// 
//     /** Builds an EqualsFilter */
//     public static Filter equalsFilter(String column, Object operand) {
//       return new Filter(column, FilterOperator.EQUALS, operand);
//     }
// 
//     /** Builds an InFilter */
//     public static Filter inFilter(String column, Object operand) {
//       return new Filter(column, FilterOperator.IN, operand);
//     }
// 
//     public static Filter greaterThan(String column, Object operand) {
//         return new Filter(column, FilterOperator.GREATER_THAN, operand);
//     }
// 
//     public static Filter greaterThanOrEquals(String column, Object operand) {
//         return new Filter(column, FilterOperator.GREATER_THAN_OR_EQUALS, operand);
//     }
// 
//     public static Filter lessThan(String column, Object operand) {
//         return new Filter(column, FilterOperator.LESS_THAN, operand);
//     }
// 
//     public static Filter notEqualsFilter(String column, Object operand) {
//       return new Filter(column, FilterOperator.NOT_EQUALS, operand);
//     }
// 
//     public String toString() {
//         return column + " " + operator + " " + operand;
//     }
// 
//     public String getColumn() {
//         return column;
//     }
// 
//     public FilterOperator getOperator() {
//         return operator;
//     }
// 
//     public Object getOperand() {
//         return operand;
//     }
// 
// }


// Path: mardao-core/src/main/java/net/sf/mardao/dao/InMemorySupplier.java
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
import net.sf.mardao.core.CursorPage;
import net.sf.mardao.core.filter.Filter;
import java.io.IOException;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.*;
import java.util.concurrent.Callable;

  @Override
  public InMemoryKey writeValue(Object tx, Mapper mapper, InMemoryKey key, Map<String, Object> core) throws IOException {
    // assign long key?
    if (null == key.getName()) {
      key = InMemoryKey.of(key.getParentKey(), key.getKind(), Long.toString(Math.round(Math.random() * Long.MAX_VALUE)));
    }
    kindStore(key).put(key.getName(), core);
    return key;
  }

  @Override
  public InMemoryKey toKey(InMemoryKey parentKey, String kind, Serializable id) {
    return InMemoryKey.of(parentKey, kind, null != id ? id.toString() : null);
  }

  @Override
  public Long toLongKey(InMemoryKey key) {
    return null != key ? Long.parseLong(key.getName()) : null;
  }

  @Override
  public String toStringKey(InMemoryKey key) {
    return null != key ? key.getName() : null;
  }

  @Override
  public InMemoryKey toParentKey(InMemoryKey key) {
    return null != key ? key.getParentKey() : null;
  }

  protected Map<String, Map<String, Object>> kindStore(InMemoryKey key) {