Search in sources :

Example 31 with Page

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.");
}
Also used : PratilipiFilter(com.pratilipi.common.util.PratilipiFilter) InvalidArgumentException(com.pratilipi.common.exception.InvalidArgumentException) Language(com.pratilipi.common.type.Language) HashMap(java.util.HashMap) DataAccessor(com.pratilipi.data.DataAccessor) Author(com.pratilipi.data.type.Author) Page(com.pratilipi.data.type.Page) Pratilipi(com.pratilipi.data.type.Pratilipi)

Example 32 with Page

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);
}
Also used : GenericResponse(com.pratilipi.api.shared.GenericResponse) UnexpectedServerException(com.pratilipi.common.exception.UnexpectedServerException) InvalidArgumentException(com.pratilipi.common.exception.InvalidArgumentException) DataAccessor(com.pratilipi.data.DataAccessor) JsonObject(com.google.gson.JsonObject) Page(com.pratilipi.data.type.Page) URISyntaxException(java.net.URISyntaxException) File(java.io.File) Get(com.pratilipi.api.annotation.Get)

Example 33 with Page

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();
}
Also used : InvalidArgumentException(com.pratilipi.common.exception.InvalidArgumentException) GenericResponse(com.pratilipi.api.shared.GenericResponse) DataAccessor(com.pratilipi.data.DataAccessor) AuthorFilter(com.pratilipi.common.util.AuthorFilter) JsonObject(com.google.gson.JsonObject) Gson(com.google.gson.Gson) Page(com.pratilipi.data.type.Page) Post(com.pratilipi.api.annotation.Post)

Example 34 with Page

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;
}
Also used : DataAccessor(com.pratilipi.data.DataAccessor) Page(com.pratilipi.data.type.Page) Date(java.util.Date)

Example 35 with 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);
}
Also used : DataAccessor(com.pratilipi.data.DataAccessor) Event(com.pratilipi.data.type.Event) Page(com.pratilipi.data.type.Page) InsufficientAccessException(com.pratilipi.common.exception.InsufficientAccessException) AuditLog(com.pratilipi.data.type.AuditLog) LinkedList(java.util.LinkedList) Date(java.util.Date)

Aggregations

Page (com.pratilipi.data.type.Page)37 DataAccessor (com.pratilipi.data.DataAccessor)28 ArrayList (java.util.ArrayList)12 Pratilipi (com.pratilipi.data.type.Pratilipi)10 Author (com.pratilipi.data.type.Author)8 Date (java.util.Date)8 HashMap (java.util.HashMap)7 UserPratilipi (com.pratilipi.data.type.UserPratilipi)6 JsonObject (com.google.gson.JsonObject)5 InvalidArgumentException (com.pratilipi.common.exception.InvalidArgumentException)5 GenericResponse (com.pratilipi.api.shared.GenericResponse)4 UnexpectedServerException (com.pratilipi.common.exception.UnexpectedServerException)4 Event (com.pratilipi.data.type.Event)4 LinkedList (java.util.LinkedList)4 Gson (com.google.gson.Gson)3 Post (com.pratilipi.api.annotation.Post)3 DocAccessor (com.pratilipi.data.DocAccessor)3 AuthorData (com.pratilipi.data.client.AuthorData)3 BlogPost (com.pratilipi.data.type.BlogPost)3 PratilipiV2Api (com.pratilipi.api.impl.pratilipi.PratilipiV2Api)2