/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.commons.memberlist.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.translator.Translator;
import org.olat.course.nodes.members.Member;
/**
*
* Initial date: 22.12.2015<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
* @author fkiefer
*/
public class SelectMembersController extends FormBasicController {
private MultipleSelectionElement ownerEl, coachEl, participantEl, waitingEl;
private final List<Member> ownerList, coachList, participantList, waitingList, preSelectedMembers;
private List<Member> selectedMembers = new ArrayList<>();
public SelectMembersController(UserRequest ureq, WindowControl wControl, Translator translator,
List<Member> preSelectedMembers, List<Member> ownerList, List<Member> coachList, List<Member> participantList, List<Member> waitingList) {
super(ureq, wControl, LAYOUT_VERTICAL);
setTranslator(translator);
this.ownerList = ownerList;
this.coachList = coachList;
this.participantList = participantList;
this.waitingList = waitingList;
this.preSelectedMembers = preSelectedMembers;
initForm(ureq);
}
public List<Member> getSelectedMembers() {
return selectedMembers;
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
if(ownerList != null && ownerList.size() > 0) {
ownerEl = makeSelection("members.owners", ownerList, formLayout);
}
if(coachList != null && coachList.size() > 0) {
coachEl = makeSelection("members.coaches", coachList, formLayout);
}
if(participantList != null && participantList.size() > 0) {
participantEl = makeSelection("members.participants", participantList, formLayout);
}
if(waitingList != null && waitingList.size() > 0) {
waitingEl = makeSelection("members.waiting", waitingList, formLayout);
}
FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttonGroupLayout", getTranslator());
formLayout.add(buttonGroupLayout);
uifactory.addFormSubmitButton("select", buttonGroupLayout);
uifactory.addFormCancelButton("cancel", buttonGroupLayout, ureq, getWindowControl());
}
private MultipleSelectionElement makeSelection(String name, List<Member> members, FormItemContainer formLayout) {
String[] keys = new String[members.size()];
String[] values = new String[members.size()];
List<String> preSelectedOptions = new ArrayList<>();
for(int i=members.size(); i-->0; ) {
Member member = members.get(i);
String optionKey = member.getKey().toString();
keys[i] = optionKey;
values[i] = member.getFullName();
if(preSelectedMembers.contains(member)) {
preSelectedOptions.add(optionKey);
}
}
MultipleSelectionElement selectionEl = uifactory.addCheckboxesVertical(name, name, formLayout, keys, values, 2);
for(String preSelectedOption:preSelectedOptions) {
selectionEl.select(preSelectedOption, true);
}
return selectionEl;
}
@Override
protected void doDispose() {
//
}
@Override
protected void formOK(UserRequest ureq) {
selectedMembers.clear();
selectMembers(ownerEl, ownerList);
selectMembers(coachEl, coachList);
selectMembers(participantEl, participantList);
selectMembers(waitingEl, waitingList);
fireEvent(ureq, Event.DONE_EVENT);
}
private void selectMembers(MultipleSelectionElement memberEl, List<Member> members) {
if(memberEl != null && memberEl.isAtLeastSelected(1)) {
Collection<String> selectedKeys = memberEl.getSelectedKeys();
for(Member member:members) {
if(selectedKeys.contains(member.getKey().toString())) {
selectedMembers.add(member);
}
}
}
}
@Override
protected void formCancelled(UserRequest ureq) {
fireEvent(ureq, Event.CANCELLED_EVENT);
}
}