/**
* Autogenerated by Jack
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
*/
package com.rapleaf.jack.test_project.database_1.mock_impl;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import java.util.Iterator;
import java.util.HashSet;
import java.io.IOException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Date;
import java.sql.Timestamp;
import com.rapleaf.jack.AbstractMockDatabaseModel;
import com.rapleaf.jack.queries.ModelQuery;
import com.rapleaf.jack.ModelWithId;
import com.rapleaf.jack.queries.WhereConstraint;
import com.rapleaf.jack.queries.QueryOrder;
import com.rapleaf.jack.queries.LimitCriterion;
import com.rapleaf.jack.queries.OrderCriterion;
import com.rapleaf.jack.test_project.database_1.models.Post;
import com.rapleaf.jack.test_project.database_1.models.Post.Id;
import com.rapleaf.jack.test_project.database_1.iface.IPostPersistence;
import com.rapleaf.jack.test_project.database_1.query.PostQueryBuilder;
import com.rapleaf.jack.test_project.IDatabases;
public class BaseMockPostPersistenceImpl extends AbstractMockDatabaseModel<Post, IDatabases> implements IPostPersistence {
private final IDatabases databases;
private static AtomicInteger curId = new AtomicInteger(1);
public BaseMockPostPersistenceImpl(IDatabases databases) {
super(databases);
this.databases = databases;
}
@Override
public Post create(Map<Enum, Object> fieldsMap) throws IOException {
String title = (String) fieldsMap.get(Post._Fields.title);
Long posted_at_millis = (Long) fieldsMap.get(Post._Fields.posted_at_millis);
Integer user_id = (Integer) fieldsMap.get(Post._Fields.user_id);
Long updated_at = (Long) fieldsMap.get(Post._Fields.updated_at);
return create(title, posted_at_millis, user_id, updated_at);
}
public Post create(final String title, final Long posted_at_millis, final Integer user_id, final Long updated_at) throws IOException {
long __id = curId.getAndIncrement();
Post newInst = new Post(__id, title, posted_at_millis, user_id, updated_at, databases);
records.put(__id, newInst);
clearForeignKeyCache();
return newInst.getCopy();
}
public Post create() throws IOException {
long __id = curId.getAndIncrement();
Post newInst = new Post(__id, null, null, null, null, databases);
records.put(__id, newInst);
clearForeignKeyCache();
return newInst.getCopy();
}
public Post createDefaultInstance() throws IOException {
return create();
}
public Set<Post> find(Map<Enum, Object> fieldsMap) throws IOException {
return super.realFind(fieldsMap);
}
public Set<Post> find(Set<Long> ids, Map<Enum, Object> fieldsMap) throws IOException {
return super.realFind(ids, fieldsMap);
}
public Set<Post> find(ModelQuery query) throws IOException {
Set<Post> allResults = super.realFind(query);
LimitCriterion limitCriterion = query.getLimitCriterion();
if(limitCriterion == null) {
return allResults;
}
int i = 0;
Set<Post> truncatedSet = new HashSet<Post>();
Iterator<Post> iterator = allResults.iterator();
while(iterator.hasNext() && i < limitCriterion.getNResults()) {
truncatedSet.add(iterator.next());
i++;
}
return truncatedSet;
}
public List<Post> findWithOrder(ModelQuery query) throws IOException {
List<Post> allResults = sortUnorderedMockQuery(super.realFind(query), query);
LimitCriterion limitCriterion = query.getLimitCriterion();
if(limitCriterion == null) {
return allResults;
}
return allResults.subList(limitCriterion.getOffset(), limitCriterion.getNResults() + limitCriterion.getOffset());
}
private List<Post> sortUnorderedMockQuery(Set<Post> unorderedResult, ModelQuery query) {
final List<OrderCriterion> orderCriteria = query.getOrderCriteria();
List<Post> result = new ArrayList<Post>(unorderedResult);
Collections.sort(result, new Comparator<Post>() {
public int compare(Post t1, Post t2) {
for (OrderCriterion orderCriterion : orderCriteria) {
int compareResult;
Enum field = orderCriterion.getField();
String fieldName = field != null ? field.toString() : "id";
Object o1 = field != null ? t1.getField(fieldName) : t1.getId();
Object o2 = field != null ? t2.getField(fieldName) : t2.getId();
if (o1 instanceof java.lang.Comparable) {
compareResult = ((Comparable) o1).compareTo(o2);
} else {
compareResult = Integer.valueOf(o1.hashCode()).compareTo(o2.hashCode());
}
int orderDirection = (orderCriterion.getOrder() == QueryOrder.ASC) ? 1 : -1;
compareResult = compareResult * orderDirection;
if (compareResult != 0) {
if (compareResult < 0) {
return -1;
} else {
return 1;
}
}
}
return 0;
}
});
return result;
}
public Set<Post> findByTitle(final String value) throws IOException {
return find(new HashMap<Enum, Object>(){{put(Post._Fields.title, value);}});
}
public Set<Post> findByPostedAtMillis(final Long value) throws IOException {
return find(new HashMap<Enum, Object>(){{put(Post._Fields.posted_at_millis, value);}});
}
public Set<Post> findByUserId(final Integer value) throws IOException {
return find(new HashMap<Enum, Object>(){{put(Post._Fields.user_id, value);}});
}
public Set<Post> findByUpdatedAt(final Long value) throws IOException {
return find(new HashMap<Enum, Object>(){{put(Post._Fields.updated_at, value);}});
}
public PostQueryBuilder query() {
return new PostQueryBuilder(this);
}
}