r3700 - in trunk: pollen-persistence/src/main/java/org/chorem/pollen/business/persistence pollen-persistence/src/main/resources/i18n pollen-persistence/src/main/xmi pollen-services/src/main/java/org/chorem/pollen/entities/migration pollen-services/src/main/resources/META-INF/services pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model
Author: tchemit Date: 2012-09-23 15:09:29 +0200 (Sun, 23 Sep 2012) New Revision: 3700 Url: http://chorem.org/repositories/revision/pollen/3700 Log: move to version 1.5-SNAPSHOT Added: trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_5.java Removed: trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_4_5_2.java Modified: trunk/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/Polls.java trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_en_GB.properties trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_fr_FR.properties trunk/pollen-persistence/src/main/xmi/pollen.properties trunk/pollen-services/src/main/resources/META-INF/services/org.nuiton.topia.migration.TopiaMigrationCallbackByClassNG$MigrationCallBackForVersion trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/GroupOfVoterBuilder.java trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/SimpleVoterBuilder.java Modified: trunk/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/Polls.java =================================================================== --- trunk/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/Polls.java 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/Polls.java 2012-09-23 13:09:29 UTC (rev 3700) @@ -1,5 +1,28 @@ package org.chorem.pollen.business.persistence; +/* + * #%L + * Pollen :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import org.chorem.pollen.PollenFunctions; Property changes on: trunk/pollen-persistence/src/main/java/org/chorem/pollen/business/persistence/Polls.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_en_GB.properties =================================================================== --- trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_en_GB.properties 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_en_GB.properties 2012-09-23 13:09:29 UTC (rev 3700) @@ -1,4 +1,7 @@ pollen.application.config=Pollen configuration +pollen.choiceType.date=Date +pollen.choiceType.image=Image +pollen.choiceType.text=Text pollen.configuration.adminEmail=email for default admin pollen.configuration.charset=Charset used by Pollen pollen.configuration.contactEmail=email for contact link @@ -26,6 +29,9 @@ pollen.configuration.tmpDirectory=Temporary directory (is cleaned at each startup of application) pollen.pollCommentVisibilty.everybody=Use comments on poll pollen.pollCommentVisibilty.nobody=No usage of comments on poll +pollen.pollType.free=Free +pollen.pollType.group=Group +pollen.pollType.restricted=Restricted pollen.pollVoteVisibilty.creatorOnly=Visible for creator pollen.pollVoteVisibilty.creatorOnly.help=On poll's creator or administrator can see votes pollen.pollVoteVisibilty.everybody=Public vote @@ -34,12 +40,6 @@ pollen.pollVoteVisibilty.nobody.help=Poll is anonymous, nobody can see votes pollen.pollVoteVisibilty.participantOnly=Visible for participant pollen.pollVoteVisibilty.participantOnly.help=Only poll's participants can see votes -pollen.choiceType.date=Date -pollen.choiceType.image=Image -pollen.choiceType.text=Text -pollen.pollType.free=Free -pollen.pollType.group=Group -pollen.pollType.restricted=Restricted pollen.voteCountingType.condorcet=Condorcet pollen.voteCountingType.normal=Normal pollen.voteCountingType.number=Number Modified: trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_fr_FR.properties =================================================================== --- trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_fr_FR.properties 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-persistence/src/main/resources/i18n/pollen-persistence_fr_FR.properties 2012-09-23 13:09:29 UTC (rev 3700) @@ -1,4 +1,7 @@ pollen.application.config=Configuration de Pollen +pollen.choiceType.date=Date +pollen.choiceType.image=Image +pollen.choiceType.text=Texte pollen.configuration.adminEmail=Email de l'utilisateur par défaut (Utilisateur crée lors du premier lancement de pollen) pollen.configuration.charset=Encoding utilisé par Pollen pollen.configuration.contactEmail=Email pour le lien Contact @@ -26,6 +29,9 @@ pollen.configuration.tmpDirectory=Répertoire temporaire (est nettoyé à chaque démarrage de l'application) pollen.pollCommentVisibilty.everybody=Utiliser les commentaires pollen.pollCommentVisibilty.nobody=Interdir les commentaires sur le sondage +pollen.pollType.free=Libre +pollen.pollType.group=Groupe +pollen.pollType.restricted=Restreint pollen.pollVoteVisibilty.creatorOnly=Visible pour le créateur pollen.pollVoteVisibilty.creatorOnly.help=Seul le créateur ou un administrateur peut voir les votes pollen.pollVoteVisibilty.everybody=Vote publique @@ -34,12 +40,6 @@ pollen.pollVoteVisibilty.nobody.help=Le sondage est anonyme, personne ne peut voir les votes pollen.pollVoteVisibilty.participantOnly=Visible pour les participants pollen.pollVoteVisibilty.participantOnly.help=Seuls les participants du sondage peuvent voir les votes -pollen.choiceType.date=Date -pollen.choiceType.image=Image -pollen.choiceType.text=Texte -pollen.pollType.free=Libre -pollen.pollType.group=Groupe -pollen.pollType.restricted=Restreint pollen.voteCountingType.condorcet=Condorcet pollen.voteCountingType.normal=Normal pollen.voteCountingType.number=Nombre Modified: trunk/pollen-persistence/src/main/xmi/pollen.properties =================================================================== --- trunk/pollen-persistence/src/main/xmi/pollen.properties 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-persistence/src/main/xmi/pollen.properties 2012-09-23 13:09:29 UTC (rev 3700) @@ -24,7 +24,7 @@ #model.tagvalue.dbSchema=Pollen model.tagvalue.constantPrefix=PROPERTY_ model.tagvalue.java.lang.String=text -model.tagvalue.version=1.4.5.2 +model.tagvalue.version=1.5 model.tagvalue.doNotGenerateBooleanGetMethods=true model.tagvalue.indexForeignKeys=true Deleted: trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_4_5_2.java =================================================================== --- trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_4_5_2.java 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_4_5_2.java 2012-09-23 13:09:29 UTC (rev 3700) @@ -1,195 +0,0 @@ -package org.chorem.pollen.entities.migration; - -import com.google.common.base.Function; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; -import com.opensymphony.xwork2.ActionContext; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.chorem.pollen.PollenApplicationContext; -import org.chorem.pollen.business.persistence.Poll; -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.Vote; -import org.chorem.pollen.entities.PollenDAOHelper; -import org.chorem.pollen.services.DefaultPollenServiceContext; -import org.chorem.pollen.services.PollenServiceContext; -import org.chorem.pollen.services.PollenServiceFactory; -import org.chorem.pollen.services.impl.VoteService; -import org.nuiton.topia.TopiaException; -import org.nuiton.topia.framework.TopiaContextImplementor; -import org.nuiton.topia.framework.TopiaSQLQuery; -import org.nuiton.topia.migration.TopiaMigrationCallbackByClassNG; -import org.nuiton.util.Version; -import org.nuiton.util.VersionUtil; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.Collection; -import java.util.List; -import java.util.Locale; -import java.util.Set; - -/** - * Migration for version {@code 1.4.5.2}. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.4.5.2 - */ -public class PollenMigrationCallbackV1_4_5_2 extends TopiaMigrationCallbackByClassNG.MigrationCallBackForVersion { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(PollenMigrationCallbackV1_4_5_2.class); - - @Override - public Version getVersion() { - return VersionUtil.valueOf("1.4.5.2"); - } - - @Override - protected void prepareMigrationScript(TopiaContextImplementor tx, - List<String> queries, - boolean showSql, - boolean showProgression) throws TopiaException { - - PollenApplicationContext applicationContext = PollenApplicationContext.get( - ActionContext.getContext()); - - PollenServiceContext sContext = DefaultPollenServiceContext.newContext( - Locale.getDefault(), - tx, - applicationContext.getConfiguration(), - new PollenServiceFactory(), - applicationContext.getVoteCountingStrategyProvider() - ); - - // clean pollAccount for votes - // see http://chorem.org/issues/804 - removeDuplicateVoteWithSameUserAccount(tx, sContext, queries); - } - - private void removeDuplicateVoteWithSameUserAccount(TopiaContextImplementor tx, - PollenServiceContext sContext, - List<String> queries) throws TopiaException { - - // get all poll with several votes with same userAccount - TopiaSQLQuery<String> getAllPollIdsQuery = new TopiaSQLQuery<String>() { - - @Override - protected PreparedStatement prepareQuery(Connection connection) throws SQLException { - PreparedStatement ps = connection.prepareStatement( - "SELECT p.pollid FROM poll p WHERE " + - "(SELECT COUNT(pa) > COUNT(DISTINCT(pa.useraccount)) " + - "FROM vote v,pollaccount pa WHERE " + - "v.poll = p.topiaid AND v.pollaccount = pa.topiaid " + - "AND pa.useraccount IS NOT NULL);"); - return ps; - } - - @Override - protected String prepareResult(ResultSet set) throws SQLException { - String pollId = set.getString(1); - return pollId; - } - }; - - List<String> pollIds = getAllPollIdsQuery.findMultipleResult(tx); - - PollDAO pollDAO = PollenDAOHelper.getPollDAO(tx); - - VoteService voteService = sContext.newService(VoteService.class); - - Multimap<Poll, PollAccount> accountToAnonymous = ArrayListMultimap.create(); - Multimap<Poll, Vote> voteToFixByPoll = ArrayListMultimap.create(); - - long nbPolls = pollIds.size(); - int currentPollIndex = 0; - - for (String pollId : pollIds) { - - if (log.isInfoEnabled()) { - log.info("Treat bad poll [" + (currentPollIndex++) + "/" + - nbPolls + "]" + pollId); - } - - Poll poll = pollDAO.findByPollId(pollId); - boolean pollAnonymous = poll.isAnonymous(); - - List<Vote> votes = voteService.getAllVotes(poll); - - Multimap<UserAccount, Vote> voteByUserAccount = ArrayListMultimap.create(); - for (Vote vote : votes) { - UserAccount useraccount = voteToUserAccount.apply(vote); - if (useraccount != null) { - voteByUserAccount.put(useraccount, vote); - } - } - - for (UserAccount userAccount : voteByUserAccount.keySet()) { - - if (userAccount != null) { - - Collection<Vote> votesForUser = voteByUserAccount.get(userAccount); - if (votesForUser.size() > 1) { - - // ok found a userAccount - if (log.isWarnEnabled()) { - log.warn("Poll" + (pollAnonymous ? "(anonymous)" : "") + " [" + poll.getPollId() + "] with multi vote for the same userAccount : " + - userAccount.getEmail()); - } - if (pollAnonymous) { - for (Vote vote : votesForUser) { - accountToAnonymous.put(poll, vote.getPollAccount()); - } - } else { - voteToFixByPoll.putAll(poll, votesForUser); - } - } - } - } - } - - // treat anonymous vote - Set<Poll> anonymousPollToFix = accountToAnonymous.keySet(); - - if (CollectionUtils.isNotEmpty(anonymousPollToFix)) { - if (log.isWarnEnabled()) { - log.warn("There is " + anonymousPollToFix.size() + " anonymous " + - "poll to fix, will remove the userAccount from " + - "anonymous votes"); - } - String request = "UPDATE pollaccount set useraccount = NULL WHERE topiaid='%s';"; - for (PollAccount account : accountToAnonymous.values()) { - queries.add(String.format(request, account.getTopiaId())); - } - } - - // treat other votes - Set<Poll> pollToFix = voteToFixByPoll.keySet(); - if (CollectionUtils.isNotEmpty(pollToFix)) { - if (log.isWarnEnabled()) { - log.warn("There is " + pollToFix.size() + " other polls " + - "to fix, will remove the userAccount from any votes"); - } - String request = "UPDATE pollaccount set useraccount = NULL WHERE topiaid='%s';"; - for (Vote account : voteToFixByPoll.values()) { - queries.add(String.format(request, account.getPollAccount().getTopiaId())); - } - } - - } - - final Function<Vote, UserAccount> voteToUserAccount = new Function<Vote, UserAccount>() { - @Override - public UserAccount apply(Vote input) { - PollAccount pollAccount = input.getPollAccount(); - return pollAccount == null ? null : pollAccount.getUserAccount(); - } - }; - -} \ No newline at end of file Copied: trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_5.java (from rev 3697, trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_4_5_2.java) =================================================================== --- trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_5.java (rev 0) +++ trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_5.java 2012-09-23 13:09:29 UTC (rev 3700) @@ -0,0 +1,218 @@ +package org.chorem.pollen.entities.migration; + +/* + * #%L + * Pollen :: Services + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import com.google.common.base.Function; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import com.opensymphony.xwork2.ActionContext; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.chorem.pollen.PollenApplicationContext; +import org.chorem.pollen.business.persistence.Poll; +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.Vote; +import org.chorem.pollen.entities.PollenDAOHelper; +import org.chorem.pollen.services.DefaultPollenServiceContext; +import org.chorem.pollen.services.PollenServiceContext; +import org.chorem.pollen.services.PollenServiceFactory; +import org.chorem.pollen.services.impl.VoteService; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaContextImplementor; +import org.nuiton.topia.framework.TopiaSQLQuery; +import org.nuiton.topia.migration.TopiaMigrationCallbackByClassNG; +import org.nuiton.util.Version; +import org.nuiton.util.VersionUtil; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +/** + * Migration for version {@code 1.4.5.2}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.4.5.2 + */ +public class PollenMigrationCallbackV1_5 extends TopiaMigrationCallbackByClassNG.MigrationCallBackForVersion { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(PollenMigrationCallbackV1_5.class); + + @Override + public Version getVersion() { + return VersionUtil.valueOf("1.5"); + } + + @Override + protected void prepareMigrationScript(TopiaContextImplementor tx, + List<String> queries, + boolean showSql, + boolean showProgression) throws TopiaException { + + PollenApplicationContext applicationContext = PollenApplicationContext.get( + ActionContext.getContext()); + + PollenServiceContext sContext = DefaultPollenServiceContext.newContext( + Locale.getDefault(), + tx, + applicationContext.getConfiguration(), + new PollenServiceFactory(), + applicationContext.getVoteCountingStrategyProvider() + ); + + // clean pollAccount for votes + // see http://chorem.org/issues/804 + removeDuplicateVoteWithSameUserAccount(tx, sContext, queries); + } + + private void removeDuplicateVoteWithSameUserAccount(TopiaContextImplementor tx, + PollenServiceContext sContext, + List<String> queries) throws TopiaException { + + // get all poll with several votes with same userAccount + TopiaSQLQuery<String> getAllPollIdsQuery = new TopiaSQLQuery<String>() { + + @Override + protected PreparedStatement prepareQuery(Connection connection) throws SQLException { + PreparedStatement ps = connection.prepareStatement( + "SELECT p.pollid FROM poll p WHERE " + + "(SELECT COUNT(pa) > COUNT(DISTINCT(pa.useraccount)) " + + "FROM vote v,pollaccount pa WHERE " + + "v.poll = p.topiaid AND v.pollaccount = pa.topiaid " + + "AND pa.useraccount IS NOT NULL);"); + return ps; + } + + @Override + protected String prepareResult(ResultSet set) throws SQLException { + String pollId = set.getString(1); + return pollId; + } + }; + + List<String> pollIds = getAllPollIdsQuery.findMultipleResult(tx); + + PollDAO pollDAO = PollenDAOHelper.getPollDAO(tx); + + VoteService voteService = sContext.newService(VoteService.class); + + Multimap<Poll, PollAccount> accountToAnonymous = ArrayListMultimap.create(); + Multimap<Poll, Vote> voteToFixByPoll = ArrayListMultimap.create(); + + long nbPolls = pollIds.size(); + int currentPollIndex = 0; + + for (String pollId : pollIds) { + + if (log.isInfoEnabled()) { + log.info("Treat bad poll [" + (currentPollIndex++) + "/" + + nbPolls + "]" + pollId); + } + + Poll poll = pollDAO.findByPollId(pollId); + boolean pollAnonymous = poll.isAnonymous(); + + List<Vote> votes = voteService.getAllVotes(poll); + + Multimap<UserAccount, Vote> voteByUserAccount = ArrayListMultimap.create(); + for (Vote vote : votes) { + UserAccount useraccount = voteToUserAccount.apply(vote); + if (useraccount != null) { + voteByUserAccount.put(useraccount, vote); + } + } + + for (UserAccount userAccount : voteByUserAccount.keySet()) { + + if (userAccount != null) { + + Collection<Vote> votesForUser = voteByUserAccount.get(userAccount); + if (votesForUser.size() > 1) { + + // ok found a userAccount + if (log.isWarnEnabled()) { + log.warn("Poll" + (pollAnonymous ? "(anonymous)" : "") + " [" + poll.getPollId() + "] with multi vote for the same userAccount : " + + userAccount.getEmail()); + } + if (pollAnonymous) { + for (Vote vote : votesForUser) { + accountToAnonymous.put(poll, vote.getPollAccount()); + } + } else { + voteToFixByPoll.putAll(poll, votesForUser); + } + } + } + } + } + + // treat anonymous vote + Set<Poll> anonymousPollToFix = accountToAnonymous.keySet(); + + if (CollectionUtils.isNotEmpty(anonymousPollToFix)) { + if (log.isWarnEnabled()) { + log.warn("There is " + anonymousPollToFix.size() + " anonymous " + + "poll to fix, will remove the userAccount from " + + "anonymous votes"); + } + String request = "UPDATE pollaccount set useraccount = NULL WHERE topiaid='%s';"; + for (PollAccount account : accountToAnonymous.values()) { + queries.add(String.format(request, account.getTopiaId())); + } + } + + // treat other votes + Set<Poll> pollToFix = voteToFixByPoll.keySet(); + if (CollectionUtils.isNotEmpty(pollToFix)) { + if (log.isWarnEnabled()) { + log.warn("There is " + pollToFix.size() + " other polls " + + "to fix, will remove the userAccount from any votes"); + } + String request = "UPDATE pollaccount set useraccount = NULL WHERE topiaid='%s';"; + for (Vote account : voteToFixByPoll.values()) { + queries.add(String.format(request, account.getPollAccount().getTopiaId())); + } + } + + } + + final Function<Vote, UserAccount> voteToUserAccount = new Function<Vote, UserAccount>() { + @Override + public UserAccount apply(Vote input) { + PollAccount pollAccount = input.getPollAccount(); + return pollAccount == null ? null : pollAccount.getUserAccount(); + } + }; + +} \ No newline at end of file Property changes on: trunk/pollen-services/src/main/java/org/chorem/pollen/entities/migration/PollenMigrationCallbackV1_5.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/pollen-services/src/main/resources/META-INF/services/org.nuiton.topia.migration.TopiaMigrationCallbackByClassNG$MigrationCallBackForVersion =================================================================== --- trunk/pollen-services/src/main/resources/META-INF/services/org.nuiton.topia.migration.TopiaMigrationCallbackByClassNG$MigrationCallBackForVersion 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-services/src/main/resources/META-INF/services/org.nuiton.topia.migration.TopiaMigrationCallbackByClassNG$MigrationCallBackForVersion 2012-09-23 13:09:29 UTC (rev 3700) @@ -4,4 +4,4 @@ org.chorem.pollen.entities.migration.PollenMigrationCallbackV1_3_1 org.chorem.pollen.entities.migration.PollenMigrationCallbackV1_4 org.chorem.pollen.entities.migration.PollenMigrationCallbackV1_4_5 -org.chorem.pollen.entities.migration.PollenMigrationCallbackV1_4_5_2 \ No newline at end of file +org.chorem.pollen.entities.migration.PollenMigrationCallbackV1_5 \ No newline at end of file Modified: trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/GroupOfVoterBuilder.java =================================================================== --- trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/GroupOfVoterBuilder.java 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/GroupOfVoterBuilder.java 2012-09-23 13:09:29 UTC (rev 3700) @@ -1,5 +1,28 @@ package org.chorem.pollen.votecounting.model; +/* + * #%L + * Pollen :: VoteCounting Api + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + import com.google.common.base.Preconditions; import com.google.common.collect.Sets; Property changes on: trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/GroupOfVoterBuilder.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL Modified: trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/SimpleVoterBuilder.java =================================================================== --- trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/SimpleVoterBuilder.java 2012-09-23 13:03:52 UTC (rev 3699) +++ trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/SimpleVoterBuilder.java 2012-09-23 13:09:29 UTC (rev 3700) @@ -1,5 +1,28 @@ package org.chorem.pollen.votecounting.model; +/* + * #%L + * Pollen :: VoteCounting Api + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2009 - 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + import com.google.common.base.Preconditions; import com.google.common.collect.Sets; Property changes on: trunk/pollen-votecounting-api/src/main/java/org/chorem/pollen/votecounting/model/SimpleVoterBuilder.java ___________________________________________________________________ Modified: svn:keywords - Author Date Id Revision + Author Date Id Revision HeadURL
participants (1)
-
tchemit@users.chorem.org