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
