package com.ciandt.techgallery.service.transformer.profile; import com.google.api.server.spi.config.Transformer; import com.googlecode.objectify.Ref; import com.ciandt.techgallery.persistence.model.TechnologyComment; import com.ciandt.techgallery.persistence.model.profile.UserProfileItem; import com.ciandt.techgallery.service.model.profile.SubItemCommentTo; import com.ciandt.techgallery.service.model.profile.UserProfileItemTo; import com.ciandt.techgallery.utils.Dereferencer; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class UserProfileItemTransformer implements Transformer<UserProfileItem, UserProfileItemTo> { @Override public UserProfileItem transformFrom(UserProfileItemTo arg0) { return null; } @Override public UserProfileItemTo transformTo(UserProfileItem arg0) { List<TechnologyComment> comments = getDereferencedComments(arg0); List<SubItemCommentTo> sortedCommentsTo = techCommentToSubItemCommentToList(comments); sortCommentsByTimestamp(sortedCommentsTo); return new UserProfileItemTo(arg0.getTechnologyName(), arg0.getCompanyRecommendation(), arg0.getTechnologyPhotoUrl(), arg0.getEndorsementQuantity(), arg0.getSkillLevel(), sortedCommentsTo); } private List<TechnologyComment> getDereferencedComments(UserProfileItem arg0) { List<Ref<TechnologyComment>> commentsRefList = new ArrayList<Ref<TechnologyComment>>(); commentsRefList.addAll(arg0.getComments()); List<TechnologyComment> sortedComments = Dereferencer.deref(commentsRefList); return sortedComments; } private List<SubItemCommentTo> techCommentToSubItemCommentToList( List<TechnologyComment> comments) { List<SubItemCommentTo> subItemTos = new ArrayList<SubItemCommentTo>(); for (TechnologyComment comment : comments) { subItemTos.add(techCommentToSubItemComment(comment)); } return subItemTos; } private SubItemCommentTo techCommentToSubItemComment(TechnologyComment comment) { return new SubItemCommentTo(comment.getComment(), comment.getTimestamp()); } private void sortCommentsByTimestamp(List<SubItemCommentTo> commentsTo) { Collections.sort(commentsTo, new Comparator<SubItemCommentTo>() { @Override public int compare(SubItemCommentTo comment1, SubItemCommentTo comment2) { return Long.compare(comment2.getTimestamp().getTime(), comment1.getTimestamp().getTime()); } }); } }