/**
* <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.course.nodes.openmeetings;
import org.olat.core.CoreSpringFactory;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.FormLink;
import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormEvent;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.components.link.Link;
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.control.generic.closablewrapper.CloseableModalController;
import org.olat.core.id.OLATResourceable;
import org.olat.core.util.StringHelper;
import org.olat.core.util.Util;
import org.olat.course.nodes.OpenMeetingsCourseNode;
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;
import org.olat.modules.openmeetings.ui.OpenMeetingsRoomEditController;
/**
*
* Initial date: 08.11.2012<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/
public class OpenMeetingsEditFormController extends FormBasicController {
private FormLink editLink;
private StaticTextElement roomNameEl, roomTypeEl, roomSizeEl;
private StaticTextElement moderationModeEl, roomCommentEl;
private StaticTextElement avModeEl;
private CloseableModalController cmc;
private OpenMeetingsRoomEditController editController;
private final OLATResourceable course;
private final OpenMeetingsCourseNode courseNode;
private final OpenMeetingsManager openMeetingsManager;
private boolean serverDown = false;
private String errorKey;
private OpenMeetingsRoom room;
private OpenMeetingsRoom defaultSettings;
public OpenMeetingsEditFormController(UserRequest ureq, WindowControl wControl, OLATResourceable course,
OpenMeetingsCourseNode courseNode, OpenMeetingsRoom defaultSettings) {
super(ureq, wControl, null, Util.createPackageTranslator(OpenMeetingsRoomEditController.class, ureq.getLocale()));
this.course = course;
this.courseNode = courseNode;
this.defaultSettings = defaultSettings;
if(defaultSettings != null) {
defaultSettings.setName(courseNode.getShortTitle());
}
openMeetingsManager = CoreSpringFactory.getImpl(OpenMeetingsManager.class);
try {
room = openMeetingsManager.getRoom(null, course, courseNode.getIdent());
} catch (OpenMeetingsException e) {
room = openMeetingsManager.getLocalRoom(null, course, courseNode.getIdent());
serverDown = true;
errorKey = e.i18nKey();
}
initForm(ureq);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormTitle("pane.tab.vcconfig");
setFormDescription("create.room.desc");
setFormContextHelp("Communication and Collaboration#_openmeeting");
if(serverDown) {
setFormWarning(errorKey);
}
roomNameEl = uifactory.addStaticTextElement("room.name", "room.name", "", formLayout);
roomTypeEl = uifactory.addStaticTextElement("room.type", "room.type", "", formLayout);
roomSizeEl = uifactory.addStaticTextElement("room.size", "room.size", "", formLayout);
moderationModeEl = uifactory.addStaticTextElement("mod", "room.moderation.mode", "", formLayout);
avModeEl = uifactory.addStaticTextElement("avmode", "room.av.mode", "", formLayout);
roomCommentEl = uifactory.addStaticTextElement("room.comment", "room.comment", "", formLayout);
FormLayoutContainer buttonContainer = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
formLayout.add(buttonContainer);
editLink = uifactory.addFormLink("create.room", buttonContainer, Link.BUTTON);
updateUI();
}
public OpenMeetingsRoom getRoom() {
return room;
}
private void updateUI() {
boolean hasRoom = room != null;
setFormDescription(hasRoom ? null : "create.room.desc");
roomNameEl.setValue(hasRoom ? StringHelper.escapeHtml(room.getName()) : "");
roomNameEl.setVisible(hasRoom);
if(hasRoom) {
String typeStr = translate(RoomType.getType(room.getType()).i18nKey());
roomTypeEl.setValue(typeStr);
} else {
roomTypeEl.setValue("");
}
roomTypeEl.setVisible(hasRoom);
roomSizeEl.setValue(hasRoom ? Long.toString(room.getSize()) : "");
roomSizeEl.setVisible(hasRoom);
String modVal;
if(hasRoom) {
modVal = room.isModerated() ? translate("room.moderation.yes") : translate("room.moderation.no");
} else {
modVal = "";
}
moderationModeEl.setValue(modVal);
moderationModeEl.setVisible(hasRoom);
String avVal;
if(hasRoom) {
avVal = room.isAudioOnly() ? translate("room.av.audio") : translate("room.av.video");
} else {
avVal = "";
}
avModeEl.setValue(avVal);
avModeEl.setVisible(hasRoom);
roomCommentEl.setValue(hasRoom ? room.getComment() : "");
roomCommentEl.setVisible(hasRoom);
editLink.setI18nKey(hasRoom ? "edit.room" : "create.room");
editLink.setEnabled(!serverDown);
}
@Override
protected void doDispose() {
//
}
@Override
protected void event(UserRequest ureq, Controller source, Event event) {
if(source == cmc) {
cleanupPopups();
} else if(source == editController) {
if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
room = editController.getRoom();
updateUI();
fireEvent(ureq, event);
}
cmc.deactivate();
cleanupPopups();
}
super.event(ureq, source, event);
}
private void cleanupPopups() {
this.removeAsListenerAndDispose(cmc);
this.removeAsListenerAndDispose(editController);
cmc = null;
editController = null;
}
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if(source == editLink) {
doEditRoom(ureq);
} else {
super.formInnerEvent(ureq, source, event);
}
}
@Override
protected void formOK(UserRequest ureq) {
//
}
protected void doEditRoom(UserRequest ureq) {
try {
cleanupPopups();
editController = new OpenMeetingsRoomEditController(ureq, getWindowControl(), null, course, courseNode.getIdent(), defaultSettings);
listenTo(editController);
cmc = new CloseableModalController(getWindowControl(), translate("close"), editController.getInitialComponent(), true, translate("edit.room"));
listenTo(cmc);
cmc.activate();
} catch (Exception e) {
showError(OpenMeetingsException.SERVER_NOT_I18N_KEY);
}
}
}