/** * <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> * 12.10.2011 by frentix GmbH, http://www.frentix.com * <p> */ package org.olat.modules.openmeetings.ui; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.TextElement; 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.id.OLATResourceable; import org.olat.core.util.StringHelper; import org.olat.group.BusinessGroup; import org.olat.modules.openmeetings.manager.OpenMeetingsException; import org.olat.modules.openmeetings.manager.OpenMeetingsManager; import org.olat.modules.openmeetings.model.OpenMeetingsRoom; import org.olat.modules.openmeetings.model.RoomType; /** * * Initial date: 06.11.2012<br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * */ public class OpenMeetingsRoomEditController extends FormBasicController { private TextElement roomNameEl; private SingleSelection roomTypeEl; private SingleSelection roomSizeEl; private SingleSelection avModeEl; private SingleSelection moderationModeEl; private TextElement commentEl; private final String[] roomTypeKeys; private final String[] roomSizes; private final String[] moderationModeKeys; private final String[] avModeKeys; private final BusinessGroup group; private final OLATResourceable ores; private final String subIdentifier; private OpenMeetingsRoom room; private OpenMeetingsRoom defaultSettings; private final OpenMeetingsManager openMeetingsManager; private long[] sizes = {2, 4, 6, 8, 10, 12, 14, 16, 25, 50, 100, 150, 200, 1000}; public OpenMeetingsRoomEditController(UserRequest ureq, WindowControl wControl, BusinessGroup group, OLATResourceable ores, String subIdentifier, OpenMeetingsRoom defaultSettings) { super(ureq, wControl); this.group = group; this.ores = ores; this.subIdentifier = subIdentifier; this.defaultSettings = defaultSettings; this.setFormContextHelp("Communication and Collaboration#_openmeeting_raum"); roomTypeKeys = new String[]{ RoomType.conference.typeStr(), RoomType.restricted.typeStr(), RoomType.interview.typeStr() }; moderationModeKeys = new String[]{"yes", "no"}; avModeKeys = new String[]{"audio", "video"}; openMeetingsManager = CoreSpringFactory.getImpl(OpenMeetingsManager.class); try { room = openMeetingsManager.getRoom(group, ores, subIdentifier); } catch (OpenMeetingsException e) { showError(e.i18nKey()); } if(room != null && !isLegalSize(room.getSize())) { roomSizes = toStringSizes(room.getSize()); } else { roomSizes = toStringSizes(); } initForm(ureq); } private String[] toStringSizes(long... addSizes) { List<Long> endSizes = new ArrayList<Long>(sizes.length + 2); for(long size:sizes) { endSizes.add(new Long(size)); } if(addSizes != null && addSizes.length > 0) { for(long size:addSizes) { endSizes.add(new Long(size)); } } Collections.sort(endSizes); String[] stringuifiedSizes = new String[endSizes.size()]; int count = 0; for(Long endSize:endSizes) { stringuifiedSizes[count++] = endSize.toString(); } return stringuifiedSizes; } private boolean isLegalSize(long roomSize) { for(long size:sizes) { if(size == roomSize) { return true; } } return false; } public OpenMeetingsRoom getRoom() { return room; } @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { setFormContextHelp("Communication and Collaboration#CommunicationandCollaboration-_openmeeting_raum"); String name = room == null ? (defaultSettings == null ? null : defaultSettings.getName()) : room.getName(); roomNameEl = uifactory.addTextElement("roomname", "room.name", 255, name == null ? "" : name, formLayout); String[] roomTypeValues = new String[]{ translate(RoomType.conference.i18nKey()), translate(RoomType.restricted.i18nKey()), translate(RoomType.interview.i18nKey()) }; roomTypeEl = uifactory.addDropdownSingleselect("roomtype", "room.type", formLayout, roomTypeKeys, roomTypeValues, null); if(room != null) { String type = Long.toString(room.getType()); roomTypeEl.select(type, true); } else if(defaultSettings != null && defaultSettings.getType() > 0) { String type = Long.toString(defaultSettings.getType()); roomTypeEl.select(type, true); } roomSizeEl = uifactory.addDropdownSingleselect("roomsize", "room.size", formLayout, roomSizes, roomSizes, null); if(room != null) { String size = Long.toString(room.getSize()); roomSizeEl.select(size, true); } else if(defaultSettings != null && defaultSettings.getSize() > 0) { String size = Long.toString(defaultSettings.getSize()); roomSizeEl.select(size, true); } String[] moderationModeValues = new String[]{ translate("room.moderation.yes"), translate("room.moderation.no") }; moderationModeEl = uifactory.addDropdownSingleselect("moderationmode", "room.moderation.mode", formLayout, moderationModeKeys, moderationModeValues, null); if(room != null) { String key = room.isModerated() ? moderationModeKeys[0] : moderationModeKeys[1]; moderationModeEl.select(key, true); } else if(defaultSettings != null) { String key = defaultSettings.isModerated() ? moderationModeKeys[0] : moderationModeKeys[1]; moderationModeEl.select(key, true); } String[] avModeValues = new String[]{ translate("room.av.audio"), translate("room.av.video") }; avModeEl = uifactory.addDropdownSingleselect("avmode", "room.av.mode", formLayout, avModeKeys, avModeValues, null); if(room != null) { String key = room.isAudioOnly() ? avModeKeys[0] : avModeKeys[1]; avModeEl.select(key, true); } else if(defaultSettings != null) { String key = defaultSettings.isAudioOnly() ? avModeKeys[0] : avModeKeys[1]; avModeEl.select(key, true); } String comment = room == null ? (defaultSettings == null ? null : defaultSettings.getComment()) : room.getComment(); commentEl = uifactory.addRichTextElementForStringData("roomcomment", "room.comment", comment == null ? "" : comment, 10, -1, false, null, null, formLayout, ureq.getUserSession(), getWindowControl()); FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); formLayout.add(buttonContainer); uifactory.addFormSubmitButton("save", "save", buttonContainer); uifactory.addFormCancelButton("cancel", buttonContainer, ureq, getWindowControl()); } @Override protected void doDispose() { // } @Override protected void formOK(UserRequest ureq) { if(room == null) { room = new OpenMeetingsRoom(); } room.setComment(commentEl.getValue()); room.setModerated(moderationModeEl.isOneSelected() && moderationModeEl.isSelected(0)); room.setName(roomNameEl.getValue()); if(roomSizeEl.isOneSelected()) { String key = roomSizeEl.getSelectedKey(); if(StringHelper.isLong(key)) { room.setSize(Long.parseLong(key)); } else { room.setSize(16l); } } room.setAudioOnly(avModeEl.isOneSelected() && avModeEl.isSelected(0)); if(roomTypeEl.isOneSelected()) { String type = roomTypeEl.getSelectedKey(); long roomType = Long.parseLong(type); room.setType(roomType); } if(room.getRoomId() > 0) { room = openMeetingsManager.updateRoom(group, ores, subIdentifier, room); fireEvent(ureq, Event.CHANGED_EVENT); } else { room = openMeetingsManager.addRoom(group, ores, subIdentifier, room); fireEvent(ureq, Event.DONE_EVENT); } } @Override protected void formCancelled(UserRequest ureq) { fireEvent(ureq, Event.CANCELLED_EVENT); } }