Author: solomax
Date: Sun Sep 14 14:12:56 2014
New Revision: 1624852

URL: http://svn.apache.org/r1624852
Log:
[OPENMEETINGS-1081] poll results are added

Added:
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
Modified:
    openmeetings/trunk/singlewebapp/openmeetings-core/pom.xml
    
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
    
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
    
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
    
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
    openmeetings/trunk/singlewebapp/openmeetings-web/pom.xml
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
    openmeetings/trunk/singlewebapp/pom.xml

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/pom.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/pom.xml?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/pom.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/pom.xml Sun Sep 14 
14:12:56 2014
@@ -99,13 +99,6 @@
                <dependency>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-svg-dom</artifactId>
-                       <version>${batik.version}</version>
-                       <exclusions>
-                               <exclusion>
-                                       <artifactId>xml-apis-ext</artifactId>
-                                       <groupId>xml-apis</groupId>
-                               </exclusion>
-                       </exclusions>
                </dependency>
                <dependency>
                        <groupId>org.apache.xmlgraphics</groupId>

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/room/PollDao.java
 Sun Sep 14 14:12:56 2014
@@ -32,7 +32,6 @@ import javax.persistence.TypedQuery;
 import org.apache.openmeetings.db.dao.label.FieldLanguagesValuesDao;
 import org.apache.openmeetings.db.dao.label.FieldValueDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.PollType;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.room.RoomPollAnswer;
@@ -81,25 +80,6 @@ public class PollDao {
                return q.getSingleResult();
        }
        
