/src/main/java/com/google/ie/common/builder/IdeaBuilder.java
http://thoughtsite.googlecode.com/ · Java · 273 lines · 135 code · 20 blank · 118 comment · 27 complexity · 698d8a003cb31f6a995cedd98660e5e3 MD5 · raw file
- /* Copyright 2010 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS.
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
- package com.google.ie.common.builder;
- import com.google.ie.business.domain.Idea;
- import com.google.ie.business.domain.Project;
- import com.google.ie.business.domain.Tag;
- import com.google.ie.business.domain.User;
- import com.google.ie.business.service.IdeaService;
- import com.google.ie.business.service.ProjectService;
- import com.google.ie.business.service.ShardedCounterService;
- import com.google.ie.business.service.TagService;
- import com.google.ie.business.service.UserService;
- import com.google.ie.common.exception.IdeasExchangeException;
- import com.google.ie.dto.IdeaDetail;
- import com.google.ie.dto.RetrievalInfo;
- import org.apache.commons.lang.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- /**
- * This will be used for converting the complex idea dto
- * for different request flows like getIdeaForUser, getFeatured idea.
- *
- * @author Charanjeet singh
- */
- @Component
- public class IdeaBuilder {
- private static final int ONE = 1;
- private static final int ZERO = 0;
- @Autowired
- private IdeaService ideaService;
- @Autowired
- private ProjectService projectService;
- @Autowired
- private TagService tagService;
- @Autowired
- private UserService userService;
- @Autowired
- private ShardedCounterService shardedCounterService;
- /**
- * Retrieves the list of published ideas along with their tags and teams by
- * tag names.
- *
- * @param retrievalInfo the idea list retrieval information
- * @return Returns the list of IdeaDetail objects
- */
- public List<IdeaDetail> getIdeasByTagName(String tagName, RetrievalInfo retrievalInfo) {
- List<IdeaDetail> ideaDtoList = null;
- /* Fetch one more record than what is required */
- retrievalInfo.setNoOfRecords(retrievalInfo.getNoOfRecords() + ONE);
- List<Idea> ideaList = ideaService.getIdeasByTagName(tagName, retrievalInfo);
- if (ideaList != null && ideaList.size() > ZERO) {
- ideaDtoList = convertToIdeaDetailList(ideaList, true, true, false, true);
- }
- return ideaDtoList;
- }
- /**
- * Retrieves the list of published ideas along with their tags and teams.
- *
- * @param retrievalInfo the idea list retrieval information
- * @return Returns the list of IdeaDetail objects
- */
- public List<IdeaDetail> getIdeasForListing(RetrievalInfo retrievalInfo) {
- List<IdeaDetail> ideaDtoList = null;
- /* Fetch one more record than what is required */
- retrievalInfo.setNoOfRecords(retrievalInfo.getNoOfRecords() + ONE);
- List<Idea> ideaList = ideaService.getIdeas(retrievalInfo);
- if (ideaList != null && ideaList.size() > 0) {
- ideaDtoList = convertToIdeaDetailList(ideaList, true, true, true, true);
- }
- return ideaDtoList;
- }
- /**
- * Retrieves the list of Ideas published or saved by user.
- *
- * @param user the {@link User} object.
- * @param retrievalInfo the idea list retrieval information
- * @return Returns the list of IdeaDetail objects
- */
- public List<IdeaDetail> getIdeasForUser(User user, RetrievalInfo retrievalInfo) {
- List<IdeaDetail> ideaDtoList = null;
- /* Fetch one more record than what is required for paging purpose */
- retrievalInfo.setNoOfRecords(retrievalInfo.getNoOfRecords() + ONE);
- List<Idea> ideaList = ideaService.getIdeasForUser(user, retrievalInfo);
- if (ideaList != null && ideaList.size() > ZERO) {
- ideaDtoList = convertToIdeaDetailList(ideaList, true, true, false, true);
- }
- return ideaDtoList;
- }
- /**
- * Gets idea details for the given idea key. For non admin request, only
- * published and duplicate ideas are fetched.
- * For admin requests, ideas with all statuses are fetched.
- *
- * @param ideaKey the key of the idea whose details are to be fetched
- * @param isAdmin boolean that indicates the request is for admin
- * @return {@link IdeaDetail} object containing the idea details
- * @throws IdeasExchangeException
- */
- public IdeaDetail getIdeaDetail(String ideaKey, boolean isAdmin) throws IdeasExchangeException {
- Idea idea = ideaService.getIdeaByKey(ideaKey);
- if (idea == null)
- return null;
- if (Idea.STATUS_PUBLISHED.equalsIgnoreCase(idea.getStatus())
- || Idea.STATUS_DUPLICATE.equalsIgnoreCase(idea.getStatus()) || isAdmin) {
- return convertToIdeaDetail(idea, true, true, true, true);
- }
- throw new IdeasExchangeException("", "Idea is marked as objectionable or deleted");
- }
- /**
- * @param shardedCounterService the shardedCounterService to set
- */
- public void setShardedCounterService(ShardedCounterService shardedCounterService) {
- this.shardedCounterService = shardedCounterService;
- }
- /**
- * @return the shardedCounterService
- */
- public ShardedCounterService getShardedCounterService() {
- return shardedCounterService;
- }
- /**
- * Converts the the list of Idea objects into list of IdeaDetail objects.
- *
- * @param ideaList The list of Idea objects to be transformed into
- * IdeaDetail.
- * @return Returns the list of IdeaDetail.
- */
- public List<IdeaDetail> convertToIdeaDetailList(List<Idea> ideaList) {
- return convertToIdeaDetailList(ideaList, true, true, true, true);
- }
- /**
- * Converts the the list of Idea objects into list of IdeaDetail objects.
- *
- * @param ideaList The list of Idea objects to be transformed into
- * IdeaDetail.
- * @return Returns the list of IdeaDetail.
- */
- public List<IdeaDetail> convertToIdeaDetailList(List<Idea> ideaList, boolean addUser) {
- return convertToIdeaDetailList(ideaList, true, true, addUser, true);
- }
- /**
- * Converts the the list of Idea objects into list of IdeaDetail objects.
- *
- * @param ideaList The list of Idea objects to be transformed into
- * IdeaDetail.
- * @param addTags Flag which means that also fetch Tag objects associated
- * with
- * the ideas, when set true.
- * @param addTeams Flag which means that also fetch Team objects associated
- * with the ideas, when set true.
- * @param trimLongFields
- * @return Returns the list of IdeaDetail.
- */
- public List<IdeaDetail> convertToIdeaDetailList(List<Idea> ideaList, boolean addTags,
- boolean addTeams, boolean addUser, boolean trimLongFields) {
- List<IdeaDetail> ideaDetailList = new ArrayList<IdeaDetail>();
- IdeaDetail ideaDetail = null;
- for (Idea idea : ideaList) {
- if (trimLongFields) {
- shortenFields(idea);
- }
- ideaDetail = convertToIdeaDetail(idea, addTags, addTeams, addUser, false);
- ideaDetailList.add(ideaDetail);
- }
- return ideaDetailList;
- }
- /**
- * Shortens the length of title and description fields
- *
- * @param idea
- */
- private void shortenFields(Idea idea) {
- if (null != idea) {
- /* 50 chars for title */
- idea.setTitle(StringUtils.abbreviate(idea.getTitle(), 50));
- /* 100 chars for description */
- idea.setDescription(StringUtils.abbreviate(idea.getDescription(), 150));
- }
- }
- /**
- * Converts the the Idea object to IdeaDetail object.
- *
- * @param idea The Idea object to be transformed into IdeaDetail.
- * @param addTag Flag which means that also fetch Tag objects associated
- * with
- * the idea, when set true.
- * @param addTeam Flag which means that also fetch Team objects associated
- * with the ideas, when set true.
- * @param addProjects Flag which means also fetch the Project objects
- * associated with the idea
- * @return Returns the list of IdeaDetail.
- */
- public IdeaDetail convertToIdeaDetail(Idea idea, boolean addTag, boolean addTeam,
- boolean addUser, boolean addProjects) {
- IdeaDetail ideaDetail = new IdeaDetail();
- ideaDetail.setIdea(idea);
- if (addTag) {
- /*
- * Get all tags using tag keys in idea and set them to the
- * corresponding property in ideaDto.
- */
- List<Tag> tagList = tagService.getTagsByKeys(idea.getTagKeys());
- ideaDetail.setTags(tagList);
- }
- if (addUser) {
- User user = userService.getUserByPrimaryKey(idea.getCreatorKey());
- if (user != null) {
- /* Get reputation points for user */
- long userPoints = shardedCounterService.getTotalPoint(idea.getCreatorKey());
- user.setReputationPoints(userPoints);
- }
- ideaDetail.setUser(user);
- }
- /* If true add the projects associated with the idea */
- if (addProjects) {
- List<Project> projects = projectService.getProjectsByIdeaKey(idea.getKey());
- /*
- * If the list is not empty,iterate it and create a map with key of
- * the project object as the key in the map and project name as the
- * value.Only these two attributes are required on the idea detail
- * page
- */
- if (projects != null && projects.size() > ZERO) {
- Iterator<Project> iterator = projects.iterator();
- Map<String, String> mapOfProjectIdAndName = new HashMap<String, String>();
- Project project;
- while (iterator.hasNext()) {
- project = iterator.next();
- mapOfProjectIdAndName.put(project.getKey(), project.getName());
- }
- ideaDetail.setMapOfProjectIdAndName(mapOfProjectIdAndName);
- }
- }
- return ideaDetail;
- }
- }