in openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java [142:418]
protected void onInitialize() {
super.onInitialize();
RequiredTextField<String> name = new RequiredTextField<>("name");
name.setLabel(new ResourceModel("165"));
add(name);
TextField<String> tag = new TextField<>("tag");
tag.add(maximumLength(10));
tag.setLabel(new ResourceModel("admin.group.form.tag"));
add(tag);
add(new DropDownChoice<>("capacity", //
DROPDOWN_NUMBER_OF_PARTICIPANTS, //
new LambdaChoiceRenderer<>(num -> num, String::valueOf)));
add(new RoomTypeDropDown("type").setRequired(true).setLabel(new ResourceModel("45")));
add(new TextArea<String>("comment"));
boolean isGroupAdmin = hasGroupAdminLevel(getRights());
add(new CheckBox("appointment").setEnabled(false));
add(new CheckBox("ispublic").setEnabled(!isGroupAdmin));
List<Group> orgList = isGroupAdmin
? groupDao.adminGet(null, getUserId(), 0, Integer.MAX_VALUE, null)
: groupDao.get(0, Integer.MAX_VALUE);
final List<RoomGroup> orgRooms = new ArrayList<>(orgList.size());
for (Group org : orgList) {
orgRooms.add(new RoomGroup(org, getModelObject()));
}
add(new Select2MultiChoice<>("groups", null, new RestrictiveChoiceProvider<RoomGroup>() {
private static final long serialVersionUID = 1L;
@Override
public String getDisplayValue(RoomGroup choice) {
String name = choice.getGroup().getName();
return name == null ? "" : name;
}
@Override
public String toId(RoomGroup choice) {
Long id = choice.getGroup().getId();
return id == null ? null : "" + id;
}
@Override
public void query(String term, int page, Response<RoomGroup> response) {
response.addAll(orgRooms.stream()
.filter(rg -> Strings.isEmpty(term) || rg.getGroup().getName().contains(term))
.toList()
);
}
@Override
public RoomGroup fromId(String inId) {
Long id = Long.valueOf(inId);
if (orgList.stream().noneMatch(g -> g.getId().equals(id))) {
return null; // seems to be hacked
}
Group g = groupDao.get(id);
return new RoomGroup(g, RoomForm.this.getModelObject());
}
}).setLabel(new ResourceModel("828")).setRequired(isGroupAdmin));
add(new CheckBox("isDemoRoom"));
TextField<Integer> demoTime = new TextField<>("demoTime");
demoTime.setLabel(new Model<>(getString("637")));
add(demoTime);
add(new CheckBox("allowUserQuestions"));
add(new CheckBox("audioOnly"));
add(new CheckBox("closed"));
add(new TextField<String>("redirectURL"));
add(new CheckBox("waitRecording"));
add(new CheckBox("allowRecording").setEnabled(isRecordingsEnabled()));
add(new CheckBox("chatModerated"));
add(new Select2MultiChoice<>("hiddenElements", null, new ChoiceProvider<RoomElement>() {
private static final long serialVersionUID = 1L;
@Override
public String getDisplayValue(RoomElement choice) {
return choice.name();
}
@Override
public String getIdValue(RoomElement choice) {
return choice.name();
}
@Override
public void query(String term, int page, Response<RoomElement> response) {
for (RoomElement r : RoomElement.values()) {
if (Strings.isEmpty(term) || r.name().contains(term)) {
response.add(r);
}
}
}
@Override
public Collection<RoomElement> toChoices(Collection<String> ids) {
Collection<RoomElement> rights = new ArrayList<>(ids.size());
for (String id : ids) {
rights.add(RoomElement.valueOf(id));
}
return rights;
}
}));
add(new CheckBox("chatOpened"));
add(new CheckBox("filesOpened"));
// Moderators
final Select2Choice<User> moderatorChoice = new Select2Choice<>("moderator2add", moderator2add, new AdminUserChoiceProvider() {
private static final long serialVersionUID = 1L;
@Override
public void query(String term, int page, Response<User> response) {
response.addAll(userDao.get(term, false, page * PAGE_SIZE, PAGE_SIZE));
response.setHasMore(PAGE_SIZE == response.getResults().size());
}
@Override
public String getDisplayValue(User choice) {
Address a = choice.getAddress();
return String.format("\"%s\" <%s>", choice.getDisplayName(), a == null ? "" : a.getEmail());
}
});
moderatorChoice.getSettings().setCloseOnSelect(true);
add(moderatorChoice.add(AjaxFormComponentUpdatingBehavior.onUpdate(EVT_CHANGE, target -> {
Room r = RoomForm.this.getModelObject();
User u = moderator2add.getObject();
boolean found = false;
if (u != null) {
if (r.getModerators() == null) {
r.setModerators(new ArrayList<>());
}
for (RoomModerator rm : r.getModerators()) {
if (rm.getUser().getId().equals(u.getId())) {
found = true;
break;
}
}
if (!found) {
RoomModerator rm = new RoomModerator();
rm.setRoomId(r.getId());
rm.setUser(u);
r.getModerators().add(0, rm);
moderator2add.setObject(null);
target.add(moderatorContainer, moderatorChoice);
}
}
})).setOutputMarkupId(true));
add(moderatorContainer.add(new ListView<RoomModerator>("moderators") {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem<RoomModerator> item) {
RoomModerator moderator = item.getModelObject();
Label name = new Label("uName", moderator.getUser().getDisplayName());
BootstrapAjaxLink<String> del = new BootstrapAjaxLink<>("delete", Buttons.Type.Outline_Danger) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
RoomForm.this.getModelObject().getModerators().remove(item.getIndex());
target.add(moderatorContainer);
}
};
del.setIconType(FontAwesome6IconType.xmark_s)
.add(newOkCancelDangerConfirm(this, getString("833")));
item.add(new CheckBox("superModerator", new PropertyModel<>(moderator, "superModerator")))
.add(new Label("userId", String.valueOf(moderator.getUser().getId())))
.add(name)
.add(new Label("email", moderator.getUser().getAddress().getEmail()))
.add(del)
.add(new BootstrapBadge("new", new ResourceModel("lbl.new"), BackgroundColorBehavior.Color.Warning).setVisible((moderator.getId() == null)));
}
}).setOutputMarkupId(true));
add(new CheckBox("moderated"));
add(new CheckBox("waitModerator"));
// Files
Form<Void> filesForm = new Form<>("filesForm");
add(filesForm.add(new Select2MultiChoice<>("files2add", files2add, new ChoiceProvider<BaseFileItem>() {
private static final long serialVersionUID = 1L;
@Override
public String getDisplayValue(BaseFileItem f) {
return f.getName();
}
@Override
public String getIdValue(BaseFileItem f) {
return "" + f.getId();
}
@Override
public void query(String term, int page, Response<BaseFileItem> response) {
response.addAll(fileDao.getAllRoomFiles(term, page * PAGE_SIZE, PAGE_SIZE, RoomForm.this.getModelObject().getId(), orgList));
response.setHasMore(PAGE_SIZE == response.getResults().size());
}
@Override
public Collection<BaseFileItem> toChoices(Collection<String> ids) {
return fileDao.get(ids);
}
}).setLabel(new ResourceModel("245")))
.add(new TextField<>("wbidx", wbIdx) {
private static final long serialVersionUID = 1L;
@Override
protected String[] getInputTypes() {
return new String[] {"number"};
}
})
.add(new BootstrapAjaxButton("addFiles", new ResourceModel("1261"), filesForm, Buttons.Type.Outline_Primary) {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit(AjaxRequestTarget target) {
Room r = RoomForm.this.getModelObject();
if (r.getFiles() == null) {
r.setFiles(new ArrayList<>());
}
for (BaseFileItem f : files2add.getObject()) {
r.getFiles().add(new RoomFile(r.getId(), f, wbIdx.getObject()));
}
target.add(filesContainer, filesForm);
}
}).setOutputMarkupId(true)
);
add(filesContainer.add(new ListView<RoomFile>("files") {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem<RoomFile> item) {
final RoomFile rf = item.getModelObject();
BootstrapAjaxLink<String> del = new BootstrapAjaxLink<>("delete", Buttons.Type.Outline_Danger) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
Room r = RoomForm.this.getModelObject();
for (Iterator<RoomFile> iter = r.getFiles().iterator(); iter.hasNext();) {
RoomFile curRf = iter.next();
if (curRf.getFile().getId().equals(rf.getFile().getId())) {
iter.remove();
break;
}
}
target.add(filesContainer);
}
};
del.setIconType(FontAwesome6IconType.xmark_s)
.add(newOkCancelDangerConfirm(this, getString("833")));
item.add(new Label("name", new PropertyModel<>(rf.getFile(), "name")))
.add(new Label("wbIdx", new PropertyModel<>(rf, "wbIdx")))
.add(del);
}
}).setOutputMarkupId(true));
// Users in this Room
add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
add(new TextField<String>("confno").setEnabled(false));
add(pin);
pin.setEnabled(getModelObject().isSipEnabled());
add(new TextField<String>("ownerId").setEnabled(false));
add(new AjaxCheckBox("sipEnabled") {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
updateView(target);
}
}.setOutputMarkupId(true));
}