| Name | Poll |
|---|---|
| Version | 1.2 |
| Product Versions | 3.11 |
| Author(s) | Henri Yandell/SourceLabs, Inc. |
| License | BSD |
| Download/Bugs etc | JIRA Outlet |
This project uses the excellent famfamfam.com Silk icons.
Description/Features
I realized that the JIRA voting mechanism provides site admins with the model needed to setup basic polls. All that was needed to finish the job was the interface. This portlet provides said interface and it's expected that this portlet will be of use in all JIRAs for a myriad of lateral thinking reasons.
There is an optional 'dilute vote' mode that governs whether a voter gets 1 vote in total, or 1 vote per issue.
Usage
Install the plugin by downloading the plugin jar, placing it in your $JIRA/WEB-INF/lib/ and giving your JIRA a restart. Once it's installed you can add it to your dashboard by selecting the Poll portlet and configuring it.
The first of three configurations is a comma-separated list of issue keys who will form the elements of the poll. If you just specify one issue key then its subtasks will be used.
The second configuration is the title for the poll. If you have specified just the one issue key then this is optional - the summary of the parent issue will be used if the title isn't specified.
The third and last configuration is whether to consider users as having many votes or just one vote. If they have just one vote (the default from 1.1 onwards) then their vote is shared between the issues they vote on. So if a user votes for two issues, each issue gets half a point.
Release History
Version 1.2 was released on 20th of February 2008. There was the one bugfix:
- POL-2 - NPE if there are spaces in the comma separated list of IDs
Version 1.1 was also released on the 13th of May 2007 and added the 'dilute vote' feature.
Version 1.0 was released on the 13th of May 2007.
Screenshots
There are two modes for the portlet. Logged in users see the following (also at the top of this page):

The information icon takes the user to the page for that issue, the thumb shows whether the user has voted for this issue and the pencil icon is used by the user to vote for an issue or remove their vote.
The difference for anonymous users is that they don't get access to a few of the icons:

Potential enhancements
The current plan is to add the following ideas:
- An end date such that a winner is declared at the right time and the issues are closed.
- A more adaptive version that points at a project and lists the highest voted upon issues. There are obvious problems with this approach in that it will cause more and more votes to go to the top items. Another that shows recently voted on might be of value if implementable.

