use of com.google.appengine.api.datastore.Cursor in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method _getAuthorList.
@SuppressWarnings("unchecked")
private <T> DataListCursorTuple<T> _getAuthorList(AuthorFilter authorFilter, String cursorStr, Integer resultCount, boolean idOnly) {
Query<AuthorEntity> query = ObjectifyService.ofy().load().type(AuthorEntity.class);
if (authorFilter.getLanguage() != null)
query = query.filter("LANGUAGE", authorFilter.getLanguage());
if (authorFilter.getState() != null)
query = query.filter("STATE", authorFilter.getState());
if (authorFilter.getMinLastUpdated() != null) {
query = query.filter(authorFilter.isMinLastUpdatedInclusive() ? "LAST_UPDATED >=" : "LAST_UPDATED >", authorFilter.getMinLastUpdated());
query = query.order("LAST_UPDATED");
}
if (authorFilter.getOrderByContentPublished() != null)
query = query.order(authorFilter.getOrderByContentPublished() ? "CONTENT_PUBLISHED" : "-CONTENT_PUBLISHED");
if (cursorStr != null)
query = query.startAt(Cursor.fromWebSafeString(cursorStr));
if (resultCount != null)
query = query.limit(resultCount);
List<T> responseList = resultCount == null ? new ArrayList<T>() : new ArrayList<T>(resultCount);
Cursor cursor = null;
if (idOnly) {
QueryResultIterator<Key<AuthorEntity>> iterator = query.keys().iterator();
while (iterator.hasNext()) responseList.add((T) (Long) iterator.next().getId());
cursor = iterator.getCursor();
} else {
QueryResultIterator<AuthorEntity> iterator = query.iterator();
while (iterator.hasNext()) responseList.add((T) iterator.next());
cursor = iterator.getCursor();
}
return new DataListCursorTuple<T>(responseList, cursor == null ? null : cursor.toWebSafeString());
}
use of com.google.appengine.api.datastore.Cursor in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method getUserPratilipiList.
@Override
public DataListCursorTuple<UserPratilipi> getUserPratilipiList(Long userId, Long pratilipiId, String cursorStr, Integer resultCount, boolean sortByReviewDate) {
Query<UserPratilipiEntity> query = ObjectifyService.ofy().load().type(UserPratilipiEntity.class);
if (userId != null)
query = query.filter("USER_ID", userId);
if (pratilipiId != null)
query = query.filter("PRATILIPI_ID", pratilipiId);
if (cursorStr != null)
query = query.startAt(Cursor.fromWebSafeString(cursorStr));
if (resultCount != null && resultCount > 0)
query = query.limit(resultCount);
if (sortByReviewDate)
query = query.order("REVIEW_DATE");
QueryResultIterator<UserPratilipiEntity> iterator = query.iterator();
// UserPratilipi List
ArrayList<UserPratilipi> userPratilipiList = resultCount == null ? new ArrayList<UserPratilipi>() : new ArrayList<UserPratilipi>(resultCount);
while (iterator.hasNext()) userPratilipiList.add(iterator.next());
// Cursor
Cursor cursor = iterator.getCursor();
return new DataListCursorTuple<UserPratilipi>(userPratilipiList, cursor == null ? null : cursor.toWebSafeString());
}
use of com.google.appengine.api.datastore.Cursor in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method getAuditLogList.
@Override
public DataListCursorTuple<AuditLog> getAuditLogList(Date minCreationDate, String cursorStr, Integer resultCount) {
Query<AuditLogEntity> query = ObjectifyService.ofy().load().type(AuditLogEntity.class);
if (minCreationDate != null) {
query = query.filter("CREATION_DATE >=", minCreationDate);
query = query.order("CREATION_DATE");
}
if (cursorStr != null)
query = query.startAt(Cursor.fromWebSafeString(cursorStr));
if (resultCount != null)
query = query.limit(resultCount);
query = query.chunk(resultCount != null && resultCount < 1000 ? resultCount : 1000);
List<AuditLog> responseList = resultCount == null ? new ArrayList<AuditLog>() : new ArrayList<AuditLog>(resultCount);
QueryResultIterator<AuditLogEntity> iterator = query.iterator();
while (iterator.hasNext() && (resultCount == null || responseList.size() != resultCount)) responseList.add(iterator.next());
Cursor cursor = iterator.getCursor();
return new DataListCursorTuple<AuditLog>(responseList, cursor == null ? null : cursor.toWebSafeString());
}
use of com.google.appengine.api.datastore.Cursor in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method getUserLibrary.
@Override
public DataListCursorTuple<Long> getUserLibrary(Long userId, String cursorStr, Integer offset, Integer resultCount) {
Query<UserPratilipiEntity> query = ObjectifyService.ofy().load().type(UserPratilipiEntity.class).filter("USER_ID", userId).filter("ADDED_TO_LIB", true);
if (UxModeFilter.isAndroidApp())
query = query.order("ADDED_TO_LIB_DATE");
else
query = query.order("-ADDED_TO_LIB_DATE");
if (cursorStr != null)
query = query.startAt(Cursor.fromWebSafeString(cursorStr));
if (offset != null && offset > 0)
query = query.offset(offset);
if (resultCount != null && resultCount > 0)
query = query.limit(resultCount);
QueryResultIterator<UserPratilipiEntity> iterator = query.iterator();
// Pratilipi id list
ArrayList<Long> pratilipiIdList = resultCount == null ? new ArrayList<Long>() : new ArrayList<Long>(resultCount);
while (iterator.hasNext()) pratilipiIdList.add(iterator.next().getPratilipiId());
// Cursor
Cursor cursor = iterator.getCursor();
return new DataListCursorTuple<Long>(pratilipiIdList, cursor == null ? null : cursor.toWebSafeString());
}
use of com.google.appengine.api.datastore.Cursor in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method getPratilipiList.
@SuppressWarnings("unchecked")
private <T> DataListCursorTuple<T> getPratilipiList(PratilipiFilter pratilipiFilter, String cursorStr, Integer offset, Integer resultCount, boolean idOnly) {
if (pratilipiFilter.getListName() == null) {
Query<PratilipiEntity> query = ObjectifyService.ofy().load().type(PratilipiEntity.class);
if (pratilipiFilter.getAuthorId() != null)
query = query.filter("AUTHOR_ID", pratilipiFilter.getAuthorId());
if (pratilipiFilter.getLanguage() != null)
query = query.filter("LANGUAGE", pratilipiFilter.getLanguage());
if (pratilipiFilter.getType() != null)
query = query.filter("PRATILIPI_TYPE", pratilipiFilter.getType());
if (pratilipiFilter.getState() != null)
query = query.filter("STATE", pratilipiFilter.getState());
if (pratilipiFilter.getMinLastUpdated() != null) {
query = query.filter(pratilipiFilter.isMinLastUpdatedInclusive() ? "LAST_UPDATED >=" : "LAST_UPDATED >", pratilipiFilter.getMinLastUpdated());
query = query.order("LAST_UPDATED");
}
if (pratilipiFilter.getOrderByReadCount() != null)
query = query.order(pratilipiFilter.getOrderByReadCount() ? "READ_COUNT" : "-READ_COUNT");
if (pratilipiFilter.getOrderByLastUpdate() != null)
query = query.order(pratilipiFilter.getOrderByLastUpdate() ? "LAST_UPDATED" : "-LAST_UPDATED");
if (cursorStr != null)
query = query.startAt(Cursor.fromWebSafeString(cursorStr));
if (offset != null && offset > 0)
query = query.offset(offset);
if (resultCount != null && resultCount > 0)
query = query.limit(resultCount);
List<T> responseList = resultCount == null ? new ArrayList<T>() : new ArrayList<T>(resultCount);
Cursor cursor = null;
if (idOnly) {
QueryResultIterator<Key<PratilipiEntity>> iterator = query.keys().iterator();
while (iterator.hasNext()) responseList.add((T) (Long) iterator.next().getId());
cursor = iterator.getCursor();
} else {
QueryResultIterator<PratilipiEntity> iterator = query.iterator();
while (iterator.hasNext()) responseList.add((T) iterator.next());
cursor = iterator.getCursor();
}
return new DataListCursorTuple<T>(responseList, cursor == null ? null : cursor.toWebSafeString());
} else {
// Getting PratilipiList
String pratilipiIdListMemcacheId = "DataStore.Pratilipi-list." + pratilipiFilter.getLanguage().getCode() + "." + pratilipiFilter.getListName() + "?" + SystemProperty.STAGE;
ArrayList<Long> pratilipiIdList = memcache.get(pratilipiIdListMemcacheId);
if (pratilipiIdList == null) {
List<String> uriList = null;
String listName = "list." + pratilipiFilter.getLanguage().getCode() + "." + pratilipiFilter.getListName();
logger.log(Level.INFO, "List Name : " + listName);
try {
String fileName = CURATED_DATA_FOLDER + "/" + listName;
InputStream inputStream = DataAccessor.class.getResource(fileName).openStream();
uriList = IOUtils.readLines(inputStream, "UTF-8");
inputStream.close();
} catch (NullPointerException | IOException e) {
logger.log(Level.SEVERE, "Failed to fetch " + pratilipiFilter.getListName() + " list for " + pratilipiFilter.getLanguage() + ".", e);
return new DataListCursorTuple<T>(new ArrayList<T>(0), "0", 0L);
}
// Removing the first line having title.
uriList.remove(0);
// Removing empty lines.
for (int i = 0; i < uriList.size(); i++) {
String uri = uriList.get(i).trim();
if (uri.isEmpty()) {
uriList.remove(i);
i--;
continue;
} else {
uriList.set(i, uri);
}
}
// Fetching Pratilipi pages.
Map<String, Page> pratilipiPages = getPages(uriList);
// PratilipiIdList
pratilipiIdList = new ArrayList<>(uriList.size());
for (int i = 0; i < uriList.size(); i++) {
Page page = pratilipiPages.get(uriList.get(i));
if (page != null && page.getType() == PageType.PRATILIPI && !pratilipiIdList.contains(page.getPrimaryContentId()))
pratilipiIdList.add(page.getPrimaryContentId());
}
if (!WHITELIST_LISTNAME.contains(listName)) {
logger.log(Level.INFO, "Reshuffling List");
Collections.shuffle(pratilipiIdList, new Random());
}
memcache.put(pratilipiIdListMemcacheId, (ArrayList<Long>) pratilipiIdList, SystemProperty.STAGE == SystemProperty.STAGE_PROD ? 60 : 360);
}
// Getting UserPratilipiList
Long userId = AccessTokenFilter.getAccessToken().getUserId();
if (userId != 0L) {
String userContentsReadListMemcacheId = "DataStore.User-ContentsRead-list." + userId;
ArrayList<Long> userContentsReadList = memcache.get(userContentsReadListMemcacheId);
if (userContentsReadList == null) {
userContentsReadList = new ArrayList<>();
List<UserPratilipi> userPratilipiList = getUserPratilipiList(userId, null, null, null).getDataList();
// For better performance, new index is required with userId and lastOpenedDate filters.
for (UserPratilipi userPratilipi : userPratilipiList) {
if (userPratilipi.getLastOpenedDate() != null)
userContentsReadList.add(userPratilipi.getPratilipiId());
}
memcache.put(userContentsReadListMemcacheId, (ArrayList<Long>) userContentsReadList, SystemProperty.STAGE == SystemProperty.STAGE_PROD ? 60 : 360);
}
// move all read contents to bottom of the list.
// Find all read contents in the list
userContentsReadList.retainAll(pratilipiIdList);
// Remove already read content from the list
pratilipiIdList.removeAll(userContentsReadList);
// Append read content at end of the list
pratilipiIdList.addAll(userContentsReadList);
}
offset = (cursorStr == null ? 0 : Integer.parseInt(cursorStr)) + (offset == null || offset < 0 ? 0 : offset);
offset = Math.min(offset, pratilipiIdList.size());
resultCount = resultCount == null || resultCount > pratilipiIdList.size() - offset ? pratilipiIdList.size() - offset : resultCount;
List<T> responseList = idOnly ? (List<T>) pratilipiIdList.subList(offset, offset + resultCount) : (List<T>) getPratilipiList(pratilipiIdList.subList(offset, offset + resultCount));
return new DataListCursorTuple<T>(responseList, offset + resultCount + "", (long) pratilipiIdList.size());
}
}
Aggregations