Skip to content

Commit

Permalink
Issue 16767 fixes onpersonaendpoint (#16854)
Browse files Browse the repository at this point in the history
* #16252 format source. Introduce format checker on build. Alter style … (#16288)

* #16252 format source. Introduce format checker on build. Alter style files

* #16252 remove unwanted file

* #16252 remove unwanted file

* Updating commit reference for src/main/enterprise

* try different location for checkstyle.xml

* Revert "#16252 format source. Introduce format checker on build. Alter style … (#16288)" (#16291)

This reverts commit 05f9082.

* Updating commit reference for src/main/enterprise

* #16767 changes requested from fox

* #16767 Formatting the page persona

* #16767 implementing the filter on the pagination for personas per page

* #16767 now the persona contentlet is being retrive as hydrated

* language key

* #16767 fixing the persona output on the page render

* #16767 removing merge stuff
  • Loading branch information
jdotcms authored and jgambarios committed Jul 22, 2019
1 parent 84f7f8d commit 41cc4e4
Show file tree
Hide file tree
Showing 7 changed files with 65 additions and 20 deletions.
Expand Up @@ -152,7 +152,7 @@ public void init() throws DotSecurityException, DotDataException {
*/
@Test
public void testGetPersonalizedPersonasOnPage()
throws DotSecurityException, DotDataException {
throws Exception {

final MultiTreeAPI multiTreeAPI = APILocator.getMultiTreeAPI();
final String htmlPage = UUIDGenerator.generateUuid();
Expand All @@ -169,7 +169,7 @@ public void testGetPersonalizedPersonasOnPage()

when(request.getRequestURI()).thenReturn("/index");
final Response response = pageResource.getPersonalizedPersonasOnPage(request, new EmptyHttpResponse(),
null, 0, 10, "title", "ASC", htmlPage);
null, 0, 10, "title", "ASC", null, htmlPage);

final ResponseEntityView entityView = (ResponseEntityView)response.getEntity();
assertNotNull(entityView);
Expand Down
Expand Up @@ -11,7 +11,11 @@
import com.dotcms.rest.api.v1.personalization.PersonalizationPersonaPageViewPaginator;
import com.dotcms.util.PaginationUtil;
import com.dotcms.util.pagination.OrderDirection;
import com.dotmarketing.business.web.WebAPILocator;
import com.dotmarketing.util.UtilMethods;
import com.google.common.collect.ImmutableMap;
import com.liferay.portal.PortalException;
import com.liferay.portal.SystemException;
import org.glassfish.jersey.server.JSONP;
import com.dotcms.rest.InitDataObject;
import com.dotcms.rest.ResponseEntityView;
Expand Down Expand Up @@ -547,7 +551,8 @@ public Response getPersonalizedPersonasOnPage (@Context final HttpServletRequest
@QueryParam(PaginationUtil.PER_PAGE) final int perPage,
@DefaultValue("title") @QueryParam(PaginationUtil.ORDER_BY) final String orderbyParam,
@DefaultValue("ASC") @QueryParam(PaginationUtil.DIRECTION) final String direction,
@PathParam("pageId") final String pageId) {
@QueryParam("hostId") final String hostId,
@PathParam("pageId") final String pageId) throws SystemException, PortalException, DotDataException, DotSecurityException {

final User user = this.webResource.init(request, response, true).getUser();
final boolean respectFrontEndRoles = PageMode.get(request).respectAnonPerms;
Expand All @@ -557,8 +562,10 @@ public Response getPersonalizedPersonasOnPage (@Context final HttpServletRequest
final Map<String, Object> extraParams =
ImmutableMap.<String, Object>builder()
.put(PersonalizationPersonaPageViewPaginator.PAGE_ID, pageId)
.put("hostId", UtilMethods.isSet(hostId)?hostId: WebAPILocator.getHostWebAPI().getCurrentHost(request).getIdentifier())
.put("respectFrontEndRoles",respectFrontEndRoles).build();


final PaginationUtil paginationUtil = new PaginationUtil(new PersonalizationPersonaPageViewPaginator());

return paginationUtil.getPage(request, user, filter, page, perPage, orderbyParam,
Expand Down
@@ -1,6 +1,8 @@
package com.dotcms.rest.api.v1.personalization;

import com.dotmarketing.portlets.personas.model.Persona;
import com.dotmarketing.portlets.htmlpageasset.business.render.page.PageViewSerializer;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.Serializable;
import java.util.Map;
Expand All @@ -9,6 +11,7 @@
* Encapsulates the personalization for personas per page, if the persona
* @author jsanca
*/
@JsonSerialize(using = PersonalizationPersonaPageViewSerializer.class)
public class PersonalizationPersonaPageView implements Serializable {

private final String pageId;
Expand All @@ -20,7 +23,6 @@ public PersonalizationPersonaPageView(final String pageId,
this.persona = persona;
}


public String getPageId() {
return pageId;
}
Expand Down
Expand Up @@ -2,7 +2,6 @@

import com.dotcms.util.pagination.OrderDirection;
import com.dotcms.util.pagination.PaginatorOrdered;
import com.dotmarketing.beans.MultiTree;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotRuntimeException;
Expand All @@ -11,6 +10,7 @@
import com.dotmarketing.portlets.contentlet.business.ContentletAPI;
import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.dotmarketing.portlets.contentlet.transform.ContentletToMapTransformer;
import com.dotmarketing.portlets.contentlet.util.ContentletUtil;
import com.dotmarketing.portlets.personas.business.PersonaAPI;
import com.dotmarketing.portlets.personas.model.Persona;
import com.dotmarketing.util.Logger;
Expand All @@ -19,14 +19,14 @@
import com.liferay.portal.model.User;
import com.liferay.util.StringPool;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.stream.Collectors;

public class PersonalizationPersonaPageViewPaginator implements PaginatorOrdered<PersonalizationPersonaPageView> {

public static final String PAGE_ID = "pageId";
private static final String PERSONAS_QUERY = "+contentType:persona +live:true +deleted:false +working:true";
private static final String PERSONAS_QUERY = "+contentType:persona +live:true +deleted:false +working:true +conhost:";

private final PersonaAPI personaAPI;
private final MultiTreeAPI multiTreeAPI;
Expand All @@ -53,6 +53,13 @@ public PaginatedArrayList<PersonalizationPersonaPageView> getItems(final User us
final boolean respectFrontendRoles = (Boolean)extraParams.get("respectFrontEndRoles");
final String pageId = extraParams.get(PAGE_ID).toString();
String orderByString = UtilMethods.isSet(orderBy) ? orderBy : "title desc";
final String hostId = extraParams.get("hostId").toString();
final StringBuilder query = new StringBuilder(PERSONAS_QUERY).append(hostId);

if (UtilMethods.isSet(filter)) {

query.append(" +persona.name:").append(filter).append("*");
}

orderByString = orderByString.trim().toLowerCase().endsWith(" asc") ||
orderByString.trim().toLowerCase().endsWith(" desc")? orderByString:
Expand All @@ -61,27 +68,27 @@ public PaginatedArrayList<PersonalizationPersonaPageView> getItems(final User us
try {

final List<Contentlet> contentlets = this.contentletAPI.search
(PERSONAS_QUERY, limit, offset, orderByString, user,respectFrontendRoles);
(query.toString(), limit, offset, orderByString, user,respectFrontendRoles);
final Set<String> personaTagPerPage = this.multiTreeAPI.getPersonalizationsForPage (pageId);
final List<PersonalizationPersonaPageView> personalizationPersonaPageViews = new ArrayList<>();

for (final Contentlet contentlet : contentlets) {

final Persona persona = this.personaAPI.fromContentlet(contentlet);
final ContentletToMapTransformer transformer = new ContentletToMapTransformer(persona);
final Map<String, Object> contentletMap = transformer.toMaps().stream().findFirst().orElse(Collections.EMPTY_MAP);
final Map<String, Object> contentletMap = ContentletUtil.getContentPrintableMap(user, contentlet);
contentletMap.put("personalized",
personaTagPerPage.contains(Persona.DOT_PERSONA_PREFIX_SCHEME + StringPool.COLON + persona.getKeyTag()));
personaTagPerPage.contains(Persona.DOT_PERSONA_PREFIX_SCHEME + StringPool.COLON +
contentlet.getStringProperty(PersonaAPI.KEY_TAG_FIELD)));

personalizationPersonaPageViews.add(new PersonalizationPersonaPageView(pageId, contentletMap));
}

final PaginatedArrayList<PersonalizationPersonaPageView> result = new PaginatedArrayList<>();
result.addAll(personalizationPersonaPageViews);
result.setTotalResults(this.contentletAPI.indexCount(PERSONAS_QUERY, user, respectFrontendRoles));
result.setTotalResults(this.contentletAPI.indexCount(query.toString(), user, respectFrontendRoles));

return result;
} catch (DotDataException | IllegalAccessException | InvocationTargetException| DotSecurityException e) {
} catch (Exception e) {

Logger.error(this, e.getMessage(), e);
throw new DotRuntimeException(e);
}
Expand Down
@@ -0,0 +1,19 @@
package com.dotcms.rest.api.v1.personalization;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

public class PersonalizationPersonaPageViewSerializer extends JsonSerializer<PersonalizationPersonaPageView> {
@Override
public void serialize(final PersonalizationPersonaPageView personaPageView,
final JsonGenerator jsonGenerator,
final SerializerProvider serializers) throws IOException {

jsonGenerator.writeRawValue(new ObjectMapper().writer().withDefaultPrettyPrinter()
.writeValueAsString(personaPageView.getPersona()));
}
}
@@ -1,14 +1,16 @@
package com.dotmarketing.portlets.htmlpageasset.business.render.page;

import com.dotmarketing.business.APILocator;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.dotmarketing.portlets.contentlet.util.ContentletUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.dotmarketing.portlets.personas.model.Persona;
import com.google.common.collect.ImmutableMap;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
Expand All @@ -23,9 +25,16 @@ public void serialize(ViewAsPageStatus viewAsPageStatus, JsonGenerator jsonGener

if (viewAsPageStatus.getPersona() != null) {

final Map personaMap = new HashMap(Persona.class.cast(viewAsPageStatus.getPersona()).getMap());
personaMap.put("personalized", viewAsPageStatus.isPersonalized());
viewAsMapBuilder.put("persona", personaMap);
try {

final Map personaMap = ContentletUtil.getContentPrintableMap(APILocator.systemUser(),
(Contentlet)viewAsPageStatus.getPersona());
personaMap.put("personalized", viewAsPageStatus.isPersonalized());
viewAsMapBuilder.put("persona", personaMap);
} catch (DotDataException e) {

throw new IOException(e);
}
}

viewAsMapBuilder.put("language", viewAsPageStatus.getLanguage());
Expand Down
Expand Up @@ -2572,6 +2572,7 @@ modes.Page = Page
modes.persona.no.persona = Default Visitor
modes.persona.select.persona = Viewing as
modes.persona.personalized = Personalized
modes.persona.selector.title = Personalize As
modes.Preview = Preview
modes.Previous = Previous
modes.Publish-Page = Publish Page
Expand Down

0 comments on commit 41cc4e4

Please sign in to comment.