Comments (16)
May 13, 2007
Mike Cannon-Brookes says:
Mate would it make more sense not to show results unless someone has voted (or c...Mate - would it make more sense not to show results unless someone has voted (or clicks a "view results" link maybe?). Showing results before voting can only skew things I think.
m
May 13, 2007
Henri Yandell says:
Good feature if I add a 'see results before voting' flag then I can easily add a...Good feature - if I add a 'see results before voting' flag then I can easily add a link in the top right to show the results and invert the flag when doing the javascript reload to vote/unvote.
Jul 04, 2007
Henri Yandell says:
Recorded as: https://jira.sourcelabs.org/jira/browse/POL1Recorded as: https://jira.sourcelabs.org/jira/browse/POL-1
May 21, 2007
Bettina Zucker says:
Hello Henri, I tried out your plugin on Jira 3.8.1 but I get a Null Pointer (see...Hello Henri,
I tried out your plugin on Jira 3.8.1 but I get a Null Pointer (see below).
Cheers
Bettina Zucker
java.lang.NullPointerException
at com.sourcelabs.jira.plugin.portlet.poll.PollPortlet.getVelocityParams(PollPortlet.java:148)
at com.atlassian.jira.portal.PortletImpl.getViewHtml(PortletImpl.java:68)
at com.atlassian.jira.web.portlet.bean.PortletRenderer.getNormalHtml(PortletRenderer.java:83)
at com.atlassian.jira.web.portlet.bean.PortletRenderer.renderPortlet(PortletRenderer.java:61)
at org.apache.jsp.secure.views.dashboard_jsp._jspService(dashboard_jsp.java:1260)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at com.atlassian.jira.web.dispatcher.JiraServletDispatcher.service(JiraServletDispatcher.java:279)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.jira.web.filters.AccessLogFilter.doFilter(AccessLogFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
at com.atlassian.jira.web.filters.SitemeshExcludePathFilter.doFilter(SitemeshExcludePathFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:182)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.seraph.filter.LoginFilter.doFilter(LoginFilter.java:181)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:132)
at com.atlassian.jira.web.filters.JIRAProfilingFilter.doFilter(JIRAProfilingFilter.java:16)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.jira.web.filters.ActionCleanupDelayFilter.doFilter(ActionCleanupDelayFilter.java:41)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.jira.web.filters.RequestCleanupFilter.doFilter(RequestCleanupFilter.java:49)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.johnson.filters.JohnsonFilter.doFilter(JohnsonFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.jira.web.filters.gzip.GzipFilter.doFilter(GzipFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.atlassian.jira.appconsistency.db.DatabaseCompatibilityEnforcerFilter.doFilter(DatabaseCompatibilityEnforcerFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
May 21, 2007
Henri Yandell says:
\\ Interesting. That's at this line: &...Interesting. That's at this line:
Collection voters = this.voteManager.getVoters(issue.getGenericValue());
So either voteManager is null, or issue is null. Presumably the latter, which is presumably because the issuekey was incorrect. Could you double check your configuration? Maybe there's a typo or an extra space that I need to be trimming off?
Aug 02, 2007
Sasha Zucker says:
I'm also seeing a null pointer exception. Has this issue been fixed? Should we o...I'm also seeing a null pointer exception. Has this issue been fixed? Should we open a bug on JIRA somwhere?
Aug 02, 2007
Henri Yandell says:
Opening an issue would be great (JIRA address now in the header of this page). I...Opening an issue would be great (JIRA address now in the header of this page).
I'd open one, but it's not going to help much unless someone can put in their configuration. My assumption above was that it was due to an incorrect issue key being entered.
Sep 20, 2007
Irene García says:
Hi Henri\! I have the same problem with the null pointer exception\! This messag...Hi Henri!
I have the same problem with the null pointer exception!
This message comes when i try to go to the Home screen after i created a poll.
When I login into JIRA i get a nullPointerException but at the identification screen I can see the poll (for anonymous users) and its results.
Any idea??
Thanks for your help!!!
Sep 20, 2007
Henri Yandell says:
Hi Irene, Is it at the same line as Bettina, line 148 of PollPortlet? And you on...Hi Irene,
Is it at the same line as Bettina, line 148 of PollPortlet?
And you only see it when logged in, things are good when you're not logged in?
Sep 21, 2007
Irene García says:
Hi again\!\!\! I forgot to specify the number of line.. sorry\!... No, the nullP...Hi again!!!
I forgot to specify the number of line.. sorry!...
No, the nullPointer is at line 123..
This is part of the message...
Cause:
java.lang.NullPointerException
Stack Trace: [hide] java.lang.NullPointerException
at com.sourcelabs.jira.plugin.portlet.poll.PollPortlet.getVelocityParams(PollPortlet.java:123)
at com.atlassian.jira.portal.PortletImpl.getViewHtml(PortletImpl.java:68)
at com.atlassian.jira.web.portlet.bean.PortletRenderer.getNormalHtml(PortletRenderer.java:83)
at com.atlassian.jira.web.portlet.bean.PortletRenderer.renderPortlet(PortletRenderer.java:61)
at org.apache.jsp.secure.views.dashboard_jsp._jspService(dashboard_jsp.java:1262)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
...........
I installed the poll and it works, i didn´t recive a error message or something like it, but when i try to go to the Home screen i get the null pointer...
so i logged out and try to login again to see if that solved the problem... but when i´m at the identification screen i can see the poll but
i can´t login because i receive de null pointer again.
If i delete the .jar file, i receive the message:
WARNING: com.sourcelabs.jira.plugin.portlet.poll:poll
Portlets of this type have been disabled or removed from the system.
at the identification and home screens, and i can login again and go to the home screen without problems...
Thanks for your help Henri!!!!
Sep 22, 2007
Henri Yandell says:
Hi Irene, How have you configured the portlet? Assuming you're using 1.1, it loo...Hi Irene,
How have you configured the portlet? Assuming you're using 1.1, it looks like it can't find the issue key in the configuration.
Sep 24, 2007
Irene García says:
Hi Henri\! I was testing the plugin today and magicaly it works\! I don´t know w...Hi Henri!
I was testing the plugin today and magicaly it works!
I don´t know what was happening last friday...but today it works perfectly!
Thank you very much for your help!
Regards
Irene
Feb 20, 2008
mameha says:
If you get a null pointer exception, do this: MAKE SURE THERE ARE NO SPACES IN Y...If you get a null pointer exception, do this:
MAKE SURE THERE ARE NO SPACES IN YOUR COMMA SEPERATED LIST.
Bad: DOC-1, DOC-2, DOC-8
OK: DOC-1,DOC-2,DOC-8
To original developer - please fix your code so that it will trim() spaces before reading the comma seperated list!
Feb 20, 2008
Henri Yandell says:
Thanks I've reported that as https://jira.sourcelabs.org/jira/browse/POL2 and wi...Thanks - I've reported that as https://jira.sourcelabs.org/jira/browse/POL-2 and will get a fix out.
Feb 20, 2008
Henri Yandell says:
1.2 duly released with the whitespace trimmed.1.2 duly released with the whitespace trimmed.
Jul 31
hajo van Ravenswaay says:
The UI of this plugin looks good. However, I wonder whether there is no over lap...The UI of this plugin looks good. However, I wonder whether there is no over lap with the [Survey Macro|http://confluence.atlassian.com/display/CONFEXT/Survey+Macro] or is there a connection between the two?
The functionality from both the poll as well as the survey plugin is still rather limited. More fautures and types of answers would make this even more powerful, see also calls for improvment logged in the Jira of the [Survey Macro|http://confluence.atlassian.com/display/CONFEXT/Survey+Macro]