Pollen-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- 3196 discussions
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit db18b7c34e43b0a748860f1715904808c618942e
Author: Adrien Garandel <a.garandel(a)dralagen.fr>
Date: Thu May 22 17:48:12 2014 +0200
alert floatant
---
pollen-ui-angular/src/main/webapp/css/style.css | 8 ++++++++
pollen-ui-angular/src/main/webapp/partials/poll.html | 7 +++----
2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/pollen-ui-angular/src/main/webapp/css/style.css b/pollen-ui-angular/src/main/webapp/css/style.css
index 597a98b..de2d910 100644
--- a/pollen-ui-angular/src/main/webapp/css/style.css
+++ b/pollen-ui-angular/src/main/webapp/css/style.css
@@ -198,6 +198,14 @@ i.icon-collapse {
margin-top:5px;
}
+.alert-float {
+ position: absolute;
+ width: 80%;
+ left: 10%;
+ z-index: 100000;
+ opacity: 0.9;
+}
+
.danger {
color: #a94442;
}
diff --git a/pollen-ui-angular/src/main/webapp/partials/poll.html b/pollen-ui-angular/src/main/webapp/partials/poll.html
index 0363f7a..cb1d550 100644
--- a/pollen-ui-angular/src/main/webapp/partials/poll.html
+++ b/pollen-ui-angular/src/main/webapp/partials/poll.html
@@ -21,10 +21,9 @@
<form class="form-horizontal" novalidate>
- <alert type="danger" ng-if="globalVariables.errorForm"> Champ non remplie </alert>
- <alert type="danger" ng-if="restError.choice"> Vous devez avoir au moins 1 choix </alert>
- <alert type="success" ng-if="globalVariables.editMode && globalVariables.saved"> Sondage sauvegardé..</alert>
- <alert type="success" ng-if="!globalVariables.editMode && globalVariables.saved"> Vote effectué..</alert>
+ <alert type="danger" class="alert-float" ng-if="restError.choice" close="restError.choice = false"> Vous devez avoir au moins 1 choix </alert>
+ <alert type="success" class="alert-float" ng-if="globalVariables.editMode && globalVariables.saved" close="globalVariables.saved = false"> Sondage sauvegardé..</alert>
+ <alert type="success" class="alert-float" ng-if="!globalVariables.editMode && globalVariables.saved" close="globalVariables.saved = false"> Vote effectué..</alert>
<alert type="warning" ng-if="globalVariables.voted"> Les votes ont commencé, certaine modification sont inaccessible.. </alert>
<alert type="warning" ng-if="globalVariables.created"> <a href="#/poll/edit/{{pollId}}"> Edition du sondage </a>.. </alert>
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit 65f9744d94537d1db568cdf8d41cec8911d6355c
Author: Adrien Garandel <a.garandel(a)dralagen.fr>
Date: Thu May 22 17:16:28 2014 +0200
print result in vote page
---
pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js | 8 ++++++++
pollen-ui-angular/src/main/webapp/partials/poll-result.html | 4 ++++
2 files changed, 12 insertions(+)
diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js
index 3bb1029..02a6b82 100644
--- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js
+++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js
@@ -305,6 +305,14 @@ angular.module('pollControllers', [])
})
})
})
+
+ Poll.get({pollId:$routeParams.pollId, cmd:'result'}, function (result) {
+ $scope.data.result = result;
+ angular.forEach(result.scores, function (value, key) {
+ value.choice = JSON.search($scope.data.choices, value.choiceId);
+ })
+ console.log(result);
+ })
}
initPoll();
diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-result.html b/pollen-ui-angular/src/main/webapp/partials/poll-result.html
new file mode 100644
index 0000000..ec74732
--- /dev/null
+++ b/pollen-ui-angular/src/main/webapp/partials/poll-result.html
@@ -0,0 +1,4 @@
+<h2> Résultats :</h2>
+<div ng-repeat="score in data.result.scores">
+ <h3> </h3>
+</div>
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit 4552378110b7168c87ef2a249db07c20cbde6846
Author: Adrien Garandel <a.garandel(a)dralagen.fr>
Date: Thu May 22 16:29:33 2014 +0200
move to / when error 403
---
pollen-ui-angular/src/main/webapp/js/app.js | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js
index 6737d15..0794019 100644
--- a/pollen-ui-angular/src/main/webapp/js/app.js
+++ b/pollen-ui-angular/src/main/webapp/js/app.js
@@ -27,7 +27,7 @@ angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userC
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
}])
-.factory('httpInterceptor', ['$q', '$rootScope', 'SessionStorage', function ($q, $rootScope, SessionStorage) {
+.factory('httpInterceptor', ['$q', '$rootScope', '$location', 'SessionStorage', function ($q, $rootScope, $location, SessionStorage) {
return {
request: function($config) {
// set locale with browser preference
@@ -49,6 +49,10 @@ angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userC
//error login or sessionToken
$rootScope.$broadcast('sessionExpired');
}
+ if (response.status === 403) {
+ //access forbidden
+ $location.path('/');
+ }
return $q.reject(response);
}
};
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit d2726c6dc728d9a2cc22920df530d3d99fea26f0
Author: Adrien Garandel <a.garandel(a)dralagen.fr>
Date: Thu May 22 16:20:51 2014 +0200
send permission for getting poll and choices
---
pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js
index 41dd6fc..3bb1029 100644
--- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js
+++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js
@@ -220,7 +220,7 @@ angular.module('pollControllers', [])
}
$scope.callBackEditChoice = function (choice) {
- PollChoice.update({permission:$routeParams.token, pollId:$routeParams.pollId}, choice, function() {
+ PollChoice.update({pollId:$routeParams.pollId, permission:$routeParams.token}, choice, function() {
delete choice.restError;
$scope.globalVariables.saved = true;
}, function (error) {
@@ -241,13 +241,13 @@ angular.module('pollControllers', [])
}
var initPoll = function () {
- Poll.get({pollId:$routeParams.pollId}).$promise.then(function (poll) {
+ Poll.get({pollId:$routeParams.pollId, permission:$routeParams.token}, function (poll) {
if (angular.isUndefined(poll.permission)) {
$location.path('/');
}
$scope.data.poll = poll;
});
- PollChoice.query({pollId:$routeParams.pollId}).$promise.then(function (choices) {
+ PollChoice.query({pollId:$routeParams.pollId, permission:$routeParams.token}).$promise.then(function (choices) {
$scope.data.choices = choices;
$scope.data.vote = {};
$scope.data.vote.choice = $scope.data.choices;
@@ -285,7 +285,7 @@ angular.module('pollControllers', [])
$controller('PollCtrl', {$scope:$scope});
var initPoll = function () {
- Poll.get({pollId:$routeParams.pollId}).$promise.then(function (poll) {
+ Poll.get({pollId:$routeParams.pollId}, function (poll) {
$scope.data.poll = poll;
});
PollChoice.query({pollId:$routeParams.pollId}, function (choices) {
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit 02f977fb3ae2572b09b8742028730240883fa2c2
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu May 22 16:44:42 2014 +0200
fix runtime dep
---
pollen-rest-api/pom.xml | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/pollen-rest-api/pom.xml b/pollen-rest-api/pom.xml
index 8e0c599..8b8ee50 100644
--- a/pollen-rest-api/pom.xml
+++ b/pollen-rest-api/pom.xml
@@ -26,6 +26,13 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>pollen-votecounting-aggregator</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>runtime</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>pollen-persistence</artifactId>
<version>${project.version}</version>
</dependency>
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit 6b56ad5fecf4d12010c1fa37652300e435fcfe17
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu May 22 16:30:37 2014 +0200
fix build + improve gitignore
---
.gitignore | 3 ++-
pollen-services/pom.xml | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/.gitignore b/.gitignore
index 48de85c..5a36c89 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,8 @@
atlassian-ide-plugin.xml
target/*
*/target/*
-
+*~
+*/*~
pollen-ui-angular/src/main/webapp/js/conf.js
pollen-ui-js/src/main/webapp/pollen-ui-js.css
diff --git a/pollen-services/pom.xml b/pollen-services/pom.xml
index 668add6..bb00f0a 100644
--- a/pollen-services/pom.xml
+++ b/pollen-services/pom.xml
@@ -25,6 +25,7 @@
<groupId>${project.groupId}</groupId>
<artifactId>pollen-votecounting-aggregator</artifactId>
<version>${project.version}</version>
+ <type>pom</type>
<scope>test</scope>
</dependency>
<dependency>
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit c6b78dfab0a087655078779d102d8b64661b3586
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu May 22 13:24:31 2014 +0200
vote counting service
---
pollen-rest-api/pom.xml | 5 +
.../rest/api/PollenRestApiApplicationContext.java | 15 ++
.../chorem/pollen/rest/api/v1/VoteCountingApi.java | 14 +-
.../pollen/rest/api/AbstractPollenRestApiTest.java | 3 +-
pollen-services/pom.xml | 11 ++
.../services/DefaultPollenServiceContext.java | 12 ++
.../pollen/services/PollenApplicationContext.java | 3 +
.../pollen/services/PollenServiceContext.java | 3 +
.../pollen/services/bean/PollResultBean.java | 38 ----
.../org/chorem/pollen/services/bean/VoteBean.java | 39 ++++
.../services/service/VoteCountingService.java | 205 ++++++++++++++++++++-
.../pollen/services/service/VoteService.java | 33 +++-
.../pollen/services/service/VoterListService.java | 15 +-
.../services/service/security/PermissionVerb.java | 2 +
.../test/FakePollenApplicationContext.java | 17 +-
.../services/test/FakePollenServiceContext.java | 6 +-
.../services/service/VoteCountingServiceTest.java | 126 +++++++++++++
17 files changed, 493 insertions(+), 54 deletions(-)
diff --git a/pollen-rest-api/pom.xml b/pollen-rest-api/pom.xml
index 4680c26..8e0c599 100644
--- a/pollen-rest-api/pom.xml
+++ b/pollen-rest-api/pom.xml
@@ -21,6 +21,11 @@
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>pollen-votecounting-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>pollen-persistence</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java
index 0ffb9c3..bd2a0a7 100644
--- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java
+++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplicationContext.java
@@ -44,6 +44,7 @@ import org.chorem.pollen.services.service.PollenUserService;
import org.chorem.pollen.services.service.security.DefaultPollenSecurityContext;
import org.chorem.pollen.services.service.security.PollenSecurityContext;
import org.chorem.pollen.services.service.security.PollenSecurityRealm;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
import org.nuiton.i18n.I18n;
import org.nuiton.i18n.init.DefaultI18nInitializer;
import org.nuiton.i18n.init.I18nInitializer;
@@ -108,6 +109,8 @@ public class PollenRestApiApplicationContext implements PollenApplicationContext
protected PollenServiceConfig applicationConfig;
+ protected VoteCountingFactory voteCountingFactory;
+
protected PollenRestApiApplicationContext(PollenServiceConfig applicationConfig, PollenTopiaApplicationContext topiaApplicationContext) {
Preconditions.checkNotNull(applicationConfig, "Configuration can not be null!");
@@ -130,6 +133,17 @@ public class PollenRestApiApplicationContext implements PollenApplicationContext
}
@Override
+ public VoteCountingFactory getVoteCountingFactory() {
+
+ if (voteCountingFactory == null) {
+ voteCountingFactory = new VoteCountingFactory();
+ }
+
+ return voteCountingFactory;
+
+ }
+
+ @Override
public PollenTopiaPersistenceContext newPersistenceContext() {
PollenTopiaPersistenceContext persistenceContext = topiaApplicationContext.newPersistenceContext();
@@ -144,6 +158,7 @@ public class PollenRestApiApplicationContext implements PollenApplicationContext
newServiceContext.setPollenServiceConfig(applicationConfig);
newServiceContext.setTopiaApplicationContext(topiaApplicationContext);
newServiceContext.setPersistenceContext(persistenceContext);
+ newServiceContext.setVoteCountingFactory(getVoteCountingFactory());
newServiceContext.setLocale(locale);
return newServiceContext;
diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteCountingApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteCountingApi.java
index cd95fbc..2db98ed 100644
--- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteCountingApi.java
+++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/VoteCountingApi.java
@@ -23,8 +23,9 @@ package org.chorem.pollen.rest.api.v1;
* #L%
*/
-import org.chorem.pollen.services.bean.PollResultBean;
import org.chorem.pollen.services.service.VoteCountingService;
+import org.chorem.pollen.votecounting.model.GroupVoteCountingResult;
+import org.chorem.pollen.votecounting.model.VoteCountingResult;
import org.debux.webmotion.server.WebMotionController;
/**
@@ -35,9 +36,16 @@ import org.debux.webmotion.server.WebMotionController;
*/
public class VoteCountingApi extends WebMotionController {
- public PollResultBean getResult(VoteCountingService voteCountingService, String pollId) {
+ public VoteCountingResult getMainResult(VoteCountingService voteCountingService, String pollId) {
- PollResultBean result = voteCountingService.getResult(pollId);
+ VoteCountingResult result = voteCountingService.getMainResult(pollId);
+ return result;
+
+ }
+
+ public GroupVoteCountingResult getGroupResult(VoteCountingService voteCountingService, String pollId) {
+
+ GroupVoteCountingResult result = voteCountingService.getGroupResult(pollId);
return result;
}
diff --git a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AbstractPollenRestApiTest.java b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AbstractPollenRestApiTest.java
index 1715191..7fafbbe 100644
--- a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AbstractPollenRestApiTest.java
+++ b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/AbstractPollenRestApiTest.java
@@ -93,7 +93,8 @@ public class AbstractPollenRestApiTest extends WebMotionTest {
Locale.FRANCE,
application.getApplicationConfig(),
application.getTopiaApplicationContext(),
- application.newPersistenceContext());
+ application.newPersistenceContext(),
+ application.getVoteCountingFactory());
return serviceContext;
}
diff --git a/pollen-services/pom.xml b/pollen-services/pom.xml
index 8f5dfdf..668add6 100644
--- a/pollen-services/pom.xml
+++ b/pollen-services/pom.xml
@@ -18,6 +18,17 @@
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>pollen-votecounting-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>pollen-votecounting-aggregator</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>pollen-persistence</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/DefaultPollenServiceContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/DefaultPollenServiceContext.java
index 245a356..08eef5d 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/DefaultPollenServiceContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/DefaultPollenServiceContext.java
@@ -37,6 +37,7 @@ import org.chorem.pollen.persistence.PollenPersistenceContext;
import org.chorem.pollen.persistence.PollenTopiaApplicationContext;
import org.chorem.pollen.services.config.PollenServiceConfig;
import org.chorem.pollen.services.service.security.PollenSecurityContext;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -61,6 +62,8 @@ public class DefaultPollenServiceContext implements PollenServiceContext {
*/
protected DefaultHashService hashService;
+ protected VoteCountingFactory voteCountingFactory;
+
public void setPollenServiceConfig(PollenServiceConfig pollenServiceConfig) {
this.pollenServiceConfig = pollenServiceConfig;
}
@@ -154,6 +157,15 @@ public class DefaultPollenServiceContext implements PollenServiceContext {
}
@Override
+ public VoteCountingFactory getVoteCountingFactory() {
+ return voteCountingFactory;
+ }
+
+ public void setVoteCountingFactory(VoteCountingFactory voteCountingFactory) {
+ this.voteCountingFactory = voteCountingFactory;
+ }
+
+ @Override
public PollenPersistenceContext getPersistenceContext() {
return persistenceContext;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/PollenApplicationContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/PollenApplicationContext.java
index 514c601..ec5d09f 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/PollenApplicationContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/PollenApplicationContext.java
@@ -28,6 +28,7 @@ import org.chorem.pollen.persistence.entity.PollenPrincipal;
import org.chorem.pollen.persistence.entity.SessionToken;
import org.chorem.pollen.services.config.PollenServiceConfig;
import org.chorem.pollen.services.service.security.PollenSecurityContext;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
import java.io.Closeable;
import java.util.Locale;
@@ -44,6 +45,8 @@ public interface PollenApplicationContext extends Closeable {
PollenServiceConfig getApplicationConfig();
+ VoteCountingFactory getVoteCountingFactory();
+
PollenTopiaPersistenceContext newPersistenceContext();
PollenServiceContext newServiceContext(PollenPersistenceContext persistenceContext, Locale locale);
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceContext.java
index 7d95782..ac196b4 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/PollenServiceContext.java
@@ -27,6 +27,7 @@ import org.chorem.pollen.persistence.PollenPersistenceContext;
import org.chorem.pollen.persistence.PollenTopiaApplicationContext;
import org.chorem.pollen.services.config.PollenServiceConfig;
import org.chorem.pollen.services.service.security.PollenSecurityContext;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
import java.util.Date;
import java.util.Locale;
@@ -62,4 +63,6 @@ public interface PollenServiceContext {
String generateSalt();
String encodePassword(String salt, String password);
+
+ VoteCountingFactory getVoteCountingFactory();
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollResultBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollResultBean.java
deleted file mode 100644
index 7f854bd..0000000
--- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollResultBean.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.chorem.pollen.services.bean;
-
-/*
- * #%L
- * Pollen :: Service
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2009 - 2013 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 java.io.Serializable;
-
-/**
- * TODO
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.0
- */
-public class PollResultBean implements Serializable {
-
- private static final long serialVersionUID = 1L;
-
-}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java
index ff99433..6cf20cd 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoteBean.java
@@ -1,11 +1,14 @@
package org.chorem.pollen.services.bean;
+import org.apache.commons.lang3.StringUtils;
import org.chorem.pollen.persistence.entity.PollenPrincipal;
import org.chorem.pollen.persistence.entity.PollenPrincipalImpl;
import org.chorem.pollen.persistence.entity.Vote;
import org.chorem.pollen.persistence.entity.VoteImpl;
import org.chorem.pollen.persistence.entity.VoteToChoice;
import org.chorem.pollen.persistence.entity.VoteToChoices;
+import org.chorem.pollen.persistence.entity.VoterListMember;
+import org.chorem.pollen.persistence.entity.VoterListMemberImpl;
import java.util.ArrayList;
import java.util.LinkedHashSet;
@@ -24,12 +27,16 @@ public class VoteBean extends PollenBean<Vote> {
protected String voterId;
+ protected String voterListMemberId;
+
protected String voterName;
protected String permission;
protected Boolean anonymous;
+ protected double weight;
+
protected Set<VoteToChoiceBean> choice = new LinkedHashSet<>();
@Override
@@ -50,6 +57,7 @@ public class VoteBean extends PollenBean<Vote> {
setAnonymous(vote.isAnonymous());
setVoterId(vote.getVoter().getTopiaId());
setVoterName(vote.getVoter().getName());
+ setWeight(vote.getWeight());
List<VoteToChoice> voteToChoices = new ArrayList<>(vote.getVoteToChoice());
VoteToChoices.sortByChoiceOrder(voteToChoices);
@@ -62,6 +70,12 @@ public class VoteBean extends PollenBean<Vote> {
}
+ if (vote.getVoterListMember() != null) {
+
+ setVoterListMemberId(vote.getVoterListMember().getTopiaId());
+
+ }
+
}
@Override
@@ -71,6 +85,7 @@ public class VoteBean extends PollenBean<Vote> {
entity.setTopiaId(getId());
entity.setAnonymous(getAnonymous() != null && getAnonymous());
+ entity.setWeight(getWeight());
PollenPrincipal voter = new PollenPrincipalImpl();
entity.setVoter(voter);
@@ -84,6 +99,14 @@ public class VoteBean extends PollenBean<Vote> {
}
+ if (StringUtils.isNotBlank(voterListMemberId)) {
+
+ // FIXME
+ VoterListMember member = new VoterListMemberImpl();
+ member.setTopiaId(voterListMemberId);
+
+ }
+
return entity;
}
@@ -131,4 +154,20 @@ public class VoteBean extends PollenBean<Vote> {
public boolean isAnonymous() {
return anonymous != null && anonymous;
}
+
+ public String getVoterListMemberId() {
+ return voterListMemberId;
+ }
+
+ public void setVoterListMemberId(String voterListMemberId) {
+ this.voterListMemberId = voterListMemberId;
+ }
+
+ public double getWeight() {
+ return weight;
+ }
+
+ public void setWeight(double weight) {
+ this.weight = weight;
+ }
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java
index 0921474..cd3a08d 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteCountingService.java
@@ -23,9 +23,29 @@ package org.chorem.pollen.services.service;
* #L%
*/
+import com.google.common.base.Function;
import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
import org.chorem.pollen.persistence.entity.Poll;
-import org.chorem.pollen.services.bean.PollResultBean;
+import org.chorem.pollen.persistence.entity.Polls;
+import org.chorem.pollen.persistence.entity.Vote;
+import org.chorem.pollen.persistence.entity.VoteToChoice;
+import org.chorem.pollen.persistence.entity.VoterList;
+import org.chorem.pollen.persistence.entity.VoterListMember;
+import org.chorem.pollen.votecounting.VoteCounting;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
+import org.chorem.pollen.votecounting.VoteCountingStrategy;
+import org.chorem.pollen.votecounting.model.GroupOfVoter;
+import org.chorem.pollen.votecounting.model.GroupOfVoterBuilder;
+import org.chorem.pollen.votecounting.model.GroupVoteCountingResult;
+import org.chorem.pollen.votecounting.model.SimpleVoterBuilder;
+import org.chorem.pollen.votecounting.model.VoteCountingResult;
+import org.chorem.pollen.votecounting.model.Voter;
+import org.chorem.pollen.votecounting.model.VoterBuilder;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* TODO
@@ -35,10 +55,187 @@ import org.chorem.pollen.services.bean.PollResultBean;
*/
public class VoteCountingService extends PollenServiceSupport {
- public PollResultBean getResult(String pollId) {
+ public VoteCountingResult getMainResult(String pollId) {
+
Preconditions.checkNotNull(pollId);
+
+
Poll poll = getPollService().getPoll0(pollId);
- //TODO
- return null;
+
+ VoteCountingResult mainResult;
+
+ if (Polls.isPollGroup(poll)) {
+
+ GroupVoteCountingResult groupResult = getGroupResult(pollId);
+ mainResult = groupResult.getMainResult();
+
+ } else {
+ mainResult = getSimpleResult(pollId);
+
+ }
+
+ return mainResult;
+
}
+
+ public VoteCountingResult getSimpleResult(String pollId) {
+
+ Preconditions.checkNotNull(pollId);
+
+ Poll poll = getPollService().getPoll0(pollId);
+ List<Vote> votes = getVoteService().getVotes0(poll);
+
+ VoteCounting voteCounting = getVoteCounting(poll);
+ VoteCountingStrategy strategy = voteCounting.newStrategy();
+
+ GroupOfVoter groupOfVoter = toSimpleVotersGroup(votes);
+
+ GroupVoteCountingResult result = strategy.votecount(groupOfVoter);
+
+ VoteCountingResult mainResult = result.getMainResult();
+ return mainResult;
+
+ }
+
+ public GroupVoteCountingResult getGroupResult(String pollId) {
+
+ Preconditions.checkNotNull(pollId);
+
+ Poll poll = getPollService().getPoll0(pollId);
+ List<VoterList> voterLists = getVoterListService().getVoterLists0(poll);
+ List<Vote> votes = getVoteService().getVotes0(poll);
+
+ VoteCounting voteCounting = getVoteCounting(poll);
+ VoteCountingStrategy strategy = voteCounting.newStrategy();
+
+ // Create a groupVoter including of the root voters
+ GroupOfVoter group = toGroupOfVoters(poll, voterLists, votes);
+
+ GroupVoteCountingResult result = strategy.votecount(group);
+ return result;
+
+ }
+
+
+ /**
+ * Collect all vote for all voters of the givne poll.
+ * <p/>
+ * The result (a set of simple voters) are stored in a fictiv group of voter.
+ * <p/>
+ * <strong>Note:</strong> Even if the poll is a group type, then no of his
+ * group are used (just collect simple voters with no group linkage).
+ *
+ * @param votes votes to scan
+ * @return the aggregate group of voter containing simple voters with
+ * their votes.
+ */
+ protected GroupOfVoter toSimpleVotersGroup(List<Vote> votes) {
+
+ Preconditions.checkNotNull(votes);
+
+ SimpleVoterBuilder builder = new SimpleVoterBuilder();
+
+ for (Vote vote : votes) {
+
+ fillSimpleVoter(builder, vote);
+
+ }
+
+ Set<Voter> voter = builder.getVoters();
+
+ GroupOfVoter result = GroupOfVoter.newVoter(null, 1.0, voter);
+ return result;
+
+ }
+
+ /**
+ * Build the group of voter of the poll, using his group to build sub
+ * group of the poll.
+ * <p/>
+ * <strong>Note:</strong> This method can only be used for a group poll.
+ *
+ * @param poll the poll to scan
+ * @param voterLists voterLists to scan
+ * @param votes votes to scan
+ * @return the aggregate group of group of voters with their votes
+ */
+ protected GroupOfVoter toGroupOfVoters(Poll poll, List<VoterList> voterLists, List<Vote> votes) {
+
+ Preconditions.checkNotNull(poll);
+ Preconditions.checkNotNull(voterLists);
+ Preconditions.checkNotNull(votes);
+ Preconditions.checkArgument(Polls.isPollGroup(poll),
+ "Can only use this method for a group poll");
+
+ GroupOfVoterBuilder builder = new GroupOfVoterBuilder();
+
+ // create group of voter
+ Map<VoterListMember, Vote> voteByVoterListMember = Maps.uniqueIndex(
+ votes,
+ new Function<Vote, VoterListMember>() {
+ @Override
+ public VoterListMember apply(Vote input) {
+ return input.getVoterListMember();
+ }
+ }
+ );
+
+ for (VoterList voterList : voterLists) {
+
+ builder.newGroupVoter(voterList.getTopiaId(),
+ voterList.getWeight());
+
+ for (VoterListMember voterListMember : voterList.getMember()) {
+
+ Vote vote = voteByVoterListMember.get(voterListMember);
+
+ if (vote != null) {
+
+ fillSimpleVoter(builder, vote);
+
+ }
+
+ }
+
+ }
+
+ Set<Voter> voter = builder.getVoters();
+
+ GroupOfVoter result = GroupOfVoter.newVoter(null, 1.0, voter);
+ return result;
+
+ }
+
+ protected void fillSimpleVoter(VoterBuilder builder, Vote vote) {
+
+ builder.newVoter(vote.getVoter().getTopiaId(), vote.getWeight());
+
+ if (!vote.isVoteToChoiceEmpty()) {
+
+ for (VoteToChoice voteToChoice : vote.getVoteToChoice()) {
+
+ builder.addVoteForChoice(
+ voteToChoice.getChoice().getTopiaId(),
+ voteToChoice.getVoteValue());
+
+ }
+
+ }
+
+ }
+
+ protected VoteCounting getVoteCounting(Poll poll) {
+
+ int id = poll.getVoteCountingType();
+
+ VoteCountingFactory voteCountingFactory = serviceContext.getVoteCountingFactory();
+ VoteCounting result = voteCountingFactory.getVoteCounting(id);
+
+ Preconditions.checkNotNull(
+ result, "Could not find vote counting for id " + id);
+
+ return result;
+
+ }
+
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java
index d75da00..129cc61 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java
@@ -23,6 +23,7 @@ package org.chorem.pollen.services.service;
* #L%
*/
+import org.apache.commons.lang3.StringUtils;
import org.chorem.pollen.persistence.entity.Choice;
import org.chorem.pollen.persistence.entity.Poll;
import org.chorem.pollen.persistence.entity.PollenPrincipal;
@@ -53,7 +54,7 @@ public class VoteService extends PollenServiceSupport {
checkNotNull(pollId);
Poll poll = getPollService().getPoll0(pollId);
- List<Vote> votes = getVoteDao().findAll(poll);
+ List<Vote> votes = getVotes0(poll);
List<VoteBean> voteBeans = copyAsList(VoteBean.class, votes);
for (VoteBean voteBean : voteBeans) {
@@ -191,6 +192,29 @@ public class VoteService extends PollenServiceSupport {
// toSave.setText(vote.getText());
//
+ // -- weight -- //
+
+ if (!voteExist) {
+
+ double weight;
+
+ if (StringUtils.isBlank(vote.getVoterListMemberId())) {
+
+ // not link to a member, use default value
+
+ weight = 1d;
+
+ } else {
+
+ //FIXME Get member and his weight
+ weight = 1d;
+
+ }
+
+ toSave.setWeight(weight);
+
+ }
+
// -- author -- //
toSave.getVoter().setName(vote.getVoterName());
@@ -231,6 +255,13 @@ public class VoteService extends PollenServiceSupport {
}
+ protected List<Vote> getVotes0(Poll poll) {
+
+ List<Vote> votes = getVoteDao().findAll(poll);
+ return votes;
+
+ }
+
protected VoteToChoice getVoteToChoice(Vote vote, String voteToChoiceId) {
VoteToChoice result = getVoteToChoiceDao().findByTopiaId(voteToChoiceId);
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java
index d34d307..dd6ceb9 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java
@@ -88,7 +88,7 @@ public class VoterListService extends PollenServiceSupport {
checkNotNull(pollId);
Poll poll = getPollService().getPoll0(pollId);
- List<VoterList> voterLists = getVoterListDao().forPollEquals(poll).findAll();
+ List<VoterList> voterLists = getVoterLists0(poll);
List<VoterListBean> voterListBeans = copyAsList(VoterListBean.class, voterLists);
return voterListBeans;
@@ -113,7 +113,7 @@ public class VoterListService extends PollenServiceSupport {
Poll poll = getPollService().getPoll0(pollId);
- List<VoterList> existingVoterLists = getVoterListDao().forPollEquals(poll).findAll();
+ List<VoterList> existingVoterLists = getVoterLists0(poll);
ErrorMap errorMap = checkVoterList(existingVoterLists, voterList);
errorMap.failIfNotEmpty();
@@ -137,7 +137,7 @@ public class VoterListService extends PollenServiceSupport {
Poll poll = getPollService().getPoll0(pollId);
- List<VoterList> existingVoterLists = getVoterListDao().forPollEquals(poll).findAll();
+ List<VoterList> existingVoterLists = getVoterLists0(poll);
ErrorMap errorMap = checkVoterList(existingVoterLists, voterList);
errorMap.failIfNotEmpty();
@@ -213,7 +213,6 @@ public class VoterListService extends PollenServiceSupport {
}
-
public VoterListMemberBean editVoterListMember(String pollId, String voterListId, VoterListMemberBean member) throws InvalidFormException {
checkNotNull(pollId);
@@ -236,6 +235,7 @@ public class VoterListService extends PollenServiceSupport {
}
+
public void deleteVoterListMember(String pollId, String voterListId, String memberId) {
checkNotNull(pollId);
@@ -250,6 +250,13 @@ public class VoterListService extends PollenServiceSupport {
}
+ protected List<VoterList> getVoterLists0(Poll poll) {
+
+ List<VoterList> voterLists = getVoterListDao().forPollEquals(poll).findAll();
+ return voterLists;
+
+ }
+
protected VoterList getVoterList(Poll poll, String voterListId) {
VoterList result = getVoterListDao().findByTopiaId(voterListId);
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PermissionVerb.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PermissionVerb.java
index 7bf249c..b16f99b 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PermissionVerb.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PermissionVerb.java
@@ -30,10 +30,12 @@ package org.chorem.pollen.services.service.security;
* @since 2.0
*/
public enum PermissionVerb {
+
readPoll,
readChoice,
readComment,
readVote,
+ readPollResult,
addPoll,
addChoice,
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java
index 17f9fd4..eba5700 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java
@@ -39,6 +39,7 @@ import org.chorem.pollen.services.config.PollenServiceConfig;
import org.chorem.pollen.services.config.PollenServiceConfigOption;
import org.chorem.pollen.services.service.FixturesService;
import org.chorem.pollen.services.service.security.PollenSecurityRealm;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.nuiton.topia.junit.ConfigurationHelper;
@@ -75,6 +76,8 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA
protected PollenFixtures fixtures;
+ protected VoteCountingFactory voteCountingFactory;
+
protected String methodName;
protected int currentPortNumber;
@@ -178,6 +181,17 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA
}
@Override
+ public VoteCountingFactory getVoteCountingFactory() {
+
+ if (voteCountingFactory == null) {
+ voteCountingFactory = new VoteCountingFactory();
+ }
+
+ return voteCountingFactory;
+
+ }
+
+ @Override
public PollenTopiaPersistenceContext newPersistenceContext() {
PollenTopiaPersistenceContext persistenceContext;
@@ -202,7 +216,8 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA
Locale.FRANCE,
getApplicationConfig(),
getTopiaApplicationContext(),
- newPersistenceContext());
+ newPersistenceContext(),
+ getVoteCountingFactory());
return serviceContext;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java
index f0609d2..e4876b0 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java
@@ -30,7 +30,7 @@ import org.chorem.pollen.persistence.PollenTopiaApplicationContext;
import org.chorem.pollen.persistence.PollenTopiaPersistenceContext;
import org.chorem.pollen.services.DefaultPollenServiceContext;
import org.chorem.pollen.services.config.PollenServiceConfig;
-import org.chorem.pollen.services.service.security.PollenSecurityContext;
+import org.chorem.pollen.votecounting.VoteCountingFactory;
import java.util.Date;
import java.util.Locale;
@@ -47,11 +47,13 @@ public class FakePollenServiceContext extends DefaultPollenServiceContext {
Locale locale,
PollenServiceConfig serviceConfig,
PollenTopiaApplicationContext applicationcontext,
- PollenTopiaPersistenceContext persistenceContext) {
+ PollenTopiaPersistenceContext persistenceContext,
+ VoteCountingFactory voteCountingFactory) {
FakePollenServiceContext serviceContext = new FakePollenServiceContext();
serviceContext.setPersistenceContext(persistenceContext);
serviceContext.setPollenServiceConfig(serviceConfig);
serviceContext.setTopiaApplicationContext(applicationcontext);
+ serviceContext.setVoteCountingFactory(voteCountingFactory);
serviceContext.setSecurityContext(new FakePollenSecurityContext());
serviceContext.setLocale(locale);
serviceContext.setDate(now);
diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java
new file mode 100644
index 0000000..15c8554
--- /dev/null
+++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java
@@ -0,0 +1,126 @@
+package org.chorem.pollen.services.service;
+
+import org.apache.commons.lang3.time.DateUtils;
+import org.chorem.pollen.persistence.entity.ChoiceType;
+import org.chorem.pollen.persistence.entity.PollType;
+import org.chorem.pollen.services.AbstractPollenServiceTest;
+import org.chorem.pollen.services.bean.ChoiceBean;
+import org.chorem.pollen.services.bean.CreateBeanRef;
+import org.chorem.pollen.services.bean.PollBean;
+import org.chorem.pollen.services.bean.VoteBean;
+import org.chorem.pollen.services.bean.VoteToChoiceBean;
+import org.chorem.pollen.votecounting.model.ChoiceScore;
+import org.chorem.pollen.votecounting.model.VoteCountingResult;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Created on 5/22/14.
+ *
+ * @author Tony Chemit <chemit(a)codelutin.com>
+ * @since 2.0
+ */
+public class VoteCountingServiceTest extends AbstractPollenServiceTest {
+
+ private PollService pollService;
+
+ private ChoiceService choiceService;
+
+ private VoteService voteService;
+
+ private VoteCountingService service;
+
+ @Before
+ public void setUp() throws ParseException {
+
+ loadFixtures("fixtures");
+
+ pollService = newService(PollService.class);
+ voteService = newService(VoteService.class);
+ choiceService = newService(ChoiceService.class);
+ service = newService(VoteCountingService.class);
+
+ getServiceContext().setDate(new Date(1363948427576l));
+
+ }
+
+ @Test
+ public void simplePoll() throws InvalidFormException {
+
+ PollBean poll = pollService.getNewPoll();
+
+ poll.setBeginDate(DateUtils.addMinutes(serviceContext.getNow(), -1));
+ poll.setTitle("poll1");
+
+ List<ChoiceBean> choices = new ArrayList<>();
+
+ ChoiceBean choice1 = new ChoiceBean();
+ choices.add(choice1);
+ choice1.setChoiceType(ChoiceType.TEXT);
+ choice1.setName("A");
+ choice1.setDescription("Choice A");
+
+
+ ChoiceBean choice2 = new ChoiceBean();
+ choice2.setChoiceType(ChoiceType.TEXT);
+ choice2.setName("B");
+ choice2.setDescription("Choice B");
+ choices.add(choice2);
+
+ CreateBeanRef createdPollRef = pollService.createPoll(poll, choices, null);
+
+ String pollId = createdPollRef.getId();
+
+ List<ChoiceBean> createdChoices = choiceService.getChoices(pollId);
+ ChoiceBean createdChoiceBean1 = createdChoices.get(0);
+ ChoiceBean createdChoiceBean2 = createdChoices.get(1);
+
+ // vote 1 (A = 1)
+ VoteBean vote1 = new VoteBean();
+ vote1.setVoterName("voter1");
+ VoteToChoiceBean vote1Choice1 = new VoteToChoiceBean();
+
+ vote1Choice1.setChoiceId(createdChoiceBean1.getId());
+ vote1Choice1.setVoteValue(1d);
+ vote1.addChoice(vote1Choice1);
+ voteService.addVote(pollId, vote1);
+
+ // vote 2 (B = 1)
+ VoteBean vote2 = new VoteBean();
+ vote2.setVoterName("voter2");
+ VoteToChoiceBean vote2Choice2 = new VoteToChoiceBean();
+ vote2Choice2.setChoiceId(createdChoiceBean2.getId());
+ vote2Choice2.setVoteValue(1d);
+ vote2.addChoice(vote2Choice2);
+ voteService.addVote(pollId, vote2);
+
+ // vote 3 (A = 1)
+ VoteBean vote3 = new VoteBean();
+ vote3.setVoterName("voter3");
+ VoteToChoiceBean vote3Choice1 = new VoteToChoiceBean();
+ vote3Choice1.setChoiceId(createdChoiceBean1.getId());
+ vote3Choice1.setVoteValue(1d);
+ vote3.addChoice(vote3Choice1);
+ voteService.addVote(pollId, vote3);
+
+ VoteCountingResult mainResult = service.getMainResult(pollId);
+ Assert.assertNotNull(mainResult);
+ Assert.assertNotNull(mainResult.getScores());
+ Assert.assertEquals(2, mainResult.getScores().size());
+ Assert.assertNotNull(mainResult.getTopRanking());
+ Assert.assertEquals(1, mainResult.getTopRanking().size());
+
+ ChoiceScore choiceScore = mainResult.getTopRanking().get(0);
+ Assert.assertEquals(createdChoiceBean1.getId(), choiceScore.getChoiceId());
+ Assert.assertEquals(2, choiceScore.getScoreValue().intValue());
+
+ }
+
+}
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit 4d1266d0a21c3328e78b046706f6f99b61f7c3e3
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu May 22 12:14:43 2014 +0200
change error code when session token is expired
---
pollen-rest-api/src/main/resources/mapping | 5 ++-
.../services/service/security/SecurityService.java | 45 +++++++++++-----------
2 files changed, 26 insertions(+), 24 deletions(-)
diff --git a/pollen-rest-api/src/main/resources/mapping b/pollen-rest-api/src/main/resources/mapping
index dcfdb6f..38cd416 100644
--- a/pollen-rest-api/src/main/resources/mapping
+++ b/pollen-rest-api/src/main/resources/mapping
@@ -11,9 +11,9 @@ default.render=org.chorem.pollen.rest.api.PollenRender
[errors]
org.chorem.pollen.services.service.security.PollenAuthenticationException ErrorAction.on401
+org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException ErrorAction.on401
org.chorem.pollen.services.service.security.PollenUnauthorizedException ErrorAction.on403
org.chorem.pollen.services.service.security.PollenInvalidPermissionException ErrorAction.on403
-org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException ErrorAction.on401
org.chorem.pollen.services.service.security.PollenInvalidEmailActivationTokenException ErrorAction.on403
org.chorem.pollen.services.service.InvalidFormException ErrorAction.on400Form
org.nuiton.topia.persistence.TopiaNoResultException ErrorAction.on404
@@ -99,7 +99,8 @@ PUT /v1/users/{userId}?token={} PollenUserApi.validateUserEmail
# VoteCountingApi
-GET /v1/polls/{pollId}/results VoteCountingApi.getResult
+GET /v1/polls/{pollId}/results VoteCountingApi.getMainResult
+GET /v1/polls/{pollId}/groupResults VoteCountingApi.getGroupResult
# VoterListApi
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java
index d5c62cb..26641c9 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java
@@ -178,7 +178,9 @@ public class SecurityService extends PollenServiceSupport {
sessionToken = getSessionTokenDao().findUniqueOrNullByToken(token);
if (sessionToken == null) {
+
throw new PollenInvalidSessionTokenException();
+
}
// check that token is still valid
@@ -193,37 +195,36 @@ public class SecurityService extends PollenServiceSupport {
}
getSessionTokenDao().delete(sessionToken);
commit();
- sessionToken = null;
-
- } else {
- int sessionTimeout = getPollenServiceConfig().getSessionTimeoutDelay();
+ throw new PollenInvalidSessionTokenException();
- Calendar calendar = Calendar.getInstance();
- // From now
- calendar.setTimeInMillis(now.getTime());
- // add session timeout delay
- calendar.add(Calendar.SECOND, sessionTimeout);
- // retrieve 5 minutes
- calendar.add(Calendar.MINUTE, -5);
+ }
- Date minEndDateToUpdate = calendar.getTime();
+ int sessionTimeout = getPollenServiceConfig().getSessionTimeoutDelay();
- if (minEndDateToUpdate.after(endDate)) {
+ Calendar calendar = Calendar.getInstance();
+ // From now
+ calendar.setTimeInMillis(now.getTime());
+ // add session timeout delay
+ calendar.add(Calendar.SECOND, sessionTimeout);
+ // retrieve 5 minutes
+ calendar.add(Calendar.MINUTE, -5);
- // update end date (now + sessionTimeout)
- calendar.setTime(now);
- calendar.add(Calendar.SECOND, sessionTimeout);
- Date newEndDate = calendar.getTime();
+ Date minEndDateToUpdate = calendar.getTime();
- if (log.isDebugEnabled()) {
- log.debug(String.format("SessionToken %s update endDate : %s", sessionToken.getPollenToken().getToken(), newEndDate));
- }
- sessionToken.getPollenToken().setEndDate(newEndDate);
+ if (minEndDateToUpdate.after(endDate)) {
- commit();
+ // update end date (now + sessionTimeout)
+ calendar.setTime(now);
+ calendar.add(Calendar.SECOND, sessionTimeout);
+ Date newEndDate = calendar.getTime();
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("SessionToken %s update endDate : %s", sessionToken.getPollenToken().getToken(), newEndDate));
}
+ sessionToken.getPollenToken().setEndDate(newEndDate);
+
+ commit();
}
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit ef08f5e609381ee8130bb02461c0496a86936596
Author: Adrien Garandel <a.garandel(a)dralagen.fr>
Date: Thu May 22 12:50:04 2014 +0200
catch session expired
---
pollen-rest-api/src/main/resources/mapping | 2 +-
pollen-ui-angular/src/main/webapp/js/app.js | 31 +++++++++++++---------
.../src/main/webapp/js/controllers/userCtrl.js | 24 ++++++++++-------
3 files changed, 34 insertions(+), 23 deletions(-)
diff --git a/pollen-rest-api/src/main/resources/mapping b/pollen-rest-api/src/main/resources/mapping
index 6f70b40..dcfdb6f 100644
--- a/pollen-rest-api/src/main/resources/mapping
+++ b/pollen-rest-api/src/main/resources/mapping
@@ -13,7 +13,7 @@ default.render=org.chorem.pollen.rest.api.PollenRender
org.chorem.pollen.services.service.security.PollenAuthenticationException ErrorAction.on401
org.chorem.pollen.services.service.security.PollenUnauthorizedException ErrorAction.on403
org.chorem.pollen.services.service.security.PollenInvalidPermissionException ErrorAction.on403
-org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException ErrorAction.on403
+org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException ErrorAction.on401
org.chorem.pollen.services.service.security.PollenInvalidEmailActivationTokenException ErrorAction.on403
org.chorem.pollen.services.service.InvalidFormException ErrorAction.on400Form
org.nuiton.topia.persistence.TopiaNoResultException ErrorAction.on404
diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js
index f6eaca4..6737d15 100644
--- a/pollen-ui-angular/src/main/webapp/js/app.js
+++ b/pollen-ui-angular/src/main/webapp/js/app.js
@@ -21,28 +21,35 @@
angular.module('pollen', ['pollenServices', 'ngRoute', 'pollControllers', 'userControllers', 'ui.bootstrap', 'ngCookies'])
.config(['$httpProvider', function($httpProvider) {
// edit header for locale and sessionToken
- $httpProvider.interceptors.push('httpRequestInterceptor');
+ $httpProvider.interceptors.push('httpInterceptor');
// edit content-type for send data to the server
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
}])
-.factory('httpRequestInterceptor', ['SessionStorage', function (SessionStorage) {
- // set locale with browser preference
- // default : en
- var session = SessionStorage.get();
-
- if (angular.isUndefined(session.locale)) {
- var locale = navigator.language || navigator.userLanguage || 'en';
- SessionStorage.save({locale:locale.substring(0,2)});
- }
-
-
+.factory('httpInterceptor', ['$q', '$rootScope', 'SessionStorage', function ($q, $rootScope, SessionStorage) {
return {
request: function($config) {
+ // set locale with browser preference
+ // default : en
+ var session = SessionStorage.get();
+
+ // set locale if undefined
+ if (angular.isUndefined(session.locale)) {
+ var locale = navigator.language || navigator.userLanguage || 'en';
+ SessionStorage.save({locale:locale.substring(0,2)});
+ }
+
$config.headers['Accept-Language'] = session.locale;
$config.headers['X-Pollen-Session-Token'] = session.token;
return $config;
+ },
+ responseError: function(response) {
+ if (response.status === 401) {
+ //error login or sessionToken
+ $rootScope.$broadcast('sessionExpired');
+ }
+ return $q.reject(response);
}
};
}])
diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/userCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/userCtrl.js
index bf2517f..8f4a71f 100644
--- a/pollen-ui-angular/src/main/webapp/js/controllers/userCtrl.js
+++ b/pollen-ui-angular/src/main/webapp/js/controllers/userCtrl.js
@@ -36,16 +36,20 @@
}
}])
-.controller('UserLoginCtrl', ['$scope', 'UserLogin', 'UserLogout', 'User', 'SessionStorage', '$route', function ($scope, UserLogin, UserLogout, User, SessionStorage, $route) {
+.controller('UserLoginCtrl', ['$scope', 'UserLogin', 'UserLogout', 'User', 'SessionStorage', '$route', '$location', function ($scope, UserLogin, UserLogout, User, SessionStorage, $route, $location) {
if (angular.isUndefined($scope.data)) {
$scope.data = {user:{}};
}
+
+ $scope.$on('sessionExpired', function() {
+ $scope.logout();
+ })
+
$scope.currentUser = SessionStorage.get().user;
$scope.login = function () {
UserLogin.login({}, $scope.data.user, function (data) {
SessionStorage.save({'token':data.permission});
-
User.get({userId: data.id}, function (user) {
$scope.currentUser = user;
SessionStorage.save({'user':user});
@@ -60,14 +64,14 @@
}
$scope.logout = function () {
- UserLogout.logout(function (data) {
- // delete user information
- SessionStorage.remove('token');
- SessionStorage.remove('user');
- delete $scope.currentUser;
+ UserLogout.logout();
+
+ // delete user information
+ SessionStorage.remove('token');
+ SessionStorage.remove('user');
+ delete $scope.currentUser;
- //reload page for right user
- $route.reload();
- })
+ //got to the home
+ $route.reload();
}
}])
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0
22 May '14
This is an automated email from the git hooks/post-receive script.
unknown user pushed a commit to branch devel
in repository Pollen.
commit 16099446a390baf6c65b42e8ef263c90d01d9827
Author: Tony CHEMIT <chemit(a)codelutin.com>
Date: Thu May 22 10:44:11 2014 +0200
make security works in tests + downgrade tomcat version
---
.../chorem/pollen/rest/api/PollenUserApiTest.java | 26 ++++++++
.../chorem/pollen/services/bean/CreateBeanRef.java | 71 ++++++++++++++--------
.../pollen/services/service/ChoiceService.java | 4 +-
.../pollen/services/service/CommentService.java | 5 +-
.../services/service/FavoriteListService.java | 9 +--
.../pollen/services/service/PollService.java | 3 +-
.../pollen/services/service/PollenUserService.java | 21 ++++---
.../pollen/services/service/VoteService.java | 4 +-
.../pollen/services/service/VoterListService.java | 31 ++++++----
.../services/service/security/SecurityService.java | 3 +-
.../test/FakePollenApplicationContext.java | 6 +-
.../services/test/FakePollenSecurityContext.java | 16 ++---
.../services/test/FakePollenServiceContext.java | 6 +-
.../pollen/services/AbstractPollenServiceTest.java | 29 +++++++++
.../services/service/PollenUserServiceTest.java | 15 ++++-
pom.xml | 2 +-
16 files changed, 171 insertions(+), 80 deletions(-)
diff --git a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java
index f215bfb..234e267 100644
--- a/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java
+++ b/pollen-rest-api/src/test/java/org/chorem/pollen/rest/api/PollenUserApiTest.java
@@ -25,10 +25,15 @@ package org.chorem.pollen.rest.api;
import org.apache.http.client.fluent.Request;
import org.chorem.pollen.persistence.entity.PollenUser;
+import org.chorem.pollen.rest.api.converter.JsonConverter;
+import org.chorem.pollen.services.bean.CreateBeanRef;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
+import java.io.IOException;
+import java.net.URISyntaxException;
+
import static org.junit.Assert.assertTrue;
/**
@@ -45,10 +50,28 @@ public class PollenUserApiTest extends AbstractPollenRestApiTest {
loadFixtures("fixtures");
}
+ protected String login(String login, String password) throws URISyntaxException, IOException {
+
+ Request loginRequest = createRequest("/v1/login")
+ .addParameter("login", login)
+ .addParameter("password", password)
+ .Post();
+
+ String loginContent = loginRequest.execute().returnContent().asString();
+ JsonConverter<CreateBeanRef> jsonConverter = JsonConverter.newConverter(CreateBeanRef.class);
+
+ CreateBeanRef createBeanRef = jsonConverter.convert(CreateBeanRef.class, loginContent);
+ return createBeanRef.getPermission();
+
+ }
+
@Test
public void getUsers() throws Exception {
+ String sessionToken = login("admin", "admin");
+
Request request = createRequest("/v1/users").Get();
+ request.addHeader(PollenRestApiRequestFilter.REQUEST_HEADER_SESSION_TOKEN, sessionToken);
String content = request.execute().returnContent().asString();
showTestResult(content);
assertTrue(content.contains("email"));
@@ -58,9 +81,12 @@ public class PollenUserApiTest extends AbstractPollenRestApiTest {
@Test
public void getUser() throws Exception {
+ String sessionToken = login("admin", "admin");
+
PollenUser pollenUser = fixture("user_jean");
String userId = pollenUser.getTopiaId();
Request request = createRequest("/v1/users/" + userId).Get();
+ request.addHeader(PollenRestApiRequestFilter.REQUEST_HEADER_SESSION_TOKEN, sessionToken);
String content = request.execute().returnContent().asString();
showTestResult(content);
assertTrue(content.contains("email"));
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/CreateBeanRef.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/CreateBeanRef.java
index eebd8f7..f34ec39 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/CreateBeanRef.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/CreateBeanRef.java
@@ -26,56 +26,79 @@ public class CreateBeanRef implements Serializable {
protected String permission;
- public void fromEntity(Poll entity) {
+ public static CreateBeanRef of(Poll entity) {
- setId(entity.getTopiaId());
- setPermission(entity.getCreator().getPermission().getToken());
+ CreateBeanRef ref = new CreateBeanRef(entity.getTopiaId(),
+ entity.getCreator().getPermission().getToken());
+ return ref;
}
- public void fromEntity(Choice entity) {
+ public static CreateBeanRef of(Choice entity) {
- setId(entity.getTopiaId());
- setPermission(entity.getCreator().getPermission().getToken());
+ CreateBeanRef ref = new CreateBeanRef(entity.getTopiaId(),
+ entity.getCreator().getPermission().getToken());
+ return ref;
}
- public void fromEntity(Comment entity) {
+ public static CreateBeanRef of(Comment entity) {
- setId(entity.getTopiaId());
- setPermission(entity.getAuthor().getPermission().getToken());
+ CreateBeanRef ref = new CreateBeanRef(entity.getTopiaId(),
+ entity.getAuthor().getPermission().getToken());
+ return ref;
}
- public void fromEntity(Vote entity) {
+ public static CreateBeanRef of(Vote entity) {
- setId(entity.getTopiaId());
- setPermission(entity.getVoter().getPermission().getToken());
+ CreateBeanRef ref = new CreateBeanRef(entity.getTopiaId(),
+ entity.getVoter().getPermission().getToken());
+ return ref;
}
- public void fromEntity(VoterList entity) {
+ public static CreateBeanRef of(VoterList entity) {
- setId(entity.getTopiaId());
-// setPermission(entity.getVoter().getPermission().getToken());
+ CreateBeanRef ref = new CreateBeanRef(entity.getTopiaId(), null);
+ return ref;
}
- public void fromEntity(PollenUser result) {
- setId(result.getTopiaId());
+ public static CreateBeanRef of(PollenUser result) {
+
+ CreateBeanRef ref = new CreateBeanRef(result.getTopiaId(), null);
+ return ref;
+
+ }
+
+ public static CreateBeanRef of(FavoriteList result) {
+
+ CreateBeanRef ref = new CreateBeanRef(result.getTopiaId(), null);
+ return ref;
+
}
- public void fromEntity(FavoriteList result) {
- setId(result.getTopiaId());
+ public static CreateBeanRef of(FavoriteListMember result) {
+
+ CreateBeanRef ref = new CreateBeanRef(result.getTopiaId(), null);
+ return ref;
+
}
- public void fromEntity(FavoriteListMember result) {
- setId(result.getTopiaId());
+ public static CreateBeanRef of(SessionToken result) {
+
+ CreateBeanRef ref = new CreateBeanRef(result.getPollenUser().getTopiaId(),
+ result.getPollenToken().getToken());
+ return ref;
+
}
- public void fromEntity(SessionToken result) {
- setId(result.getPollenUser().getTopiaId());
- setPermission(result.getPollenToken().getToken());
+ protected CreateBeanRef(String id, String permission) {
+
+ setId(id);
+ setPermission(permission);
+
}
public String getId() {
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java
index 1fa5876..2be031d 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/ChoiceService.java
@@ -132,9 +132,7 @@ public class ChoiceService extends PollenServiceSupport {
getNotificationService().onChoiceAdded(poll, result);
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
-
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java
index 3f5c930..5add5c0 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/CommentService.java
@@ -23,7 +23,6 @@ package org.chorem.pollen.services.service;
* #L%
*/
-import com.google.common.collect.ImmutableList;
import org.chorem.pollen.persistence.entity.Comment;
import org.chorem.pollen.persistence.entity.Poll;
import org.chorem.pollen.persistence.entity.PollenPrincipal;
@@ -94,9 +93,7 @@ public class CommentService extends PollenServiceSupport {
getNotificationService().onCommentAdded(poll, result);
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
-
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java
index 66bd690..00a28fa 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/FavoriteListService.java
@@ -23,8 +23,6 @@ package org.chorem.pollen.services.service;
* #L%
*/
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.IOUtils;
@@ -49,7 +47,6 @@ import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import java.io.BufferedReader;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
@@ -110,8 +107,7 @@ public class FavoriteListService extends PollenServiceSupport {
getNotificationService().onFavoriteListAdded(user, result);
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
@@ -206,8 +202,7 @@ public class FavoriteListService extends PollenServiceSupport {
FavoriteListMember result = saveFavoriteListMember(favoriteList, member);
commit();
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java
index f0ea7a1..b0f74dd 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java
@@ -161,8 +161,7 @@ public class PollService extends PollenServiceSupport {
getNotificationService().onPollCreated(savedPoll);
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(savedPoll);
+ CreateBeanRef createBeanRef = CreateBeanRef.of(savedPoll);
return createBeanRef;
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java
index ae50d70..fcb1f55 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java
@@ -46,20 +46,24 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer
public List<PollenUserBean> getUsers() {
-// checkIsConnected();
-// checkIsAdmin();
+ checkIsConnected();
+ checkIsAdmin();
List<PollenUser> pollenUsers = getPollenUserDao().findAll();
- return copyAsList(PollenUserBean.class, pollenUsers);
+ List<PollenUserBean> pollenUserBeans = copyAsList(PollenUserBean.class, pollenUsers);
+ return pollenUserBeans;
}
public PollenUserBean getUser(String userId) {
+ checkIsConnected();
checkNotNull(userId);
- PollenUser result = getUser0(userId);
- return copy(PollenUserBean.class, result);
+ PollenUser pollenUser = getUser0(userId);
+ PollenUserBean pollenUserBean = copy(PollenUserBean.class, pollenUser);
+
+ return pollenUserBean;
}
@@ -80,8 +84,7 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer
getNotificationService().onUserCreated(result, generatePassword);
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
@@ -98,7 +101,9 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer
commit();
getNotificationService().onUserEdited(result);
- return copy(PollenUserBean.class, result);
+
+ PollenUserBean pollenUserBean = copy(PollenUserBean.class, result);
+ return pollenUserBean;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java
index e9de3e1..d75da00 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoteService.java
@@ -101,9 +101,7 @@ public class VoteService extends PollenServiceSupport {
getNotificationService().onVoteAdded(poll, result);
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
-
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java
index 17a8623..d34d307 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java
@@ -89,7 +89,8 @@ public class VoterListService extends PollenServiceSupport {
Poll poll = getPollService().getPoll0(pollId);
List<VoterList> voterLists = getVoterListDao().forPollEquals(poll).findAll();
- return copyAsList(VoterListBean.class, voterLists);
+ List<VoterListBean> voterListBeans = copyAsList(VoterListBean.class, voterLists);
+ return voterListBeans;
}
@@ -98,8 +99,9 @@ public class VoterListService extends PollenServiceSupport {
checkNotNull(pollId);
checkNotNull(voterListId);
- VoterList result = getVoterList0(pollId, voterListId);
- return copy(VoterListBean.class, result);
+ VoterList voterList = getVoterList0(pollId, voterListId);
+ VoterListBean voterListBean = copy(VoterListBean.class, voterList);
+ return voterListBean;
}
@@ -122,8 +124,7 @@ public class VoterListService extends PollenServiceSupport {
//TODO Notify
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(result);
+ CreateBeanRef createBeanRef = CreateBeanRef.of(result);
return createBeanRef;
}
@@ -145,7 +146,8 @@ public class VoterListService extends PollenServiceSupport {
commit();
//TODO Notify
- return copy(VoterListBean.class, result);
+ VoterListBean voterListBean = copy(VoterListBean.class, result);
+ return voterListBean;
}
@@ -169,8 +171,9 @@ public class VoterListService extends PollenServiceSupport {
VoterList voterList = getVoterList0(pollId, voterListId);
- Set<VoterListMember> result = voterList.getMember();
- return copyAsSet(VoterListMemberBean.class, result);
+ Set<VoterListMember> members = voterList.getMember();
+ Set<VoterListMemberBean> memberBeans = copyAsSet(VoterListMemberBean.class, members);
+ return memberBeans;
}
@@ -182,9 +185,9 @@ public class VoterListService extends PollenServiceSupport {
VoterList voterList = getVoterList0(pollId, voterListId);
- VoterListMember result = getVoterListMember(voterList, memberId);
-
- return copy(VoterListMemberBean.class, result);
+ VoterListMember member = getVoterListMember(voterList, memberId);
+ VoterListMemberBean memberBean = copy(VoterListMemberBean.class, member);
+ return memberBean;
}
@@ -205,7 +208,8 @@ public class VoterListService extends PollenServiceSupport {
VoterListMember result = saveVoterListMember(voterList, member);
commit();
- return copy(VoterListMemberBean.class, result);
+ VoterListMemberBean memberBean = copy(VoterListMemberBean.class, result);
+ return memberBean;
}
@@ -227,7 +231,8 @@ public class VoterListService extends PollenServiceSupport {
VoterListMember result = saveVoterListMember(voterList, member);
commit();
- return copy(VoterListMemberBean.class, result);
+ VoterListMemberBean memberBean = copy(VoterListMemberBean.class, result);
+ return memberBean;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java
index 215eeab..d5c62cb 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java
@@ -100,8 +100,7 @@ public class SecurityService extends PollenServiceSupport {
SessionToken.PROPERTY_POLLEN_USER, user);
commit();
- CreateBeanRef createBeanRef = new CreateBeanRef();
- createBeanRef.fromEntity(sessionToken);
+ CreateBeanRef createBeanRef = CreateBeanRef.of(sessionToken);
return createBeanRef;
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java
index 79ca1e5..17f9fd4 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenApplicationContext.java
@@ -150,7 +150,11 @@ public class FakePollenApplicationContext extends TestWatcher implements PollenA
log.trace("closing transaction " + openedTransaction);
}
- openedTransaction.closeContext();
+ if (!openedTransaction.isClosed()) {
+
+ openedTransaction.closeContext();
+
+ }
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenSecurityContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenSecurityContext.java
index 216117b..fa25e59 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenSecurityContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenSecurityContext.java
@@ -33,14 +33,14 @@ public class FakePollenSecurityContext extends DefaultPollenSecurityContext {
private static final long serialVersionUID = 1L;
- @Override
- public boolean isConnected() {
- return true;
- }
+// @Override
+// public boolean isConnected() {
+// return true;
+// }
- @Override
- public boolean isAdmin() {
- return false;
- }
+// @Override
+// public boolean isAdmin() {
+// return false;
+// }
}
diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java
index 2768674..f0609d2 100644
--- a/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java
+++ b/pollen-services/src/main/java/org/chorem/pollen/services/test/FakePollenServiceContext.java
@@ -30,6 +30,7 @@ import org.chorem.pollen.persistence.PollenTopiaApplicationContext;
import org.chorem.pollen.persistence.PollenTopiaPersistenceContext;
import org.chorem.pollen.services.DefaultPollenServiceContext;
import org.chorem.pollen.services.config.PollenServiceConfig;
+import org.chorem.pollen.services.service.security.PollenSecurityContext;
import java.util.Date;
import java.util.Locale;
@@ -70,5 +71,8 @@ public class FakePollenServiceContext extends DefaultPollenServiceContext {
this.date = date;
}
-
+ @Override
+ public FakePollenSecurityContext getSecurityContext() {
+ return (FakePollenSecurityContext) super.getSecurityContext();
+ }
}
diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java
index 0027668..11ff686 100644
--- a/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java
+++ b/pollen-services/src/test/java/org/chorem/pollen/services/AbstractPollenServiceTest.java
@@ -24,9 +24,15 @@ package org.chorem.pollen.services;
*/
import com.google.common.collect.Multimap;
+import org.chorem.pollen.persistence.entity.SessionToken;
+import org.chorem.pollen.services.bean.CreateBeanRef;
import org.chorem.pollen.services.service.InvalidFormException;
+import org.chorem.pollen.services.service.security.PollenAuthenticationException;
+import org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException;
+import org.chorem.pollen.services.service.security.SecurityService;
import org.chorem.pollen.services.test.FakePollenApplicationContext;
import org.chorem.pollen.services.test.FakePollenServiceContext;
+import org.junit.After;
import org.junit.Assert;
import org.junit.Rule;
@@ -51,6 +57,11 @@ public abstract class AbstractPollenServiceTest {
return application.fixture(id);
}
+ @After
+ public void tearDown() {
+ logout();
+ }
+
protected FakePollenServiceContext getServiceContext() {
if (serviceContext == null) {
@@ -75,4 +86,22 @@ public abstract class AbstractPollenServiceTest {
}
}
+ protected void login(String login, String password) throws PollenInvalidSessionTokenException, PollenAuthenticationException {
+
+ SecurityService securityService = newService(SecurityService.class);
+
+ CreateBeanRef loginRef = securityService.login(login, password, null);
+
+ SessionToken sessionToken = securityService.getSessionTokenByToken(loginRef.getPermission());
+ serviceContext.getSecurityContext().setSessionToken(sessionToken);
+
+ }
+
+ protected void logout() {
+
+ SecurityService securityService = newService(SecurityService.class);
+ securityService.logout();
+
+ }
+
}
diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java
index 3fafaaf..3449281 100644
--- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java
+++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUserServiceTest.java
@@ -28,6 +28,8 @@ import org.chorem.pollen.persistence.entity.PollenUser;
import org.chorem.pollen.services.AbstractPollenServiceTest;
import org.chorem.pollen.services.bean.CreateBeanRef;
import org.chorem.pollen.services.bean.PollenUserBean;
+import org.chorem.pollen.services.service.security.PollenAuthenticationException;
+import org.chorem.pollen.services.service.security.PollenInvalidSessionTokenException;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -62,16 +64,21 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest {
}
@Test
- public void testGetPollenUsers() {
+ public void testGetPollenUsers() throws PollenAuthenticationException, PollenInvalidSessionTokenException {
+
+ login("jean", "fake");
List<PollenUserBean> users = service.getUsers();
Assert.assertNotNull(users);
Assert.assertTrue(CollectionUtils.isNotEmpty(users));
+
}
@Test
- public void testGetPollenUser() {
+ public void testGetPollenUser() throws PollenInvalidSessionTokenException, PollenAuthenticationException {
+
+ login("jean", "fake");
try {
service.getUser("pollen_user_tony_" + System.nanoTime());
@@ -136,7 +143,9 @@ public class PollenUserServiceTest extends AbstractPollenServiceTest {
}
@Test
- public void testEditUser() throws InvalidFormException {
+ public void testEditUser() throws InvalidFormException, PollenInvalidSessionTokenException, PollenAuthenticationException {
+
+ login("jean", "fake");
PollenUserBean user = service.getUser(this.user.getTopiaId());
diff --git a/pom.xml b/pom.xml
index 1ab4552..25dc5d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -177,7 +177,7 @@
<slf4jVersion>1.7.7</slf4jVersion>
<jettyVersion>9.0.3.v20130506</jettyVersion>
<tomcatEmbedVersion>7.0.50</tomcatEmbedVersion>
- <tomcatEmbedVersion>8.0.5</tomcatEmbedVersion>
+ <!--tomcatEmbedVersion>8.0.5</tomcatEmbedVersion-->
<hibernateVersion>4.3.5.Final</hibernateVersion>
<seleniumVersion>2.33.0</seleniumVersion>
<mockitoVersion>1.9.5</mockitoVersion>
--
To stop receiving notification emails like this one, please contact
Chorem.org SCM administrator <admin+scm(a)chorem.org>.
1
0