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> <wicket:ommessage key="36"/></td>
+ </tr>
+ <tr>
+ <td colspan="2"><span
wicket:id="question"></span></td>
+ </tr>
+ <tr>
+ <td><wicket:ommessage key="39"/> (<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>