r3239 - in branches/pollen-1.2.6-struts2: pollen-services/src/main/java/org/chorem/pollen/services pollen-services/src/main/java/org/chorem/pollen/services/impl pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll
Author: fdesbois Date: 2012-04-06 14:56:20 +0200 (Fri, 06 Apr 2012) New Revision: 3239 Url: http://chorem.org/repositories/revision/pollen/3239 Log: - clean clone flag - use getPollEditable for load and save poll Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceFunctions.java branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/AbstractPollForm.java branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/LoadPoll.java branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceFunctions.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceFunctions.java 2012-04-06 12:56:13 UTC (rev 3238) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceFunctions.java 2012-04-06 12:56:20 UTC (rev 3239) @@ -68,49 +68,36 @@ } } - public static TextChoiceCreator newTextChoiceCreator(boolean clone) { - return new TextChoiceCreator(clone); + public static TextChoiceCreator newTextChoiceCreator() { + return new TextChoiceCreator(); } - public static ImageChoiceCreator newImageChoiceCreator(boolean clone) { - return new ImageChoiceCreator(clone); + public static ImageChoiceCreator newImageChoiceCreator() { + return new ImageChoiceCreator(); } - public static DateChoiceCreator newDateChoiceCreator(boolean clone) { - return new DateChoiceCreator(clone); + public static DateChoiceCreator newDateChoiceCreator() { + return new DateChoiceCreator(); } public static Function<VotingList, VotingList> newVotingListCreator( - boolean clone, PollenServiceContext serviceContext, Function<PersonToList, PersonToList> persontoListCreator) { - return new VotingListCreator(clone, serviceContext, persontoListCreator); + return new VotingListCreator(serviceContext, persontoListCreator); } public static Function<PersonToList, PersonToList> newPersonToListCreator( - boolean clone, PollenServiceContext serviceContext) { - return new PersonToListCreator(clone, serviceContext); + return new PersonToListCreator(serviceContext); } public static class TextChoiceCreator implements Function<Choice, Choice> { - - protected final boolean clone; - - protected TextChoiceCreator(boolean clone) { - this.clone = clone; - } - @Override public Choice apply(Choice input) { Choice result = new ChoiceImpl(); if (input != null) { - if (clone) { - // do not copy topia id - } else { - result.setTopiaId(input.getTopiaId()); - } + result.setTopiaId(input.getTopiaId()); result.setName(input.getName()); result.setDescription(input.getDescription()); } @@ -120,22 +107,11 @@ public static class ImageChoiceCreator implements Function<Choice, Choice> { - protected final boolean clone; - - protected ImageChoiceCreator(boolean clone) { - this.clone = clone; - } - - @Override public Choice apply(Choice input) { PollImageChoice result = new PollImageChoice(); if (input != null) { - if (clone) { - // do not copy topia id - } else { - result.setTopiaId(input.getTopiaId()); - } + result.setTopiaId(input.getTopiaId()); result.setName(input.getName()); result.setDescription(input.getDescription()); result.setLocation(input.getName()); @@ -146,22 +122,11 @@ public static class DateChoiceCreator implements Function<Choice, Choice> { - protected final boolean clone; - - protected DateChoiceCreator(boolean clone) { - this.clone = clone; - } - @Override public Choice apply(Choice input) { PollDateChoice result = new PollDateChoice(); if (input != null) { - if (clone) { - // do not copy topia id - } else { - result.setTopiaId(input.getTopiaId()); - } - + result.setTopiaId(input.getTopiaId()); result.setName(input.getName()); result.setDescription(input.getDescription()); result.setDate(new Date(Long.valueOf(input.getName()))); @@ -172,16 +137,12 @@ public static class VotingListCreator implements Function<VotingList, VotingList> { - protected final boolean clone; - protected final PollenServiceContext serviceContext; protected final Function<PersonToList, PersonToList> persontoListCreator; - protected VotingListCreator(boolean clone, - PollenServiceContext serviceContext, + protected VotingListCreator(PollenServiceContext serviceContext, Function<PersonToList, PersonToList> persontoListCreator) { - this.clone = clone; this.serviceContext = serviceContext; this.persontoListCreator = persontoListCreator; } @@ -197,11 +158,7 @@ result.setWeight(1); } else { - if (clone) { - // do not copy topia id - } else { - result.setTopiaId(input.getTopiaId()); - } + result.setTopiaId(input.getTopiaId()); result.setName(input.getName()); result.setWeight(input.getWeight()); @@ -219,12 +176,9 @@ public static class PersonToListCreator implements Function<PersonToList, PersonToList> { - protected final boolean clone; - protected final PollenServiceContext serviceContext; - protected PersonToListCreator(boolean clone, PollenServiceContext serviceContext) { - this.clone = clone; + protected PersonToListCreator(PollenServiceContext serviceContext) { this.serviceContext = serviceContext; } @@ -232,25 +186,13 @@ public PersonToList apply(PersonToList input) { PersonToList result = new PersonToListImpl(); if (input != null) { - if (clone) { - // do not copy topia id - } else { - result.setTopiaId(input.getTopiaId()); - } + result.setTopiaId(input.getTopiaId()); result.setWeight(input.getWeight()); PollAccount pollAccount = input.getPollAccount(); if (pollAccount != null) { PollAccount pollAccount2 = new PollAccountImpl(); - String accountId; - if (clone) { - // do not copy topia id - // generate a new accountId - accountId = serviceContext.createPollenUrlId(); - } else { - pollAccount2.setTopiaId(pollAccount.getTopiaId()); - accountId = pollAccount.getAccountId(); - } - pollAccount2.setAccountId(accountId); + pollAccount2.setTopiaId(pollAccount.getTopiaId()); + pollAccount2.setAccountId(pollAccount.getAccountId()); pollAccount2.setVotingId(pollAccount.getVotingId()); result.setPollAccount(pollAccount2); } Modified: branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-04-06 12:56:13 UTC (rev 3238) +++ branches/pollen-1.2.6-struts2/pollen-services/src/main/java/org/chorem/pollen/services/impl/PollService.java 2012-04-06 12:56:20 UTC (rev 3239) @@ -76,10 +76,10 @@ private static final Log log = LogFactory.getLog(PollService.class); /** - * Build a new Poll instance with given {@code user} as administrator + * Build a new Poll instance with given {@code user} as creator * - * @param user Build a new Poll instance with given {@code user} as administrator - * @return Build a new Poll instance with given {@code user} as administrator + * @param user Build a new Poll instance with given {@code user} as creator + * @return Build a new Poll instance with given {@code user} as creator */ public Poll getNewPoll(UserAccount user) { @@ -93,11 +93,10 @@ result.setVoteCountingType(configuration.getDefaultVoteCountingType()); result.setPollType(configuration.getDefaultPollType()); - // Initialize creator as an admin for the poll + // Initialize creator of the poll PollAccountDAO pollAccountDAO = getDAO(PollAccount.class); PollAccount creator = newInstance(pollAccountDAO); creator.setAccountId(serviceContext.createPollenUrlId()); -// creator.setAdmin(true); if (user != null) { @@ -121,12 +120,13 @@ * and ensure business ids (accountUid, pollUid) with new values. If {@code userId} * matches an existing {@link UserAccount}, the resulting poll creator will * be attached to it. - * + * * @param pollUid Uid of the poll to edit, if not defined, a new poll is instanciated * @param userAccount User account to attach to the creator * @param clone Flag to copy or not ids in case of poll cloning - * @return the Poll ready for edition (no longer linked to the topia context) + * @return the Poll ready for edition (no longer linked to the topia context) * @see #getNewPoll(UserAccount) + * @see #getNewPollCopy(Poll, UserAccount, boolean) */ public Poll getPollEditable(String pollUid, UserAccount userAccount, boolean clone) { @@ -136,81 +136,96 @@ } else { - Poll pollLoaded = getPollByPollId(pollUid); - - PollDAO pollDAO = getDAO(Poll.class); - result = newInstance(pollDAO); + Poll poll = getPollByPollId(pollUid); - PollenBinderHelper.simpleCopy(pollLoaded, result, !clone); - if (clone) { - result.setPollId(serviceContext.createPollenUrlId()); + if (poll == null) { + result = getNewPoll(userAccount); + + } else { + result = getNewPollCopy(poll, userAccount, clone); } - - // -- Creator -- // - PollAccount creatorLoaded = pollLoaded.getCreator(); - PollAccountDAO pollAccountDAO = getDAO(PollAccount.class); - PollAccount creatorEditable = newInstance(pollAccountDAO); - result.setCreator(creatorEditable); + } + return result; + } + + protected Poll getNewPollCopy(Poll source, UserAccount userAccount, boolean clone) { + + Preconditions.checkNotNull(source); + + PollDAO pollDAO = getDAO(Poll.class); + Poll result = newInstance(pollDAO); + PollenBinderHelper.simpleCopy(source, result, !clone); + if (clone) { + result.setPollId(serviceContext.createPollenUrlId()); + } + + // -- Creator -- // + PollAccount creatorLoaded = source.getCreator(); + PollAccountDAO pollAccountDAO = getDAO(PollAccount.class); + PollAccount creatorEditable = newInstance(pollAccountDAO); + result.setCreator(creatorEditable); + + PollenBinderHelper.simpleCopy( + creatorLoaded, creatorEditable, !clone); + if (clone) { + creatorEditable.setAccountId(serviceContext.createPollenUrlId()); + } + + if (creatorLoaded.getUserAccount() != null) { + creatorEditable.setUserAccount(creatorLoaded.getUserAccount()); + + // Set userAccount from arguments + } else if (userAccount != null) { + creatorEditable.setUserAccount(userAccount); + } + + // -- Choice -- // + ChoiceDAO choiceDAO = getDAO(Choice.class); + for (Choice choiceLoaded : source.getChoice()) { + Choice choiceEditable = newInstance(choiceDAO); + result.addChoice(choiceEditable); + // Do not keep choices topiaId, to simplify the update will delete old choices and create new ones PollenBinderHelper.simpleCopy( - creatorLoaded, creatorEditable, !clone); - if (clone) { - creatorEditable.setAccountId(serviceContext.createPollenUrlId()); - } - - if (creatorLoaded.getUserAccount() != null) { - creatorEditable.setUserAccount(creatorLoaded.getUserAccount()); + choiceLoaded, choiceEditable, false); + } - // Set userAccount from arguments - } else if (userAccount != null) { - creatorEditable.setUserAccount(userAccount); - } - - // -- Choice -- // - ChoiceDAO choiceDAO = getDAO(Choice.class); - for (Choice choiceLoaded : pollLoaded.getChoice()) { - Choice choiceEditable = newInstance(choiceDAO); - result.addChoice(choiceEditable); + // -- VotingList -- // + VotingListDAO votingListDAO = getDAO(VotingList.class); + PersonToListDAO personToListDAO = getDAO(PersonToList.class); + for (VotingList votingListLoaded : source.getVotingList()) { + VotingList votingListEditable = newInstance(votingListDAO); + result.addVotingList(votingListEditable); + PollenBinderHelper.simpleCopy( + votingListLoaded, votingListEditable, !clone); + + for (PersonToList personToListLoaded : votingListLoaded.getPollAccountPersonToList()) { + PersonToList personToListEditable = newInstance(personToListDAO); + votingListEditable.addPollAccountPersonToList(personToListEditable); PollenBinderHelper.simpleCopy( - choiceLoaded, choiceEditable, !clone); - } + personToListLoaded, personToListEditable, !clone); - // -- VotingList -- // - VotingListDAO votingListDAO = getDAO(VotingList.class); - PersonToListDAO personToListDAO = getDAO(PersonToList.class); - for (VotingList votingListLoaded : pollLoaded.getVotingList()) { - VotingList votingListEditable = newInstance(votingListDAO); - result.addVotingList(votingListLoaded); + PollAccount personLoaded = personToListLoaded.getPollAccount(); + PollAccount personEditable = newInstance(pollAccountDAO); + personToListEditable.setPollAccount(personEditable); + // copy the person, keeping topiaId is useless because we have the link with PersonToList PollenBinderHelper.simpleCopy( - votingListLoaded, votingListEditable, !clone); - - for (PersonToList personToListLoaded : votingListLoaded.getPollAccountPersonToList()) { - PersonToList personToListEditable = newInstance(personToListDAO); - votingListEditable.addPollAccountPersonToList(personToListEditable); - PollenBinderHelper.simpleCopy( - personToListLoaded, personToListEditable, !clone); - - PollAccount personLoaded = personToListLoaded.getPollAccount(); - PollAccount personEditable = newInstance(pollAccountDAO); - personToListEditable.setPollAccount(personEditable); - // copy the person, keeping topiaId is useless because we have the link with PersonToList - PollenBinderHelper.simpleCopy( - personLoaded, personEditable, false); - if (clone) { - personEditable.setAccountId(serviceContext.createPollenUrlId()); - } + personLoaded, personEditable, false); + if (clone) { + personEditable.setAccountId(serviceContext.createPollenUrlId()); } } - - // -- PreventRule -- // - PreventRuleDAO preventRuleDAO = getDAO(PreventRule.class); - for (PreventRule preventRuleLoaded : pollLoaded.getPreventRule()) { - PreventRule preventRuleEditable = newInstance(preventRuleDAO); - PollenBinderHelper.simpleCopy( - preventRuleLoaded, preventRuleEditable, !clone); - result.addPreventRule(preventRuleEditable); - } } + + // -- PreventRule -- // + PreventRuleDAO preventRuleDAO = getDAO(PreventRule.class); + for (PreventRule preventRuleLoaded : source.getPreventRule()) { + PreventRule preventRuleEditable = newInstance(preventRuleDAO); + PollenBinderHelper.simpleCopy( + preventRuleLoaded, preventRuleEditable, !clone); + result.addPreventRule(preventRuleEditable); + } + return result; } @@ -283,15 +298,17 @@ return result; } - + public void updatePoll(Poll poll) throws PollNotFoundException { - + Poll pollToUpdate = getEntityById(Poll.class, poll.getTopiaId()); if (pollToUpdate == null) { throw new PollNotFoundException(); } + boolean voteStarted = pollToUpdate.sizeVote() > 0; + PollAccount creatorToUpdate = pollToUpdate.getCreator(); // FIXME-fdesbois-2012-04-05 : improve binder to avoid creator copy @@ -305,10 +322,12 @@ // -- Choices -- // - // FIXME-fdesbois-2012-04-05 : manage remove + if (!voteStarted) { - for (Choice choice : poll.getChoice()) { - saveChoice(pollToUpdate, choice); + pollToUpdate.clearChoice(); + for (Choice choice : poll.getChoice()) { + saveChoice(pollToUpdate, choice); + } } // -- PreventRules -- // @@ -319,9 +338,12 @@ // -- VotingLists -- // // FIXME-fdesbois-2012-04-05 : missing delete-orphan on VotingList, if PollType change, VotingList must be deleted + // FIXME-fdesbois-2012-04-05 : manage remove - for (VotingList votingList : poll.getVotingList()) { - saveVotingList(pollToUpdate, votingList); + if (!voteStarted) { + for (VotingList votingList : poll.getVotingList()) { + saveVotingList(pollToUpdate, votingList); + } } commitTransaction("Could not update poll [" + poll.getTopiaId() + "]"); @@ -511,14 +533,14 @@ )); } } - - if (result == null) { + + if (result == null) { result = getNewPollAccount(userAccount); } } return result; } - + protected PollAccount copyPollAccount(PollAccount source) { PollAccountDAO dao = getDAO(PollAccount.class); PollAccount result = newInstance(dao); @@ -545,7 +567,7 @@ if (result == null) { throw new PollAccountNotFound(); } - + return result; } catch (TopiaException e) { throw new PollenTechnicalException("Could not botain account with this id", e); @@ -619,19 +641,19 @@ commitTransaction("Could not close poll " + poll.getTitle()); } - + public Choice getNewChoice(ChoiceType choiceType) { Choice result; switch (choiceType) { - + case DATE: result = new PollDateChoice(); break; - + case IMAGE: result = new PollImageChoice(); break; - + case TEXT: default: ChoiceDAO dao = getDAO(Choice.class); @@ -639,25 +661,25 @@ } return result; } - + public void createChoice(String pollId, Choice choice) throws PollNotFoundException { - + Preconditions.checkNotNull(pollId); Preconditions.checkNotNull(choice); - + Poll poll = getPollByPollId(pollId); - + if (poll == null) { throw new PollNotFoundException(); } - + saveChoice(poll, choice); - + commitTransaction("Can't create new choice [" + poll.getChoiceType() + "] for poll '" + pollId + "'"); } - + protected void saveChoice(Poll poll, Choice choice) { - + ChoiceType choiceType = poll.getChoiceType(); ChoiceDAO dao = getDAO(Choice.class); Choice choiceLoaded; @@ -695,7 +717,7 @@ choiceLoaded.setDescription(choice.getDescription()); choiceLoaded.setValidate(choice.isValidate()); choiceLoaded.setName(choice.getName()); - } + } } public void deleteChoice(String pollId, String choiceId) @@ -741,7 +763,7 @@ if (poll == null) { throw new PollNotFoundException(); } - + PollAccountDAO dao = getDAO(PollAccount.class); if (poll.getPollType() != PollType.FREE) { @@ -772,9 +794,9 @@ } } catch (TopiaException e) { throw new PollenTechnicalException( - "Could not check pollAccount existence from poll '" + + "Could not check pollAccount existence from poll '" + pollId + "' and account '" + accountId + "'", e); - } + } } } @@ -893,9 +915,9 @@ // ContextUtil.doFinally(transaction); // } } - + protected void saveVotingList(Poll poll, VotingList votingList) { - + VotingListDAO votingListDAO = getDAO(VotingList.class); PersonToListDAO personToListDAO = getDAO(PersonToList.class); PollAccountDAO pollAccountDAO = getDAO(PollAccount.class); @@ -905,11 +927,11 @@ if (votingList.getTopiaId() == null) { votingListLoaded = create(votingListDAO); poll.addVotingList(votingListLoaded); - + } else { votingListLoaded = poll.getVotingListByTopiaId(votingList.getTopiaId()); - - // It's seems stupid, but it doesn't work without it + + // FIXME-fdesbois-2012-04-05 : why the poll association is not keeped ?!? votingListLoaded.setPoll(poll); } @@ -924,7 +946,8 @@ personToListLoaded = create(personToListDAO); votingListLoaded.addPollAccountPersonToList(personToListLoaded); - // The model doesn't have any composition for this relation, the link must be set in both objects + // The model doesn't have any composition for this relation, + // the link must be set in both objects personToListLoaded.setVotingList(votingListLoaded); } else { Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/AbstractPollForm.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/AbstractPollForm.java 2012-04-06 12:56:13 UTC (rev 3238) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/AbstractPollForm.java 2012-04-06 12:56:20 UTC (rev 3239) @@ -238,10 +238,6 @@ return 1; } - public boolean isClone() { - return false; - } - protected boolean isEdit() { return StringUtils.isNotEmpty(getPoll().getTopiaId()); } @@ -265,15 +261,14 @@ public Function<PersonToList, PersonToList> getPersontoListCreator() { if (persontoListCreator == null) { - persontoListCreator = PollenServiceFunctions.newPersonToListCreator(isClone(), serviceContext); + persontoListCreator = PollenServiceFunctions.newPersonToListCreator(serviceContext); } return persontoListCreator; } public Function<VotingList, VotingList> getVotingListCreator() { if (votingListCreator == null) { - votingListCreator = PollenServiceFunctions.newVotingListCreator(isClone(), - serviceContext, + votingListCreator = PollenServiceFunctions.newVotingListCreator(serviceContext, getPersontoListCreator()); } return votingListCreator; @@ -281,21 +276,21 @@ public Function<Choice, Choice> getTextChoiceCreator() { if (textChoiceCreator == null) { - textChoiceCreator = PollenServiceFunctions.newTextChoiceCreator(isClone()); + textChoiceCreator = PollenServiceFunctions.newTextChoiceCreator(); } return textChoiceCreator; } public Function<Choice, Choice> getDateChoiceCreator() { if (dateChoiceCreator == null) { - dateChoiceCreator = PollenServiceFunctions.newDateChoiceCreator(isClone()); + dateChoiceCreator = PollenServiceFunctions.newDateChoiceCreator(); } return dateChoiceCreator; } public Function<Choice, Choice> getImageChoiceCreator() { if (imageChoiceCreator == null) { - imageChoiceCreator = PollenServiceFunctions.newImageChoiceCreator(isClone()); + imageChoiceCreator = PollenServiceFunctions.newImageChoiceCreator(); } return imageChoiceCreator; } Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java 2012-04-06 12:56:13 UTC (rev 3238) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/DisplayVotingList.java 2012-04-06 12:56:20 UTC (rev 3239) @@ -104,11 +104,9 @@ public String execute() throws Exception { Function<PersonToList, PersonToList> persontoListCreator = - PollenServiceFunctions.newPersonToListCreator( - false, serviceContext); + PollenServiceFunctions.newPersonToListCreator(serviceContext); Function<VotingList, VotingList> votingListCreator = - PollenServiceFunctions.newVotingListCreator( - false, serviceContext, persontoListCreator); + PollenServiceFunctions.newVotingListCreator(serviceContext, persontoListCreator); // if (StringUtils.isNotEmpty(tokenId)) { // Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/LoadPoll.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/LoadPoll.java 2012-04-06 12:56:13 UTC (rev 3238) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/LoadPoll.java 2012-04-06 12:56:20 UTC (rev 3239) @@ -25,7 +25,6 @@ import org.chorem.pollen.bean.PollUri; import org.chorem.pollen.business.persistence.Choice; -import org.chorem.pollen.business.persistence.PollAccount; import org.chorem.pollen.business.persistence.UserAccount; import org.chorem.pollen.business.persistence.VotingList; @@ -52,11 +51,6 @@ this.pollUri = pollUri; } - @Override - public boolean isClone() { - return clone; - } - public void setClone(boolean clone) { this.clone = clone; } @@ -66,31 +60,9 @@ prepareFormPage(); - if (pollUri == null) { + UserAccount userAccount = getPollenUserAccount(); + poll = getPollService().getPollEditable(pollUri.getPollId(), userAccount, clone); - // create a new poll - - UserAccount userAccount = getPollenUserAccount(); - poll = getPollService().getNewPoll(userAccount); - } else { - - // update or clone an existing poll - - poll = getPollService().getPollByPollId(pollUri.getPollId()); - - if (clone) { - - poll.setTopiaId(null); - poll.setPollId(serviceContext.createPollenUrlId()); - - // Reset creator but keep userAccount link - PollAccount creator = poll.getCreator(); - creator.setTopiaId(null); - creator.setAccountId(serviceContext.createPollenUrlId()); - } - } - - List<Choice> pollChoices = poll.getChoice(); List<VotingList> pollVotingLists = poll.getVotingList(); Modified: branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java =================================================================== --- branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java 2012-04-06 12:56:13 UTC (rev 3238) +++ branches/pollen-1.2.6-struts2/pollen-ui-struts2/src/main/java/org/chorem/pollen/ui/actions/poll/SavePoll.java 2012-04-06 12:56:20 UTC (rev 3239) @@ -41,7 +41,6 @@ import org.chorem.pollen.business.persistence.ChoiceImpl; import org.chorem.pollen.business.persistence.PersonToList; import org.chorem.pollen.business.persistence.PersonToListImpl; -import org.chorem.pollen.business.persistence.Poll; import org.chorem.pollen.business.persistence.PollAccount; import org.chorem.pollen.business.persistence.PollAccountImpl; import org.chorem.pollen.business.persistence.PreventRule; @@ -52,7 +51,6 @@ import org.chorem.pollen.common.PollType; import org.chorem.pollen.services.impl.PollService; import org.chorem.pollen.services.impl.PreventRuleService; -import org.chorem.pollen.services.impl.UserService; import org.chorem.pollen.ui.actions.FileUploadAware; import org.nuiton.util.StringUtil; @@ -89,8 +87,6 @@ private static final Pattern IMAGE_CHOICE_NAME_PATTERN = Pattern.compile("imageChoice_(\\d+)\\.name"); - private String userId; - /** Uploaded images (for choice type poll). */ private List<File> imageChoice; @@ -106,7 +102,6 @@ /** Flag when there is some errors on the options panel. */ private boolean optionsError; - /** * All the parameters send by request used to build back choices of the * poll. @@ -125,24 +120,25 @@ */ private Map<Integer, VotingList> votingLists; - public void setUserId(String userId) { - this.userId = userId; - } - @Override public void prepare() throws Exception { prepareFormPage(); - String pollId = getNonEmptyParameterValue("poll.topiaId"); + String pollUid = getNonEmptyParameterValue("poll.pollId"); - if (pollId != null) { - poll = getPollService().getEntityById(Poll.class, pollId); + // Retrieve userAccount to attach to the poll + UserAccount userAccount = getPollenUserAccount(); + if (userAccount == null) { - } else { - UserAccount userAccount = getPollenUserAccount(); - poll = getPollService().getNewPoll(userAccount); + // from parameter userId if defined during update loading + String userId = getNonEmptyParameterValue("userId"); + if (userId != null) { + userAccount = getPollService().getEntityById(UserAccount.class, userId); + } } + + poll = getPollService().getPollEditable(pollUid, userAccount, false); // Retrieve choiceType from parameters, the poll object will be updated after prepare String choiceTypeParam = getNonEmptyParameterValue("poll.choiceType"); @@ -192,11 +188,11 @@ public String input() { Collection<Choice> pollChoices = choices.values(); - Collection<VotingList> pollVotinLists = votingLists.values(); + Collection<VotingList> pollVotingLists = votingLists.values(); loadChoicesAndvotingLists(poll, pollChoices, - pollVotinLists, + pollVotingLists, true); return INPUT; } @@ -275,16 +271,6 @@ poll.clearPreventRule(); poll.clearVotingList(); - // Load userAccount from the form - if (!isCreatorUserAccountDefined() && StringUtils.isNotBlank(userId)) { - - UserService userService = newService(UserService.class); - UserAccount userAccount = userService.getEntityById( - UserAccount.class, userId); - - poll.getCreator().setUserAccount(userAccount); - } - Map<Integer, Choice> orderedChoices = choices; for (Integer index : orderedChoices.keySet()) {
participants (1)
-
fdesbois@users.chorem.org