use of com.googlecode.objectify.Key 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.googlecode.objectify.Key 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());
}
}
use of com.googlecode.objectify.Key in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method createOrUpdateEntity.
private <T extends GenericOfyType> T createOrUpdateEntity(T entity, Page page, AuditLog auditLog) {
if (entity.getKey() == null) {
if (page == null) {
Key<T> key = ObjectifyService.ofy().save().entity(entity).now();
entity.setKey(key);
} else {
Map<Key<GenericOfyType>, GenericOfyType> map = ObjectifyService.ofy().save().entities(entity, page).now();
for (Key<GenericOfyType> key : map.keySet()) map.get(key).setKey(key);
}
if (entity.getKey().getName() == null)
auditLog.setPrimaryContentId(entity.getKey().getId());
else
auditLog.setPrimaryContentId(entity.getKey().getName());
auditLog.setEventDataNew(entity);
auditLog.setCreationDate(new Date());
Key<AuditLog> key = ObjectifyService.ofy().save().entity(auditLog).now();
auditLog.setKey(key);
} else {
if (entity.getKey().getName() == null)
auditLog.setPrimaryContentId(entity.getKey().getId());
else
auditLog.setPrimaryContentId(entity.getKey().getName());
auditLog.setEventDataNew(entity);
auditLog.setCreationDate(new Date());
Map<Key<GenericOfyType>, GenericOfyType> map = page == null ? ObjectifyService.ofy().save().entities(entity, auditLog).now() : ObjectifyService.ofy().save().entities(entity, page, auditLog).now();
for (Key<GenericOfyType> key : map.keySet()) map.get(key).setKey(key);
}
if (page != null)
// Updating additional page memcache ids
_createOrUpdatePageMemcache(page);
return entity;
}
use of com.googlecode.objectify.Key in project pratilipi by Pratilipi.
the class PratilipiBackupApi method get.
@Get
public GenericResponse get(GetRequest request) throws UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
// Fetching Cursor from AppProperty
AppProperty appProperty = dataAccessor.getAppProperty(AppProperty.API_PRATILIPI_BACKUP);
if (appProperty == null)
appProperty = dataAccessor.newAppProperty(AppProperty.API_PRATILIPI_BACKUP);
Cursor cursor = appProperty.getValue() == null ? null : Cursor.fromWebSafeString((String) appProperty.getValue());
QueryResultIterator<Key<PratilipiEntity>> itr = ObjectifyService.ofy().load().type(PratilipiEntity.class).filter("LAST_UPDATED >=", // Thu Dec 01 00:00:00 IST 2016
new Date(1480530600000L)).order("LAST_UPDATED").startAt(cursor).keys().iterator();
int batchSize = 1000;
List<Task> taskList = new ArrayList<>(batchSize);
while (itr.hasNext()) {
TaskQueueFactory.getPratilipiTaskQueue().add(TaskQueueFactory.newTask().setUrl("/pratilipi/backup").addParam("pratilipiId", itr.next().getId() + ""));
if (taskList.size() == batchSize || !itr.hasNext()) {
TaskQueueFactory.getPratilipiTaskQueue().addAll(taskList);
taskList.clear();
}
}
// Updating Cursor to AppProperty
appProperty.setValue(itr.getCursor().toWebSafeString());
dataAccessor.createOrUpdateAppProperty(appProperty);
/* DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
BlobAccessor blobAccessor = DataAccessorFactory.getBlobAccessorBackup();
Date backupDate = new Date();
DateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
DateFormat csvDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm" );
DateFormat dateTimeFormat = new SimpleDateFormat( "yyyy-MM-dd-HH:mm-z" );
dateFormat.setTimeZone( TimeZone.getTimeZone( "Asia/Kolkata" ) );
csvDateFormat.setTimeZone( TimeZone.getTimeZone( "Asia/Kolkata" ) );
dateTimeFormat.setTimeZone( TimeZone.getTimeZone( "Asia/Kolkata" ) );
StringBuilder backup = new StringBuilder();
StringBuilder csv = new StringBuilder( CSV_HEADER + LINE_SEPARATOR );
int count = 0;
String cursor = null;
PratilipiFilter pratilipiFilter = new PratilipiFilter();
Gson gson = new GsonBuilder().registerTypeAdapter( Date.class, new GsonIstDateAdapter() ).create();
while( true ) {
DataListCursorTuple<Pratilipi> pratilipiListCursorTuple = dataAccessor.getPratilipiList( pratilipiFilter, cursor, 1000 );
List<Pratilipi> pratilipiList = pratilipiListCursorTuple.getDataList();
for( Pratilipi pratilipi : pratilipiList ) {
backup.append( gson.toJson( pratilipi ) + LINE_SEPARATOR );
if( request.generateCsv != null && request.generateCsv )
csv.append( "'" + pratilipi.getId() )
.append( CSV_SEPARATOR ).append( pratilipi.getAuthorId() == null ? "" : "'" + pratilipi.getAuthorId() )
.append( CSV_SEPARATOR ).append( pratilipi.getTitle() == null ? "" : "\"" + pratilipi.getTitle().replace( "\"", "\"\"" ) + "\"" )
.append( CSV_SEPARATOR ).append( pratilipi.getTitleEn() == null ? "" : "\"" + pratilipi.getTitleEn().replace( "\"", "\"\"" ) + "\"" )
.append( CSV_SEPARATOR ).append( pratilipi.getLanguage() )
.append( CSV_SEPARATOR ).append( pratilipi.getSummary() != null && pratilipi.getSummary().trim().length() != 0 )
.append( CSV_SEPARATOR ).append( pratilipi.getType() )
.append( CSV_SEPARATOR ).append( pratilipi.getContentType() )
.append( CSV_SEPARATOR ).append( pratilipi.getState() )
.append( CSV_SEPARATOR ).append( pratilipi.getCoverImage() != null )
.append( CSV_SEPARATOR ).append( csvDateFormat.format( pratilipi.getListingDate() ) )
.append( CSV_SEPARATOR ).append( pratilipi.getReviewCount() )
.append( CSV_SEPARATOR ).append( pratilipi.getRatingCount() )
.append( CSV_SEPARATOR ).append( pratilipi.getTotalRating() )
.append( CSV_SEPARATOR ).append( pratilipi.getReadCount() )
.append( LINE_SEPARATOR );
}
count = count + pratilipiList.size();
if( pratilipiList.size() < 1000 )
break;
else
cursor = pratilipiListCursorTuple.getCursor();
}
String fileName = "datastore.pratilipi/"
+ dateFormat.format( backupDate ) + "/"
+ "pratilipi-" + dateTimeFormat.format( backupDate );
BlobEntry pratilipiBackupEntry = blobAccessor.newBlob(
fileName,
backup.toString().getBytes( Charset.forName( "UTF-8" ) ),
"text/plain" );
blobAccessor.createOrUpdateBlob( pratilipiBackupEntry );
if( request.generateCsv != null && request.generateCsv ) {
BlobEntry authorCsvEntry = blobAccessor.newBlob(
"datastore/pratilipi.csv",
csv.toString().getBytes( Charset.forName( "UTF-8" ) ),
"text/csv" );
blobAccessor.createOrUpdateBlob( authorCsvEntry );
}
logger.log( Level.INFO, "Backed up " + count + " Pratilipi Entities." );
*/
return new GenericResponse();
}
use of com.googlecode.objectify.Key in project pratilipi by Pratilipi.
the class DataAccessorGaeImpl method getUserList.
@SuppressWarnings("unchecked")
private <T> DataListCursorTuple<T> getUserList(String cursorStr, Integer resultCount, boolean idOnly) {
Query<UserEntity> query = ObjectifyService.ofy().load().type(UserEntity.class);
if (cursorStr != null)
query = query.startAt(Cursor.fromWebSafeString(cursorStr));
if (resultCount != null && resultCount > 0)
query = query.limit(resultCount);
List<T> dataList = resultCount == null ? new ArrayList<T>() : new ArrayList<T>(resultCount);
Cursor cursor = null;
if (idOnly) {
QueryResultIterator<Key<UserEntity>> iterator = query.keys().iterator();
while (iterator.hasNext()) dataList.add((T) (Long) iterator.next().getId());
cursor = iterator.getCursor();
} else {
QueryResultIterator<UserEntity> iterator = query.iterator();
while (iterator.hasNext()) dataList.add((T) iterator.next());
cursor = iterator.getCursor();
}
return new DataListCursorTuple<T>(dataList, cursor == null ? null : cursor.toWebSafeString());
}
Aggregations