[pollen] branch feature/1112 created (now c65d74b)
This is an automated email from the git hooks/post-receive script. New change to branch feature/1112 in repository pollen. See http://git.chorem.org/pollen.git at c65d74b refs #1112 : introduce the Export service This branch includes the following new commits: new c65d74b refs #1112 : introduce the Export service The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit c65d74b4a42fc08d2bc266a511c9ff39ddfea310 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 20 12:22:18 2014 +0200 refs #1112 : introduce the Export service -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/1112 in repository pollen. See http://git.chorem.org/pollen.git commit c65d74b4a42fc08d2bc266a511c9ff39ddfea310 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 20 12:22:18 2014 +0200 refs #1112 : introduce the Export service --- pollen-services/pom.xml | 6 + .../pollen/services/impl/PollenExportService.java | 384 +++++++++++++++++++++ 2 files changed, 390 insertions(+) diff --git a/pollen-services/pom.xml b/pollen-services/pom.xml index cd4f7cb..9914231 100644 --- a/pollen-services/pom.xml +++ b/pollen-services/pom.xml @@ -29,6 +29,12 @@ </dependency> <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>pollen-io-api</artifactId> + <version>2.0-SNAPSHOT</version> + </dependency> + + <dependency> <groupId>org.apache.struts.xwork</groupId> <artifactId>xwork-core</artifactId> </dependency> diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollenExportService.java b/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollenExportService.java new file mode 100644 index 0000000..4237a70 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollenExportService.java @@ -0,0 +1,384 @@ +package org.chorem.pollen.services.impl; + +import org.chorem.pollen.PollenTechnicalException; +import org.chorem.pollen.bean.PollDateChoice; +import org.chorem.pollen.bean.PollImageChoice; +import org.chorem.pollen.business.persistence.PersonList; +import org.chorem.pollen.business.persistence.PersonToList; +import org.chorem.pollen.business.persistence.PollAccount; +import org.chorem.pollen.business.persistence.PollDAO; +import org.chorem.pollen.business.persistence.UserAccount; +import org.chorem.pollen.business.persistence.UserAccountDAO; +import org.chorem.pollen.business.persistence.VotingList; +import org.chorem.pollen.io.PollenDataStorage; +import org.chorem.pollen.io.dto.Choice; +import org.chorem.pollen.io.dto.ChoiceType; +import org.chorem.pollen.io.dto.Comment; +import org.chorem.pollen.io.dto.CommentVisibility; +import org.chorem.pollen.io.dto.FavoriteList; +import org.chorem.pollen.io.dto.FavoriteListMember; +import org.chorem.pollen.io.dto.Poll; +import org.chorem.pollen.io.dto.PollType; +import org.chorem.pollen.io.dto.PollenData; +import org.chorem.pollen.io.dto.PollenPrincipal; +import org.chorem.pollen.io.dto.PollenResource; +import org.chorem.pollen.io.dto.PollenResourceFile; +import org.chorem.pollen.io.dto.PollenToken; +import org.chorem.pollen.io.dto.PollenUser; +import org.chorem.pollen.io.dto.ResultVisibility; +import org.chorem.pollen.io.dto.Vote; +import org.chorem.pollen.io.dto.VoteToChoice; +import org.chorem.pollen.io.dto.VoterList; +import org.chorem.pollen.io.dto.VoterListMember; +import org.chorem.pollen.services.PollenServiceContext; +import org.chorem.pollen.services.PollenServiceSupport; + +import java.io.File; +import java.io.IOException; +import java.util.Map; +import java.util.TreeMap; + +/** + * Created on 9/19/14. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 1.5.6 + */ +public class PollenExportService extends PollenServiceSupport { + + protected PollService pollService; + + @Override + public void setServiceContext(PollenServiceContext serviceContext) { + super.setServiceContext(serviceContext); + pollService = newService(PollService.class); + } + + public void exportData(File zipFile) { + + PollenData data = new PollenData(); + data.setVersion(getConfiguration().getVersion().getVersion()); + data.setDescription("From Pollen at " + getConfiguration().getApplicationUrl()); + data.setDate(serviceContext.getCurrentTime()); + + // extract users + extractUsers(data); + + // extract polls + resources + extractPolls(data); + + PollenDataStorage storage = new PollenDataStorage(); + + try { + storage.store(data, zipFile); + } catch (IOException e) { + throw new PollenTechnicalException("Could not store export to " + zipFile, e); + } + + } + + protected void extractUsers(PollenData data) { + + UserAccountDAO dao = getDAO(org.chorem.pollen.business.persistence.UserAccount.class); + + for (UserAccount user : dao) { + + PollenUser exportUser = extractPollUser(user); + data.addUser(exportUser); + + } + + } + + protected void extractPolls(PollenData data) { + + Map<String, PollenUser> userMap = new TreeMap<String, PollenUser>(); + + for (PollenUser user : data.getUsers()) { + userMap.put(user.getId(), user); + } + + PollDAO dao = getDAO(org.chorem.pollen.business.persistence.Poll.class); + + for (org.chorem.pollen.business.persistence.Poll poll : dao) { + + Poll exportPoll = extractPoll(poll, userMap, data); + data.addPoll(exportPoll); + + } + + } + + protected Poll extractPoll(org.chorem.pollen.business.persistence.Poll incomingPoll, Map<String, PollenUser> userMap, PollenData data) { + + Poll poll = new Poll(); + poll.setId(incomingPoll.getTopiaId()); + poll.setTitle(incomingPoll.getTitle()); + poll.setDescription(incomingPoll.getDescription()); + poll.setAnonymousVoteAllowed(incomingPoll.isAnonymousVoteAllowed()); + poll.setBeginChoiceDate(incomingPoll.getBeginChoiceDate()); + poll.setEndChoiceDate(incomingPoll.getEndChoiceDate()); + poll.setBeginDate(incomingPoll.getBeginDate()); + poll.setEndDate(incomingPoll.getEndDate()); + poll.setChoiceAddAllowed(incomingPoll.isChoiceAddAllowed()); + poll.setClosed(incomingPoll.isClosed()); + poll.setCommentVisibility(CommentVisibility.valueOf(incomingPoll.getPollCommentVisibility().name())); + poll.setContinuousResults(incomingPoll.isContinuousResults()); + poll.setMaxChoiceNumber(incomingPoll.getMaxChoiceNb()); + poll.setPollType(PollType.valueOf(incomingPoll.getPollType().name())); + poll.setResultVisibility(incomingPoll.isPollFree() ? ResultVisibility.EVERYBODY : ResultVisibility.VOTER); + poll.setVoteCountingType(incomingPoll.getVoteCountingType() + 1); + PollenPrincipal creator = extractPrincipal(incomingPoll.getCreator(), userMap); + poll.setCreator(creator); + + Map<String, Choice> choices = new TreeMap<String, Choice>(); + + if (!incomingPoll.isChoiceEmpty()) { + + String pollId = poll.getCreator().getPermission().getToken(); + + int choiceOrder = 0; + + for (org.chorem.pollen.business.persistence.Choice incomingChoice : incomingPoll.getChoice()) { + + Choice choice = extractChoice(pollId, creator, incomingChoice, choiceOrder++, data); + poll.addChoice(choice); + choices.put(incomingChoice.getTopiaId(), choice); + + } + + } + + if (!incomingPoll.isCommentEmpty()) { + + for (org.chorem.pollen.business.persistence.Comment incomingComment : incomingPoll.getComment()) { + + Comment comment = extractComment(incomingComment, userMap); + poll.addComment(comment); + + } + + } + + if (!incomingPoll.isVotingListEmpty()) { + + for (org.chorem.pollen.business.persistence.VotingList incomingVotinglist : incomingPoll.getVotingList()) { + + VoterList voterList = extractVoterList(incomingVotinglist, userMap); + poll.addVoterList(voterList); + + } + + } + + if (!incomingPoll.isVoteEmpty()) { + + for (org.chorem.pollen.business.persistence.Vote incomingVote : incomingPoll.getVote()) { + + Vote vote = extractVote(incomingVote, choices, userMap); + poll.addVote(vote); + + } + + } + + return poll; + + } + + protected VoterList extractVoterList(VotingList incomingVotinglist, Map<String, PollenUser> userMap) { + + VoterList voterList = new VoterList(); + voterList.setName(incomingVotinglist.getName()); + voterList.setWeight(incomingVotinglist.getWeight()); + + if (!incomingVotinglist.isPollAccountPersonToListEmpty()) { + + for (PersonToList incomingVoterListMember : incomingVotinglist.getPollAccountPersonToList()) { + + VoterListMember voterListMember = extractVoterListMember(incomingVoterListMember, userMap); + voterList.addMember(voterListMember); + + } + } + + return voterList; + + } + + protected VoterListMember extractVoterListMember(PersonToList incomingVoterListMember, Map<String, PollenUser> userMap) { + + VoterListMember voterListMember = new VoterListMember(); + voterListMember.setWeight(incomingVoterListMember.getWeight()); + PollenPrincipal member = extractPrincipal(incomingVoterListMember.getPollAccount(), userMap); + voterListMember.setMember(member); + return voterListMember; + + } + + protected Vote extractVote(org.chorem.pollen.business.persistence.Vote incomingVote, + Map<String, Choice> choices, + Map<String, PollenUser> userMap) { + + Vote vote = new Vote(); + vote.setAnonymous(incomingVote.isAnonymous()); + PollenPrincipal voter = extractPrincipal(incomingVote.getPollAccount(), userMap); + vote.setVoter(voter); + + if (!incomingVote.isChoiceVoteToChoiceEmpty()) { + + for (org.chorem.pollen.business.persistence.VoteToChoice incomingVoteToChoice : incomingVote.getChoiceVoteToChoice()) { + + VoteToChoice voteToChoice = extractVoteToChoice(incomingVoteToChoice, choices); + vote.addVoteToChoice(voteToChoice); + + } + } + + return vote; + } + + protected VoteToChoice extractVoteToChoice(org.chorem.pollen.business.persistence.VoteToChoice incomingVoteToChoice, Map<String, Choice> choices) { + + VoteToChoice voteToChoice = new VoteToChoice(); + voteToChoice.setVoteValue(Double.valueOf(incomingVoteToChoice.getVoteValue())); + Choice choice = choices.get(incomingVoteToChoice.getChoice().getTopiaId()); + voteToChoice.setChoice(choice); + return voteToChoice; + + } + + protected Comment extractComment(org.chorem.pollen.business.persistence.Comment incomingComment, Map<String, PollenUser> userMap) { + + Comment comment = new Comment(); + comment.setText(incomingComment.getText()); + comment.setPostDate(incomingComment.getPostDate()); + PollenPrincipal author = extractPrincipal(incomingComment.getPollAccount(), userMap); + comment.setAuthor(author); + + return comment; + + } + + protected Choice extractChoice(String pollId, PollenPrincipal creator, org.chorem.pollen.business.persistence.Choice incomingChoice, int choiceOrder, PollenData data) { + + Choice choice = new Choice(); + choice.setChoiceOrder(choiceOrder); + + choice.setDescription(incomingChoice.getDescription()); + choice.setCreator(creator); + choice.setChoiceValue(incomingChoice.getName()); + + ChoiceType choiceType; + + if (incomingChoice instanceof PollDateChoice) { + + // resource choice + choiceType = ChoiceType.DATE; + + } else if (incomingChoice instanceof PollImageChoice) { + + // resource choice + choiceType = ChoiceType.RESOURCE; + + // extract resource + PollenResource resourceFile = extractChoiceResource(pollId, choice); + data.addResource(resourceFile); + + } else { + + // text choice + choiceType = ChoiceType.TEXT; + + } + choice.setChoiceType(choiceType); + + + return choice; + + } + + protected PollenResource extractChoiceResource(String pollId, Choice choice) { + + String choiceId = choice.getCreator().getPermission().getToken(); + + File file = pollService.getPollChoiceImageFile(pollId, choiceId); + + PollenResourceFile resourceFile = new PollenResourceFile(); + resourceFile.setFile(file); + resourceFile.setId(pollId + "--" + choiceId); + resourceFile.setName(file.getName()); + resourceFile.setContentType("image"); + resourceFile.setSize(file.length()); + + return resourceFile; + + } + + protected PollenPrincipal extractPrincipal(PollAccount pollAccount, Map<String, PollenUser> userMap) { + + PollenPrincipal pollenPrincipal = new PollenPrincipal(); + pollenPrincipal.setEmail(pollAccount.getEmail()); + + PollenToken permission = new PollenToken(); + permission.setToken(pollAccount.getAccountId()); + pollenPrincipal.setPermission(permission); + + if (pollAccount.getUserAccount() != null) { + PollenUser pollenUser = userMap.get(pollAccount.getUserAccount().getTopiaId()); + pollenPrincipal.setPollenUser(pollenUser); + } + + return pollenPrincipal; + + } + + protected PollenUser extractPollUser(UserAccount userAccount) { + + PollenUser user = new PollenUser(); + user.setId(userAccount.getTopiaId()); + user.setName(userAccount.getDisplayName()); + user.setEmail(userAccount.getEmail()); + user.setAdministrator(userAccount.isAdministrator()); + + if (!userAccount.isFavoriteListEmpty()) { + + for (PersonList personList : userAccount.getFavoriteList()) { + + FavoriteList favoriteList = extractFavoriteList(personList); + user.addFavoriteList(favoriteList); + + } + } + + return user; + + } + + protected FavoriteList extractFavoriteList(PersonList personList) { + + FavoriteList favoriteList = new FavoriteList(); + favoriteList.setName(personList.getName()); + + if (!personList.isPollAccountEmpty()) { + for (PollAccount pollAccount : personList.getPollAccount()) { + FavoriteListMember member = extractFavoriteListMember(pollAccount); + favoriteList.addMember(member); + } + } + + return favoriteList; + + } + + protected FavoriteListMember extractFavoriteListMember(PollAccount personListMember) { + + FavoriteListMember member = new FavoriteListMember(); + member.setName(personListMember.getUserAccount().getDisplayName()); + member.setEmail(personListMember.getEmail()); + return member; + + } + + +} -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm