use of com.pratilipi.data.type.Page in project pratilipi by Pratilipi.
the class AuthorProcessApi method _validateAuthorData.
private void _validateAuthorData(Long authorId) throws InvalidArgumentException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Author author = dataAccessor.getAuthor(authorId);
Page page = dataAccessor.getPage(PageType.AUTHOR, authorId);
// DELETED Author can not have a Page entity linked.
if (author.getState() == AuthorState.DELETED && page != null)
throw new InvalidArgumentException("DELETED Author has a non-deleted Page entity.");
// Non-DELETED Author must have a page entity linked.
if (author.getState() != AuthorState.DELETED && page == null)
throw new InvalidArgumentException("Page entity is missing for the Author.");
// Pratilipi Entities linked with the Author.
PratilipiFilter pratilipiFilter = new PratilipiFilter();
pratilipiFilter.setAuthorId(authorId);
pratilipiFilter.setState(PratilipiState.PUBLISHED);
List<Pratilipi> pratilipiList = dataAccessor.getPratilipiList(pratilipiFilter, null, null).getDataList();
// DELETED Author cannot have non-DELETED Pratilipi entities linked.
if (author.getState() == AuthorState.DELETED) {
if (pratilipiList.size() != 0)
throw new InvalidArgumentException("DELETED Author has " + pratilipiList.size() + " non-deleted Pratilipi Entities linked.");
return;
}
// Author having Pratilipi entites linked, can not have his/her language set to null.
if (author.getLanguage() == null && pratilipiList.size() != 0)
throw new InvalidArgumentException("Author has " + pratilipiList.size() + " non-deleted Pratilipi Entities linked but his/her language is not set.");
// Count of Pratilipi Entities in each language.
Map<Language, Integer> langCount = new HashMap<>();
for (Pratilipi pratilipi : pratilipiList) {
if (pratilipi.getState() != PratilipiState.PUBLISHED)
continue;
Integer count = langCount.get(pratilipi.getLanguage());
count = count == null ? 1 : count++;
langCount.put(pratilipi.getLanguage(), count);
}
// Author, having Pratilipi entities in just one language, must have the same set as his/her profile language.
if (langCount.keySet().size() == 1) {
Language language = langCount.keySet().iterator().next();
if (langCount.get(language) > 1 && author.getLanguage() != language)
throw new InvalidArgumentException("Author has " + author.getLanguage() + " as his/her profile language but all his/her content pieces are in " + language + ".");
}
// At least one of four name fields must be set.
if (author.getFirstName() == null && author.getLastName() == null && author.getFirstNameEn() == null && author.getLastNameEn() == null)
throw new InvalidArgumentException("Author name is missing.");
// Name fields must not have empty string.
if ((author.getFirstName() != null && author.getFirstName().trim().isEmpty()) || (author.getLastName() != null && author.getLastName().trim().isEmpty()) || (author.getFirstNameEn() != null && author.getFirstNameEn().trim().isEmpty()) || (author.getLastNameEn() != null && author.getLastNameEn().trim().isEmpty()))
throw new InvalidArgumentException("Author name has empty string.");
}
use of com.pratilipi.data.type.Page in project pratilipi by Pratilipi.
the class PageApi method get.
@Get
public Response get(GetRequest request) throws InvalidArgumentException, UnexpectedServerException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
if (request.uri.startsWith("/read?id=")) {
// TODO: Remove this as soon as READ uri(s) are added to Page table.
String pratilipiId = request.uri.substring("/read?id=".length());
if (pratilipiId.indexOf('&') != -1)
pratilipiId = pratilipiId.substring(0, pratilipiId.indexOf('&'));
return new Response(PageType.READ, Long.parseLong(pratilipiId));
}
Page page = dataAccessor.getPage(request.uri);
if (page == null && request.uri.contains("?"))
page = dataAccessor.getPage(request.uri.substring(0, request.uri.indexOf("?")));
if (page != null)
return new Response(page.getType(), page.getPrimaryContentId());
if (request.uri.matches("^/[a-z0-9-]+$")) {
// TODO: Remove this as soon as CATEGORY_LIST uri(s) are added to Page table.
try {
String folder = DataAccessor.class.getResource("curated/").toURI().getPath();
for (String fileName : new File(folder).list()) if (fileName.matches("list[.]\\w\\w[.]" + request.uri.substring(1)))
return new Response(PageType.CATEGORY_LIST, fileName.substring(fileName.lastIndexOf('.') + 1));
} catch (URISyntaxException e) {
logger.log(Level.SEVERE, "Failed to list category list files.", e);
throw new UnexpectedServerException();
}
}
JsonObject errorMessages = new JsonObject();
errorMessages.addProperty("uri", "Invalid uri !");
throw new InvalidArgumentException(errorMessages);
}
use of com.pratilipi.data.type.Page in project pratilipi by Pratilipi.
the class BatchProcessApi method post.
@Post
public GenericResponse post(PostRequest request) throws InvalidArgumentException, InsufficientAccessException {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
if (request.type == BatchProcessType.NOTIFACTION_BY_AUTHOR_FILTER) {
Page page = null;
JsonObject errorMessages = new JsonObject();
if (request.message == null || request.message.trim().isEmpty())
errorMessages.addProperty("message", "message is required !");
if (request.sourceUri == null || request.sourceUri.trim().isEmpty())
errorMessages.addProperty("sourceUri", "sourceUri is required !");
else if ((page = dataAccessor.getPage(request.sourceUri)) == null)
errorMessages.addProperty("sourceUri", "Invalid url !");
else if (page.getType() != PageType.PRATILIPI)
errorMessages.addProperty("sourceUri", "Must be a content url !");
if (errorMessages.size() != 0)
throw new InvalidArgumentException(errorMessages);
AuthorFilter authorFilter = new AuthorFilter();
authorFilter.setLanguage(request.language);
authorFilter.setState(AuthorState.ACTIVE);
// Creating Init Doc
JsonObject initDoc = new JsonObject();
initDoc.add("authorFilter", new Gson().toJsonTree(authorFilter));
// Creating Exec Doc
JsonObject execDoc = new JsonObject();
execDoc.addProperty("message", request.message);
execDoc.addProperty("sourceId", page.getPrimaryContentId().toString());
execDoc.addProperty("type", NotificationType.PRATILIPI.toString());
BatchProcessDataUtil.createBatchProcess(request.type, initDoc.toString(), execDoc.toString(), request.language);
}
return new GenericResponse();
}
use of com.pratilipi.data.type.Page in project pratilipi by Pratilipi.
the class EventDataUtil method _updateEventPageUrl.
private static Page _updateEventPageUrl(Event event) {
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Page page = dataAccessor.getPage(PageType.EVENT, event.getId());
boolean isNew = page == null;
if (isNew) {
page = dataAccessor.newPage();
page.setType(PageType.EVENT);
page.setUri(PageType.EVENT.getUrlPrefix() + event.getId());
page.setPrimaryContentId(event.getId());
page.setCreationDate(new Date());
}
String uriAlias = UriAliasUtil.generateUriAlias(page.getUriAlias(), PageType.EVENT.getUrlPrefix(), event.getNameEn() == null ? event.getName() : event.getNameEn());
if (isNew && uriAlias == null) {
// Do NOT return.
} else if (uriAlias == page.getUriAlias() || (uriAlias != null && uriAlias.equals(page.getUriAlias())) || (page.getUriAlias() != null && page.getUriAlias().equals(uriAlias))) {
// Do Nothing.
return null;
} else {
logger.log(Level.INFO, "Updating Event Page Url: '" + page.getUriAlias() + "' -> '" + uriAlias + "'");
page.setUriAlias(uriAlias);
}
return page;
}
use of com.pratilipi.data.type.Page in project pratilipi by Pratilipi.
the class EventDataUtil method saveEventData.
public static EventData saveEventData(EventData eventData) throws InvalidArgumentException, InsufficientAccessException {
_validateEventDataForSave(eventData);
boolean isNew = eventData.getId() == null;
DataAccessor dataAccessor = DataAccessorFactory.getDataAccessor();
Event event = isNew ? dataAccessor.newEvent() : dataAccessor.getEvent(eventData.getId());
if (isNew && !hasAccessToAddEventData(eventData))
throw new InsufficientAccessException();
if (!isNew && !hasAccessToUpdateEventData(event, eventData))
throw new InsufficientAccessException();
AuditLog auditLog = dataAccessor.newAuditLog(AccessTokenFilter.getAccessToken(), isNew ? AccessType.EVENT_ADD : AccessType.EVENT_UPDATE, event);
if (eventData.hasName())
event.setName(eventData.getName());
if (eventData.hasNameEn())
event.setNameEn(eventData.getNameEn());
if (eventData.hasLanguage())
event.setLanguage(eventData.getLanguage());
if (eventData.hasDescription())
event.setDescription(eventData.getDescription());
if (eventData.hasPratilipiUrlList()) {
if (eventData.getPratilipiUrlList() == null) {
eventData.setPratilipiIdList(null);
} else {
List<Long> pratilipiIdList = new LinkedList<>();
Map<String, Page> map = dataAccessor.getPages(eventData.getPratilipiUrlList());
for (String pratilipiUrl : eventData.getPratilipiUrlList()) {
Page page = map.get(pratilipiUrl);
if (page != null && page.getType() == PageType.PRATILIPI)
pratilipiIdList.add(page.getPrimaryContentId());
}
event.setPratilipiIdList(pratilipiIdList);
}
}
if (isNew)
event.setCreationDate(new Date());
event.setLastUpdated(new Date());
if (isNew) {
event = dataAccessor.createOrUpdateEvent(event, auditLog);
dataAccessor.createOrUpdatePage(_updateEventPageUrl(event));
} else {
event = dataAccessor.createOrUpdateEvent(event, _updateEventPageUrl(event), auditLog);
}
return createEventData(event, true);
}
Aggregations