Author: solomax
Date: Thu Sep 11 03:11:58 2014
New Revision: 1624186
URL: http://svn.apache.org/r1624186
Log:
[OPENMEETINGS-1081] create poll dialog is added, invitation dialog is corrected
Added:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.html
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.java
Modified:
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/BackupImport.java
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java
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=1624186&r1=1624185&r2=1624186&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
Thu Sep 11 03:11:58 2014
@@ -29,6 +29,7 @@ import javax.persistence.PersistenceCont
import javax.persistence.Query;
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;
@@ -49,6 +50,8 @@ public class PollDao {
@Autowired
private FieldValueDao fieldValDao;
@Autowired
+ private FieldLanguagesValuesDao labelDao;
+ @Autowired
private UserDao userDao;
@Autowired
private RoomDao roomDao;
@@ -64,9 +67,12 @@ public class PollDao {
return pt.getId();
}
- public List<PollType> getPollTypes() {
- return em.createNamedQuery("getPollTypes", PollType.class)
- .getResultList();
+ public List<PollType> getPollTypes(long langId) {
+ List<PollType> l = em.createNamedQuery("getPollTypes",
PollType.class).getResultList();
+ for (PollType t : l) {
+
t.getLabel().setFieldlanguagesvalue(labelDao.get(t.getLabel().getId(), langId));
+ }
+ return l;
}
public PollType getPollType(Long typeId) {
@@ -78,11 +84,11 @@ public class PollDao {
public RoomPoll createPoll(Client rc, String pollName, String
pollQuestion, Long pollTypeId) {
RoomPoll roomP = new RoomPoll();
- roomP.setCreatedBy(userDao.get(rc.getUser_id()));
+ roomP.setCreator(userDao.get(rc.getUser_id()));
roomP.setCreated(new Date());
- roomP.setPollName(pollName);
- roomP.setPollQuestion(pollQuestion);
- roomP.setPollType(getPollType(pollTypeId));
+ roomP.setName(pollName);
+ roomP.setQuestion(pollQuestion);
+ roomP.setType(getPollType(pollTypeId));
roomP.setRoom(roomDao.get(rc.getRoom_id()));
em.persist(roomP);
@@ -111,11 +117,11 @@ public class PollDao {
return false;
}
- public boolean deletePoll(Long poll_id){
+ public boolean deletePoll(Long id){
try {
log.debug(" :: deletePoll :: ");
Query q = em.createNamedQuery("deletePoll");
- q.setParameter("roomPollId", poll_id);
+ q.setParameter("id", id);
return q.executeUpdate() > 0;
} catch (Exception err) {
log.error("[deletePoll]", err);
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=1624186&r1=1624185&r2=1624186&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
Thu Sep 11 03:11:58 2014
@@ -37,6 +37,7 @@ import javax.persistence.OneToOne;
import javax.persistence.Table;
import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
import org.apache.openmeetings.db.entity.user.User;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
@@ -44,77 +45,78 @@ import org.simpleframework.xml.Root;
@Entity
@NamedQueries({
- @NamedQuery(name = "closePoll", query = "UPDATE RoomPoll rp SET
rp.archived = :archived " +
- "WHERE rp.room.id = :rooms_id"),
- @NamedQuery(name = "deletePoll", query = "DELETE FROM RoomPoll rp WHERE
rp.roomPollId = :roomPollId"),
- @NamedQuery(name = "getPoll", query = "SELECT rp FROM RoomPoll rp " +
- "WHERE rp.room.id = :room_id AND rp.archived =
:archived"),
- @NamedQuery(name = "getPollListBackup", query = "SELECT rp FROM
RoomPoll rp ORDER BY rp.roomPollId"),
- @NamedQuery(name = "getArchivedPollList", query = "SELECT rp FROM
RoomPoll rp " +
- "WHERE rp.room.id = :room_id AND rp.archived =
:archived"),
- @NamedQuery(name = "hasPoll", query = "SELECT COUNT(rp) FROM RoomPoll
rp " +
- "WHERE rp.room.id = :room_id AND rp.archived =
:archived")
-})
+ @NamedQuery(name = "closePoll", query = "UPDATE RoomPoll rp SET
rp.archived = :archived "
+ + "WHERE rp.room.id = :rooms_id"),
+ @NamedQuery(name = "deletePoll", query = "DELETE FROM RoomPoll
rp WHERE rp.id = :id"),
+ @NamedQuery(name = "getPoll", query = "SELECT rp FROM RoomPoll
rp "
+ + "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"),
+ @NamedQuery(name = "hasPoll", query = "SELECT COUNT(rp) FROM
RoomPoll rp "
+ + "WHERE rp.room.id = :room_id AND rp.archived
= :archived") })
@Table(name = "room_polls")
-@Root(name="roompoll")
-public class RoomPoll {
+@Root(name = "roompoll")
+public class RoomPoll implements IDataProviderEntity {
+ private static final long serialVersionUID = 1L;
+
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
- private Long roomPollId;
-
+ private Long id;
+
@Column(name = "poll_name")
- @Element(name="pollname", data=true, required=false)
- private String pollName;
-
+ @Element(name = "pollname", data = true, required = false)
+ private String name;
+
@Column(name = "poll_question")
- @Element(name="pollquestion", data=true, required=false)
- private String pollQuestion;
-
+ @Element(name = "pollquestion", data = true, required = false)
+ private String question;
+
@Column(name = "created")
- @Element(data=true, required=false)
+ @Element(data = true, required = false)
private Date created;
-
+
@Column(name = "archived")
- @Element(data=true, required=false)
+ @Element(data = true, required = false)
private boolean archived;
-
+
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "poll_type_id")
@ForeignKey(enabled = true)
- @Element(name="polltypeid", data=true, required=false)
- private PollType pollType;
-
+ @Element(name = "polltypeid", data = true, required = false)
+ private PollType type;
+
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "users_id")
@ForeignKey(enabled = true)
- @Element(name="createdbyuserid", data=true, required=false)
- private User createdBy;
-
+ @Element(name = "createdbyuserid", data = true, required = false)
+ private User creator;
+
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "rooms_id")
@ForeignKey(enabled = true)
- @Element(name="roomid", data=true, required=false)
+ @Element(name = "roomid", data = true, required = false)
private Room room;
-
- @OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
+
+ @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "room_poll_id")
- @ElementList(name="roompollanswers", required=false)
- private List<RoomPollAnswers> roomPollAnswerList;
+ @ElementList(name = "roompollanswers", required = false)
+ private List<RoomPollAnswers> answers;
/**
- * @return the createdBy
+ * @return the creator
*/
- public User getCreatedBy() {
- return createdBy;
+ public User getCreator() {
+ return creator;
}
/**
- * @param createdBy
- * the createdBy to set
+ * @param creator
+ * the creator to set
*/
- public void setCreatedBy(User createdBy) {
- this.createdBy = createdBy;
+ public void setCreator(User creator) {
+ this.creator = creator;
}
/**
@@ -133,62 +135,62 @@ public class RoomPoll {
}
/**
- * @return the pollQuestion
+ * @return the question
*/
- public String getPollQuestion() {
- return pollQuestion;
+ public String getQuestion() {
+ return question;
}
/**
- * @param pollQuestion
- * the pollQuestion to set
+ * @param question
+ * the question to set
*/
- public void setPollQuestion(String pollQuestion) {
- this.pollQuestion = pollQuestion;
+ public void setQuestion(String question) {
+ this.question = question;
}
/**
- * @return the roomPollAnswerList
+ * @return the answers
*/
- public List<RoomPollAnswers> getRoomPollAnswerList() {
- if (roomPollAnswerList == null) {
- roomPollAnswerList = new LinkedList<RoomPollAnswers>();
+ public List<RoomPollAnswers> getAnswers() {
+ if (answers == null) {
+ answers = new LinkedList<RoomPollAnswers>();
}
- return roomPollAnswerList;
+ return answers;
}
/**
- * @param roomPollAnswerList
- * the roomPollAnswerList to set
+ * @param answers
+ * the answers to set
*/
- public void setRoomPollAnswerList(List<RoomPollAnswers>
roomPollAnswerList) {
- this.roomPollAnswerList = roomPollAnswerList;
+ public void setAnswers(List<RoomPollAnswers> answers) {
+ this.answers = answers;
}
/**
- * @return the roomPollId
+ * @return the id
*/
- public Long getRoomPollId() {
- return roomPollId;
+ public Long getId() {
+ return id;
}
/**
- * @param roomPollId
- * the roomPollId to set
+ * @param id
+ * the id to set
*/
- public void setRoomPollId(Long roomPollId) {
- this.roomPollId = roomPollId;
+ public void setId(Long id) {
+ this.id = id;
}
/**
- * @return the pollTypeId
+ * @return the type
*/
- public PollType getPollType() {
- return pollType;
+ public PollType getType() {
+ return type;
}
- public void setPollType(PollType pollType) {
- this.pollType = pollType;
+ public void setType(PollType type) {
+ this.type = type;
}
public Room getRoom() {
@@ -207,7 +209,8 @@ public class RoomPoll {
}
/**
- * @param archived the archived to set
+ * @param archived
+ * the archived to set
*/
public void setArchived(boolean archived) {
this.archived = archived;
@@ -216,15 +219,16 @@ public class RoomPoll {
/**
* @return the pollName
*/
- public String getPollName() {
- return pollName;
+ public String getName() {
+ return name;
}
/**
- * @param pollName the pollName to set
+ * @param name
+ * the name to set
*/
- public void setPollName(String pollName) {
- this.pollName = pollName;
+ public void setName(String name) {
+ this.name = name;
}
}
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=1624186&r1=1624185&r2=1624186&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
Thu Sep 11 03:11:58 2014
@@ -631,10 +631,10 @@ public class BackupImport {
//room was deleted
continue;
}
- if (rp.getCreatedBy() == null ||
rp.getCreatedBy().getId() == null) {
- rp.setCreatedBy(null);
+ if (rp.getCreator() == null ||
rp.getCreator().getId() == null) {
+ rp.setCreator(null);
}
- for (RoomPollAnswers rpa :
rp.getRoomPollAnswerList()) {
+ for (RoomPollAnswers rpa : rp.getAnswers()) {
if (rpa.getVotedUser() == null ||
rpa.getVotedUser().getId() == null) {
rpa.setVotedUser(null);
}
Added:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.html
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.html?rev=1624186&view=auto
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.html
(added)
+++
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.html
Thu Sep 11 03:11:58 2014
@@ -0,0 +1,46 @@
+<?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="form">
+ <table>
+ <tr>
+ <th colspan="2"><wicket:ommessage key="19"
/></th>
+ </tr>
+ <tr>
+ <td><label wicket:for="name"><wicket:ommessage
key="1410" /></label></td>
+ <td><input type="text" wicket:id="name"
class="input"/></td>
+ </tr>
+ <tr>
+ <td><label
wicket:for="question"><wicket:ommessage key="20" /></label></td>
+ <td><textarea wicket:id="question"
style="width: 280px; height: 70px;"></textarea></td>
+ </tr>
+ <tr>
+ <td><label wicket:for="type"><wicket:ommessage
key="21" /></label></td>
+ <td><select wicket:id="type"/></td>
+ </tr>
+ <tr>
+ <td colspan="2" style="color:
red;"><wicket:ommessage key="23" /></td>
+ </tr>
+ </table>
+ </form>
+</wicket:panel>
+</html>
Added:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.java?rev=1624186&view=auto
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.java
(added)
+++
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/CreatePollDialog.java
Thu Sep 11 03:11:58 2014
@@ -0,0 +1,107 @@
+/*
+ * 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;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+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.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class CreatePollDialog extends AbstractFormDialog<RoomPoll> {
+ private static final long serialVersionUID = 1L;
+ private final DialogButton create = new
DialogButton(WebSession.getString(22));
+ private final DialogButton cancel = new
DialogButton(WebSession.getString(25));
+ private final long roomId;
+ private final PollForm form;
+
+ public CreatePollDialog(String id, long roomId) {
+ super(id, WebSession.getString(18), new
CompoundPropertyModel<RoomPoll>(new RoomPoll()));
+ this.roomId = roomId;
+ add(form = new PollForm("form", getModel()));
+ }
+
+ public void updateModel(AjaxRequestTarget target) {
+ RoomPoll p = new RoomPoll();
+ User u = getBean(UserDao.class).get(getUserId());
+ p.setCreator(u);
+ p.setRoom(getBean(RoomDao.class).get(roomId));
+
p.setType(getBean(PollDao.class).getPollTypes(getLanguage()).get(0));
+ form.setModelObject(p);
+ target.add(form);
+ }
+
+ @Override
+ protected List<DialogButton> getButtons() {
+ return Arrays.asList(create, cancel);
+ }
+
+ @Override
+ protected DialogButton getSubmitButton() {
+ return create;
+ }
+
+ @Override
+ public PollForm getForm() {
+ return form;
+ }
+
+ @Override
+ protected void onError(AjaxRequestTarget target) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ protected void onSubmit(AjaxRequestTarget target) {
+ // TODO Auto-generated method stub
+
+ }
+
+ private class PollForm extends Form<RoomPoll> {
+ private static final long serialVersionUID = 1L;
+
+ public PollForm(String id, IModel<RoomPoll> model) {
+ super(id, model);
+ add(new RequiredTextField<String>("name"));
+ add(new TextArea<String>("question"));
+ add(new DropDownChoice<PollType>("type",
getBean(PollDao.class).getPollTypes(getLanguage()), new
ChoiceRenderer<PollType>("label.fieldlanguagesvalue.value", "id")));
+ }
+ }
+}
Modified:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html?rev=1624186&r1=1624185&r2=1624186&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html
Thu Sep 11 03:11:58 2014
@@ -61,10 +61,12 @@
<td><span class="date time picker"
wicket:id="validTo"></span></td>
</tr>
<tr>
- <td><wicket:ommessage key="1143"
/></td><td><select wicket:id="timeZoneId"/></td>
+ <td><label
wicket:for="timeZoneId"><wicket:ommessage key="1143" /></label></td>
+ <td><select wicket:id="timeZoneId"/></td>
</tr>
<tr>
- <td><wicket:ommessage key="59"
/></td><td><select wicket:id="language"/></td>
+ <td><label
wicket:for="language"><wicket:ommessage key="59" /></label></td>
+ <td><select wicket:id="language"/></td>
</tr>
<tr>
<td colspan="2"><input type="text"
disabled="disabled" style="width: 100%;"/></td>
Modified:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java?rev=1624186&r1=1624185&r2=1624186&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java
(original)
+++
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java
Thu Sep 11 03:11:58 2014
@@ -122,6 +122,14 @@ public class InvitationDialog extends Ab
form.setModelObject(i);
target.add(form);
}
+
+ @Override
+ protected Form<?> getForm(DialogButton button) {
+ if (button.equals(generate) || button.equals(send)) {
+ return form;
+ }
+ return super.getForm(button);
+ }
@Override
public InvitationForm getForm() {
@@ -144,6 +152,12 @@ public class InvitationDialog extends Ab
}
@Override
+ public void onClick(AjaxRequestTarget target, DialogButton button) {
+ // TODO Auto-generated method stub
+ super.onClick(target, button);
+ }
+
+ @Override
protected void onSubmit(AjaxRequestTarget target) {
Invitation i = form.getModelObject();
for (User u : modelTo.getObject()) {