Repository: openmeetings
Updated Branches:
  refs/heads/master d844b59cd -> 110523097


no jira: restrictive select2 provider is implemented to avoid parameter 
manipulations


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/11052309
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/11052309
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/11052309

Branch: refs/heads/master
Commit: 11052309730dd28bdfbdd9989ab4a01098910867
Parents: d844b59
Author: Maxim Solodovnik <[email protected]>
Authored: Sat Jun 17 11:02:12 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Sat Jun 17 11:02:12 2017 +0700

----------------------------------------------------------------------
 .../openmeetings/web/admin/rooms/RoomForm.java  | 21 +++----
 .../openmeetings/web/admin/users/UserForm.java  | 15 ++---
 .../web/common/GeneralUserForm.java             | 25 +++------
 .../web/util/RestrictiveChoiceProvider.java     | 59 ++++++++++++++++++++
 .../web/util/UserChoiceProvider.java            | 27 ++++-----
 5 files changed, 92 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/11052309/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
index 70705f1..e8ffa21 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -34,11 +34,11 @@ import 
org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.IUserService;
 import org.apache.openmeetings.db.dao.user.UserDao;
-import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
@@ -46,6 +46,7 @@ import org.apache.openmeetings.web.admin.AdminBaseForm;
 import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.util.RestrictiveChoiceProvider;
 import org.apache.openmeetings.web.util.RoomTypeDropDown;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -148,7 +149,7 @@ public class RoomForm extends AdminBaseForm<Room> {
                for (Group org : orgList) {
                        orgRooms.add(new RoomGroup(org, getModelObject()));
                }
-               add(new Select2MultiChoice<>("roomGroups", null, new 
ChoiceProvider<RoomGroup>() {
+               add(new Select2MultiChoice<>("roomGroups", null, new 
RestrictiveChoiceProvider<RoomGroup>() {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -158,7 +159,7 @@ public class RoomForm extends AdminBaseForm<Room> {
                        }
 
                        @Override
-                       public String getIdValue(RoomGroup choice) {
+                       public String toId(RoomGroup choice) {
                                Long id = choice.getGroup().getId();
                                return id == null ? null : "" + id;
                        }
@@ -173,16 +174,10 @@ public class RoomForm extends AdminBaseForm<Room> {
                        }
 
                        @Override
-                       public Collection<RoomGroup> 
toChoices(Collection<String> _ids) {
-                               List<Long> ids = new ArrayList<>();
-                               for (String id : _ids) {
-                                       ids.add(Long.valueOf(id));
-                               }
-                               List<RoomGroup> list = new ArrayList<>();
-                               for (Group o : 
getBean(GroupDao.class).get(ids)) {
-                                       list.add(new RoomGroup(o, 
RoomForm.this.getModelObject()));
-                               }
-                               return list;
+                       public RoomGroup fromId(String _id) {
+                               Long id = Long.valueOf(_id);
+                               Group g = getBean(GroupDao.class).get(id);
+                               return new RoomGroup(g, 
RoomForm.this.getModelObject());
                        }
                
}).setLabel(Model.of(getString("828"))).setRequired(isGroupAdmin));
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/11052309/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
index dadb391..af82e9e 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
@@ -30,7 +30,6 @@ import static 
org.apache.wicket.validation.validator.StringValidator.minimumLeng
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
@@ -50,6 +49,7 @@ import org.apache.openmeetings.web.admin.AdminBaseForm;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.ComunityUserForm;
 import org.apache.openmeetings.web.common.GeneralUserForm;
+import org.apache.openmeetings.web.util.RestrictiveChoiceProvider;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
@@ -68,7 +68,6 @@ import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Duration;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
-import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Response;
 import org.wicketstuff.select2.Select2MultiChoice;
 
@@ -192,7 +191,7 @@ public class UserForm extends AdminBaseForm<User> {
 
                add(new CheckBox("forceTimeZoneCheck"));
 
-               add(new Select2MultiChoice<>("rights", null, new 
ChoiceProvider<Right>() {
+               add(new Select2MultiChoice<>("rights", null, new 
RestrictiveChoiceProvider<Right>() {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -201,7 +200,7 @@ public class UserForm extends AdminBaseForm<User> {
                        }
 
                        @Override
-                       public String getIdValue(Right choice) {
+                       public String toId(Right choice) {
                                return choice.name();
                        }
 
@@ -222,12 +221,8 @@ public class UserForm extends AdminBaseForm<User> {
                        }
 
                        @Override
-                       public Collection<Right> toChoices(Collection<String> 
ids) {
-                               Collection<Right> rights = new 
ArrayList<>(ids.size());
-                               for (String id : ids) {
-                                       rights.add(Right.valueOf(id));
-                               }
-                               return rights;
+                       public Right fromId(String id) {
+                               return Right.valueOf(id);
                        }
                }));
                add(new ComunityUserForm("comunity", getModel()));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/11052309/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
index 7d1a71a..d8a6bac 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/GeneralUserForm.java
@@ -28,7 +28,6 @@ import static 
org.apache.openmeetings.web.app.WebSession.getUserId;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 
 import org.apache.openmeetings.core.util.StrongPasswordValidator;
@@ -43,6 +42,7 @@ import org.apache.openmeetings.util.CalendarHelper;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.util.CountryDropDown;
+import org.apache.openmeetings.web.util.RestrictiveChoiceProvider;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import 
org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
 import org.apache.wicket.markup.head.IHeaderResponse;
@@ -60,7 +60,6 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.util.string.Strings;
-import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Response;
 import org.wicketstuff.select2.Select2MultiChoice;
 
@@ -134,7 +133,7 @@ public class GeneralUserForm extends Form<User> {
        @Override
        protected void onInitialize() {
                super.onInitialize();
-               add(new Select2MultiChoice<>("groupUsers", null, new 
ChoiceProvider<GroupUser>() {
+               add(new Select2MultiChoice<>("groupUsers", null, new 
RestrictiveChoiceProvider<GroupUser>() {
                        private static final long serialVersionUID = 1L;
 
                        @Override
@@ -143,7 +142,7 @@ public class GeneralUserForm extends Form<User> {
                        }
 
                        @Override
-                       public String getIdValue(GroupUser choice) {
+                       public String toId(GroupUser choice) {
                                Long id = choice.getGroup().getId();
                                return id == null ? null : "" + id;
                        }
@@ -158,19 +157,13 @@ public class GeneralUserForm extends Form<User> {
                        }
 
                        @Override
-                       public Collection<GroupUser> 
toChoices(Collection<String> _ids) {
-                               List<Long> ids = new ArrayList<>();
-                               for (String id : _ids) {
-                                       ids.add(Long.parseLong(id));
-                               }
-                               List<GroupUser> list = new ArrayList<>();
+                       public GroupUser fromId(String _id) {
+                               Long id = Long.parseLong(_id);
                                User u = GeneralUserForm.this.getModelObject();
-                               for (Group g : 
getBean(GroupDao.class).get(ids)) {
-                                       GroupUser gu = new GroupUser(g, u);
-                                       int idx = grpUsers.indexOf(gu);
-                                       list.add(idx < 0 ? gu : 
grpUsers.get(idx));
-                               }
-                               return list;
+                               Group g = getBean(GroupDao.class).get(id);
+                               GroupUser gu = new GroupUser(g, u);
+                               int idx = grpUsers.indexOf(gu);
+                               return idx < 0 ? gu : grpUsers.get(idx);
                        }
                }).setLabel(Model.of(getString("161"))).setRequired(isAdminForm 
&& hasGroupAdminLevel(getRights())).setEnabled(isAdminForm));
        }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/11052309/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RestrictiveChoiceProvider.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RestrictiveChoiceProvider.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RestrictiveChoiceProvider.java
new file mode 100644
index 0000000..7de33ab
--- /dev/null
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RestrictiveChoiceProvider.java
@@ -0,0 +1,59 @@
+/*
+ * 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.util;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.wicketstuff.select2.ChoiceProvider;
+
+public abstract class RestrictiveChoiceProvider<T> extends ChoiceProvider<T> {
+       private static final long serialVersionUID = 1L;
+       private final Set<String> ids = new HashSet<>();
+
+       public abstract String toId(T e);
+       public abstract T fromId(String id);
+
+       @Override
+       public final String getIdValue(T e) {
+               String id = toId(e);
+               ids.add(id);
+               return id;
+       }
+
+       @Override
+       public final Collection<T> toChoices(Collection<String> _ids) {
+               Collection<T> c = new ArrayList<>();
+               for (String id : _ids) {
+                       if (ids.contains(id)) {
+                               T e = fromId(id);
+                               if (e != null) {
+                                       c.add(e);
+                               }
+                       }
+               }
+               return c;
+       }
+
+       @Override
+       public void detach() {
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/11052309/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
index 7d75276..93c3864 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
@@ -21,9 +21,7 @@ package org.apache.openmeetings.web.util;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -33,16 +31,15 @@ import org.apache.openmeetings.db.util.FormatHelper;
 import 
org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.validation.Validatable;
-import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Response;
 
 import com.github.openjson.JSONException;
 import com.github.openjson.JSONStringer;
 
-public class UserChoiceProvider extends ChoiceProvider<User> {
+public class UserChoiceProvider extends RestrictiveChoiceProvider<User> {
        private static final long serialVersionUID = 1L;
        private final static int PAGE_SIZE = 10;
-       private Map<String, User> newContacts = new Hashtable<>();
+       private final Map<String, User> newContacts = new HashMap<>();
 
        public static User getUser(String value) {
                User u = null;
@@ -81,7 +78,7 @@ public class UserChoiceProvider extends ChoiceProvider<User> {
        }
 
        @Override
-       public String getIdValue(User u) {
+       public String toId(User u) {
                String id = "" + u.getId();
                if (u.getId() == null) {
                        newContacts.put(u.getLogin(), u);
@@ -108,16 +105,14 @@ public class UserChoiceProvider extends 
ChoiceProvider<User> {
        }
 
        @Override
-       public Collection<User> toChoices(Collection<String> ids) {
-               Collection<User> c = new ArrayList<>();
-               for (String id : ids) {
-                       if (newContacts.containsKey(id)) {
-                               c.add(newContacts.get(id));
-                       } else {
-                               
c.add(getBean(UserDao.class).get(Long.valueOf(id)));
-                       }
+       public User fromId(String id) {
+               User u = null;
+               if (newContacts.containsKey(id)) {
+                       u = newContacts.get(id);
+               } else {
+                       u = getBean(UserDao.class).get(Long.valueOf(id));
                }
-               return c;
+               return u;
        }
 
        @Override

Reply via email to