-       public RoomPoll createPoll(Client rc, String pollName, String 
pollQuestion, Long pollTypeId) {
-               RoomPoll roomP = new RoomPoll();
-               
-               roomP.setCreator(userDao.get(rc.getUser_id()));
-               roomP.setCreated(new Date());
-               roomP.setName(pollName);
-               roomP.setQuestion(pollQuestion);
-               roomP.setType(getPollType(pollTypeId));
-               roomP.setRoom(roomDao.get(rc.getRoom_id()));
-               
-               em.persist(roomP);
-               return roomP;
-       }
-       
-       public void savePollBackup(RoomPoll rp) {
-               em.persist(rp);
-       }
-
-
        public RoomPoll update(RoomPoll p) {
                if (p.getId() == null) {
                        p.setCreated(new Date());
@@ -150,7 +130,7 @@ public class PollDao {
                return null;
        }
        
-       public List<RoomPoll> getPollListBackup() {
+       public List<RoomPoll> get() {
                try {
                        TypedQuery<RoomPoll> q = 
em.createNamedQuery("getPollListBackup", RoomPoll.class);
                        return q.getResultList();
@@ -162,7 +142,7 @@ public class PollDao {
                return null;
        }
        
-       public List<RoomPoll> getArchivedPollList(Long room_id) {
+       public List<RoomPoll> getArchived(Long room_id) {
                try {
                        log.debug(" :: getPoll :: " + room_id);
                        TypedQuery<RoomPoll> q = 
em.createNamedQuery("getArchivedPollList",RoomPoll.class);

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
 Sun Sep 14 14:12:56 2014
@@ -52,7 +52,7 @@ import org.simpleframework.xml.Root;
                                + "WHERE rp.room.id = :room_id AND rp.archived 
= :archived"),
                @NamedQuery(name = "getPollListBackup", query = "SELECT rp FROM 
RoomPoll rp ORDER BY rp.id"),
                @NamedQuery(name = "getArchivedPollList", query = "SELECT rp 
FROM RoomPoll rp "
-                               + "WHERE rp.room.id = :room_id AND rp.archived 
= :archived"),
+                               + "WHERE rp.room.id = :room_id AND rp.archived 
= :archived ORDER BY rp.created"),
                @NamedQuery(name = "hasPoll", query = "SELECT COUNT(rp) FROM 
RoomPoll rp "
                                + "WHERE rp.room.id = :room_id AND rp.archived 
= :archived") })
 @Table(name = "room_poll")

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupExport.java
 Sun Sep 14 14:12:56 2014
@@ -327,7 +327,7 @@ public class BackupExport {
                 * ##################### Polls
                 */
                {
-                       List<RoomPoll> list = pollManager.getPollListBackup();
+                       List<RoomPoll> list = pollManager.get();
                        Registry registry = new Registry();
                        Strategy strategy = new RegistryStrategy(registry);
                        Serializer serializer = new Persister(strategy);

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 Sun Sep 14 14:12:56 2014
@@ -639,7 +639,7 @@ public class BackupImport {
                                                rpa.setVotedUser(null);
                                        }
                                }
-                               pollManager.savePollBackup(rp);
+                               pollManager.update(rp);
                        }
                }
                

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/pom.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/pom.xml?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/pom.xml (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/pom.xml Sun Sep 14 
14:12:56 2014
@@ -307,13 +307,6 @@
                <dependency>
                        <groupId>org.apache.wicket</groupId>
                        <artifactId>wicket-extensions</artifactId>
-                       <version>${wicket.version}</version>
-                       <exclusions>
-                               <exclusion>
-                                       <groupId>org.slf4j</groupId>
-                                       <artifactId>slf4j-api</artifactId>
-                               </exclusion>
-                       </exclusions>
                </dependency>
                <dependency>
                        <groupId>org.apache.wicket</groupId>
@@ -391,6 +384,11 @@
                        <version>${wicket.version}</version>
                </dependency>
                <dependency>
+                       <groupId>org.wicketstuff</groupId>
+                       <artifactId>jqplot</artifactId>
+                       <version>${wicket.version}</version>
+               </dependency>
+               <dependency>
                        <groupId>commons-io</groupId>
                        <artifactId>commons-io</artifactId>
                        <version>${commons-io.version}</version>

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 Sun Sep 14 14:12:56 2014
@@ -54,5 +54,6 @@
        <div wicket:id="invite"></div>
        <div wicket:id="createPoll"></div>
        <div wicket:id="vote"></div>
+       <div wicket:id="pollResults"></div>
 </wicket:panel>
 </html>

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Sun Sep 14 14:12:56 2014
@@ -64,6 +64,7 @@ import org.apache.openmeetings.web.commo
 import org.apache.openmeetings.web.pages.MainPage;
 import org.apache.openmeetings.web.room.message.RoomMessage;
 import org.apache.openmeetings.web.room.poll.CreatePollDialog;
+import org.apache.openmeetings.web.room.poll.PollResultsDialog;
 import org.apache.openmeetings.web.room.poll.VoteDialog;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxEventBehavior;
@@ -131,6 +132,7 @@ public class RoomPanel extends BasePanel
        private final InvitationDialog invite;
        private final CreatePollDialog createPoll;
        private final VoteDialog vote;
+       private final PollResultsDialog pollResults;
        private final MenuPanel menuPanel;
        private final RoomMenuItem exitMenuItem = new 
RoomMenuItem(WebSession.getString(308), WebSession.getString(309), "room menu 
exit") {
                private static final long serialVersionUID = 1L;
@@ -187,7 +189,14 @@ public class RoomPanel extends BasePanel
                        vote.open(target);
                }
        };
-       private final RoomMenuItem pollResultMenuItem = new 
RoomMenuItem(WebSession.getString(37), WebSession.getString(1484), false);
+       private final RoomMenuItem pollResultMenuItem = new 
RoomMenuItem(WebSession.getString(37), WebSession.getString(1484), false) {
+               private static final long serialVersionUID = 1L;
+
+               public void onClick(MainPage page, AjaxRequestTarget target) {
+                       pollResults.updateModel(target, 
c.hasRight(Client.Right.moderator));
+                       pollResults.open(target);
+               }
+       };
        private final RoomMenuItem sipDialerMenuItem = new 
RoomMenuItem(WebSession.getString(1447), WebSession.getString(1488), false);
        private final WebMarkupContainer userList = new 
WebMarkupContainer("userList");
        private final ListView<RoomClient> users;
@@ -294,6 +303,7 @@ public class RoomPanel extends BasePanel
                add(invite = new InvitationDialog("invite", roomId));
                add(createPoll = new CreatePollDialog("createPoll", roomId));
                add(vote = new VoteDialog("vote", roomId));
+               add(pollResults = new PollResultsDialog("pollResults", roomId));
        }
 
        @Override
@@ -409,7 +419,7 @@ public class RoomPanel extends BasePanel
                applyAvMenuItem.setActive(!moder);
                pollCreateMenuItem.setActive(moder);
                pollVoteMenuItem.setActive(pollExists && notExternalUser && 
!getBean(PollDao.class).hasVoted(roomId, getUserId()));
-               pollResultMenuItem.setActive(pollExists || 
getBean(PollDao.class).getArchivedPollList(roomId).size() > 0);
+               pollResultMenuItem.setActive(pollExists || 
getBean(PollDao.class).getArchived(roomId).size() > 0);
                //TODO sip menus
                handler.add(menuPanel, askBtn.setVisible(!moder), 
shareBtn.setVisible(shareVisible));
        }

Added: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html?rev=1624852&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
 (added)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
 Sun Sep 14 14:12:56 2014
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+         
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org";>
+<wicket:panel>
+       <form wicket:id="selForm">
+               <table style="width: 100%">
+                       <tr>
+                               <td><wicket:ommessage key="1412"/></td>
+                               <td><select style="width: 230px" 
wicket:id="polls"></select></td>
+                       </tr>
+               </table>
+       </form>
+       <form wicket:id="dispForm">
+               <table style="width: 100%">
+                       <tr>
+                               <td colspan="2"><span 
wicket:id="name"></span>&nbsp;<wicket:ommessage key="36"/></td>
+                       </tr>
+                       <tr>
+                               <td colspan="2"><span 
wicket:id="question"></span></td>
+                       </tr>
+                       <tr>
+                               <td><wicket:ommessage key="39"/>&nbsp;(<span 
wicket:id="count"></span>)</td>
+                               <td><select style="width: 280px" 
wicket:id="chartType"></select></td>
+                       </tr>
+                       <tr>
+                               <td><wicket:ommessage key="40"/></td>
+                               <td><div wicket:id="chart"></div></td>
+                       </tr>
+               </table>
+       </form>
+</wicket:panel>
+</html>

Added: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java?rev=1624852&view=auto
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
 (added)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
 Sun Sep 14 14:12:56 2014
@@ -0,0 +1,306 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.poll;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswer;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.wicketstuff.jqplot.behavior.JqPlotBehavior;
+import org.wicketstuff.jqplot.behavior.JqPlotCssResourceReference;
+import org.wicketstuff.jqplot.behavior.JqPlotJavascriptResourceReference;
+
+import br.com.digilabs.jqplot.Chart;
+import br.com.digilabs.jqplot.ChartConfiguration;
+import br.com.digilabs.jqplot.JqPlotResources;
+import br.com.digilabs.jqplot.JqPlotUtils;
+import br.com.digilabs.jqplot.chart.BarChart;
+import br.com.digilabs.jqplot.chart.PieChart;
+import br.com.digilabs.jqplot.elements.Highlighter;
+import br.com.digilabs.jqplot.elements.Location;
+import br.com.digilabs.jqplot.elements.RendererOptions;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+/**
+ * @author solomax
+ *
+ */
+public class PollResultsDialog extends AbstractDialog<RoomPoll> {
+       private static final long serialVersionUID = 1L;
+       private final WebMarkupContainer chartDiv = new 
WebMarkupContainer("chart");
+       private final long roomId;
+       private final PollSelectForm selForm;
+       private final PollResultsForm dispForm;
+       private final DialogButton cancel = new 
DialogButton(WebSession.getString(25));
+       private final DialogButton close = new 
DialogButton(WebSession.getString(1418));
+       private final DialogButton delete = new 
DialogButton(WebSession.getString(1420));
+       private boolean moderator = false;
+
+       public PollResultsDialog(String id, long roomId) {
+               super(id, WebSession.getString(37));
+               this.roomId = roomId;
+               add(selForm = new PollSelectForm("selForm"));
+               add(dispForm = new PollResultsForm("dispForm"));
+       }
+
+       @Override
+       protected List<DialogButton> getButtons() {
+               return Arrays.asList(delete, close, cancel);
+       }
+       
+       public void updateModel(AjaxRequestTarget target, boolean moderator) {
+               selForm.updateModel(target);
+               this.moderator = moderator;
+               RoomPoll p = selForm.select.getModelObject();
+               dispForm.updateModel(p, false, target);
+               StringBuilder builder = new StringBuilder();
+               
builder.append("$('#").append(PollResultsDialog.this.getMarkupId()).append("').on('dialogopen',
 function( event, ui ) {");
+               builder.append(getScript(barChart(p)));
+               builder.append("});");
+               
+               target.appendJavaScript(builder.toString());
+       }
+
+       private StringBuilder getScript(Chart<?> chart) {
+               StringBuilder builder = new StringBuilder();
+               
builder.append("$('#").append(chartDiv.getMarkupId()).append("').html(''); ");
+               
builder.append("$.jqplot('").append(chartDiv.getMarkupId()).append("', ");
+               builder.append(chart.getChartData().toJsonString());
+               builder.append(", ");
+               
builder.append(JqPlotUtils.jqPlotToJson(chart.getChartConfiguration()));
+               builder.append(");");
+               return builder;
+       }
+       
+       @Override
+       public void renderHead(IHeaderResponse response) {
+               super.renderHead(response);
+               
response.render(JavaScriptHeaderItem.forReference(JqPlotJavascriptResourceReference.get()));
+               
response.render(CssHeaderItem.forReference(JqPlotCssResourceReference.get()));
+               Chart<?> c1 = new PieChart<Number>(null);
+               c1.getChartConfiguration().setHighlighter(new Highlighter());
+               for (Chart<?> chart : new Chart<?>[]{c1, new 
BarChart<Integer>(null)}) {
+                       for (String resource : 
JqPlotUtils.retriveJavaScriptResources(chart)) {
+                               
response.render(JavaScriptHeaderItem.forReference(new 
JavaScriptResourceReference(JqPlotBehavior.class, removeMinified(resource))));
+                       }
+               }
+       }
+       
+    private String removeMinified(String name_) {
+        String name = name_;
+        int idxOfExtension = name.lastIndexOf('.');
+        if (idxOfExtension > -1) {
+            String extension = name.substring(idxOfExtension);
+            name = name.substring(0, name.length() - extension.length() + 1);
+            if (name.endsWith(".min."))
+            {
+                name = name.substring(0, name.length() - 5) + extension;
+            }
+        }
+        return name;
+    }
+
+    @Override
+       public void onClose(AjaxRequestTarget target, DialogButton button) {
+       }
+       
+    private String[] getTicks(RoomPoll p) {
+               return p.getType().isNumeric()
+                               ? new String[] {"1", "2", "3", "4", "5", "6", 
"7", "8", "9", "10"}
+                               : new String[] {WebSession.getString(34), 
WebSession.getString(35)};
+    }
+    
+       private Integer[] initValues(int size) {
+               Integer[] values = new Integer[size];
+               for (int i = 0; i < size; ++i) {
+                       values[i] = 0;
+               }
+               return values;
+       }
+       
+       private Integer[] getValues(RoomPoll p) {
+               Integer[] values = initValues(p.getType().isNumeric() ? 10 : 2);
+               if (p.getType().isNumeric()) {
+                       for (RoomPollAnswer a : p.getAnswers()) {
+                               values[a.getPointList() - 1] ++;
+                       }
+               } else {
+                       for (RoomPollAnswer a : p.getAnswers()) {
+                               values[a.getAnswer() ? 0 : 1] ++;
+                       }
+               }
+               return values;
+       }
+       
+       private PieChart<Integer> pieChart(RoomPoll p) {
+        PieChart<Integer> pieChart = new PieChart<Integer>(null);
+               String[] ticks = getTicks(p);
+               Integer[] values = getValues(p);
+        for (int i = 0; i < values.length; ++i) {
+            pieChart.addValue(ticks[i], values[i]);
+        }
+        
+        pieChart.getSeriesDefaults().setRendererOptions(
+                       new 
RendererOptions().setHighlightMouseDown(true).setShowDataLabels(true)
+                               
.setFill(false).setSliceMargin(4).setLineWidth(5));
+
+        Highlighter h = new Highlighter();
+        h.setShow(true);
+        h.setFormatString("%s, %P");
+        h.setTooltipLocation(Location.ne);
+        h.setShowTooltip(true);
+        h.setUseAxesFormatters(false);
+        
+        pieChart.getChartConfiguration().setLegend(null).setHighlighter(h);
+        return pieChart;
+       }
+       
+       private BarChart<Integer> barChart(RoomPoll p) {
+               String[] ticks = getTicks(p);
+               BarChart<Integer> barChart = new BarChart<Integer>(null);
+               barChart.addValue(Arrays.asList(getValues(p)));
+        
+        barChart.getSeriesDefaults().setRendererOptions(
+                       new 
RendererOptions().setHighlightMouseDown(true).setShowDataLabels(true)
+                               
.setFill(false).setSliceMargin(4).setLineWidth(5).setBarDirection("horizontal"));
+
+        Highlighter h = new Highlighter();
+        h.setShow(true);
+        h.setFormatString("%s, %P");
+        h.setTooltipLocation(Location.ne);
+        h.setShowTooltip(true);
+        h.setUseAxesFormatters(false);
+        
+        ChartConfiguration<Long> cfg = barChart.getChartConfiguration();
+        cfg.setLegend(null).setHighlighter(h);
+        cfg.axesInstance().setXaxis(null);
+        
/*cfg.axesInstance().xAxisInstance().setRenderer(JqPlotResources.AxisTickRenderer);*/
+        cfg.axesInstance()
+               .yAxisInstance()
+               .setTicks(ticks)
+               .setRenderer(JqPlotResources.CategoryAxisRenderer);
+        return barChart;
+       }
+       
+       private class PollSelectForm extends Form<RoomPoll> {
+               private static final long serialVersionUID = 1L;
+               private final DropDownChoice<RoomPoll> select;
+
+               PollSelectForm(String id) {
+                       super(id);
+                       add((select = new DropDownChoice<RoomPoll>("polls", 
Model.of((RoomPoll)null), new ArrayList<RoomPoll>(), new 
ChoiceRenderer<RoomPoll>() {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               public Object getDisplayValue(RoomPoll object) {
+                                       return String.format("%s%s", 
object.getName(), object.isArchived() ? "" : String.format(" (%s)", 
WebSession.getString(1413)));
+                               }
+
+                               @Override
+                               public String getIdValue(RoomPoll object, int 
index) {
+                                       return "" + object.getId();
+                               }
+                       })).add(new AjaxFormComponentUpdatingBehavior("change") 
{
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onUpdate(AjaxRequestTarget 
target) {
+                                       
dispForm.updateModel(select.getModelObject(), true, target);
+                               }
+                       }));
+                       updateModel(null);
+               }
+
+               public void updateModel(AjaxRequestTarget target) {
+                       List<RoomPoll> list = new ArrayList<RoomPoll>();
+                       list.add(getBean(PollDao.class).getPoll(roomId));
+                       list.addAll(getBean(PollDao.class).getArchived(roomId));
+                       select.setChoices(list);
+                       select.setModelObject(list.isEmpty() ? null : 
list.get(0));
+                       if (target != null) {
+                               target.add(this);
+                       }
+               }
+       }
+       
+       private class PollResultsForm extends Form<RoomPoll> {
+               private static final long serialVersionUID = 1L;
+               private final String SIMPLE_CHART = WebSession.getString(1414);
+               private final String PIE_CHART = WebSession.getString(1415);
+               private final IModel<String> name = Model.of((String)null);
+               private final IModel<Integer> count = Model.of(0);
+               private final DropDownChoice<String> chartType = new 
DropDownChoice<String>("chartType", Model.of(SIMPLE_CHART), 
Arrays.asList(SIMPLE_CHART, PIE_CHART));
+
+               PollResultsForm(String id) {
+                       super(id, Model.of((RoomPoll)null));
+                       setOutputMarkupId(true);
+                       add(new Label("name", name));
+                       add(new Label("question"));
+                       add(new Label("count", count));
+                       add(chartType.add(new 
AjaxFormComponentUpdatingBehavior("change") {
+                               private static final long serialVersionUID = 1L;
+
+                               @Override
+                               protected void onUpdate(AjaxRequestTarget 
target) {
+                                       redraw(target);
+                               }
+                       }));
+                       add(chartDiv.setOutputMarkupId(true));
+               }
+               
+               public void updateModel(RoomPoll poll, boolean redraw, 
AjaxRequestTarget target) {
+                       setModelObject(poll);
+                       name.setObject(VoteDialog.getName(poll.getCreator()));
+                       count.setObject(poll.getAnswers().size());
+                       target.add(this);
+                       close.setVisible(moderator && !poll.isArchived(), 
target);
+                       delete.setVisible(moderator, target);
+                       if (redraw) {
+                               redraw(target);
+                       }
+               }
+               
+               private void redraw(AjaxRequestTarget target) {
+                       RoomPoll poll = getModelObject();
+                       Chart<?> chart = 
SIMPLE_CHART.equals(chartType.getModelObject()) ? barChart(poll) : 
pieChart(poll);
+                       target.appendJavaScript(getScript(chart));
+               }
+       }
+}

Modified: 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
 (original)
+++ 
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
 Sun Sep 14 14:12:56 2014
@@ -1,5 +1,20 @@
-/**
- * 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.apache.openmeetings.web.room.poll;
 
@@ -39,7 +54,7 @@ import com.googlecode.wicket.kendo.ui.pa
  */
 public class VoteDialog extends AbstractFormDialog<RoomPollAnswer> {
        private static final long serialVersionUID = 1L;
-       private final static List<Integer> answers = Arrays.asList(1, 2, 3, 4, 
5, 6, 7, 8, 9, 10);
+       private final static List<Integer> answers = Arrays.asList(1, 2, 3, 4, 
5, 6, 7, 8, 9, 10);  //TODO max vote should be added 
        private final long roomId;
        private final PollAnswerForm form;
        private final DialogButton vote = new 
DialogButton(WebSession.getString(32));
@@ -53,12 +68,16 @@ public class VoteDialog extends Abstract
                add(form = new PollAnswerForm("form", new 
CompoundPropertyModel<RoomPollAnswer>(new RoomPollAnswer())));
        }
        
+       static String getName(User u) {
+               return getUserId() == u.getId() ? WebSession.getString(1411) : 
u.getFirstname() + " " + u.getLastname();
+       }
+       
        public void updateModel(AjaxRequestTarget target) {
                RoomPollAnswer a = new RoomPollAnswer();
                a.setRoomPoll(getBean(PollDao.class).getPoll(roomId));
                User u = getBean(UserDao.class).get(getUserId());
                a.setVotedUser(u);
-               user.setObject(a.getRoomPoll().getCreator().getFirstname() + " 
" + a.getRoomPoll().getCreator().getLastname());
+               user.setObject(getName(a.getRoomPoll().getCreator()));
                form.setModelObject(a);
                target.add(form);
        }

Modified: openmeetings/trunk/singlewebapp/pom.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/pom.xml?rev=1624852&r1=1624851&r2=1624852&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/pom.xml (original)
+++ openmeetings/trunk/singlewebapp/pom.xml Sun Sep 14 14:12:56 2014
@@ -490,6 +490,28 @@
                                        </exclusion>
                                </exclusions>
                        </dependency>
+                       <dependency>
+                               <groupId>org.apache.wicket</groupId>
+                               <artifactId>wicket-extensions</artifactId>
+                               <version>${wicket.version}</version>
+                               <exclusions>
+                                       <exclusion>
+                                               <groupId>org.slf4j</groupId>
+                                               
<artifactId>slf4j-api</artifactId>
+                                       </exclusion>
+                               </exclusions>
+                       </dependency>
+                       <dependency>
+                               <groupId>org.apache.xmlgraphics</groupId>
+                               <artifactId>batik-svg-dom</artifactId>
+                               <version>${batik.version}</version>
+                               <exclusions>
+                                       <exclusion>
+                                               
<artifactId>xml-apis-ext</artifactId>
+                                               <groupId>xml-apis</groupId>
+                                       </exclusion>
+                               </exclusions>
+                       </dependency>
             <!-- dependency>
                 <groupId>org.apache.flex</groupId>
                 <artifactId>framework</artifactId>


Reply via email to