/**
* <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.course.nodes.cl.ui.wizard;
import java.util.ArrayList;
import java.util.Date;
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.DateChooser;
import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.Form;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
import org.olat.core.gui.control.generic.wizard.StepsEvent;
import org.olat.core.gui.control.generic.wizard.StepsRunContext;
import org.olat.core.util.StringHelper;
import org.olat.core.util.Util;
import org.olat.course.nodes.cl.ui.CheckListEditController;
/**
*
* Initial date: 13.02.2014<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class MetadatasStepController extends StepFormBasicController {
private int numOfChecklist;
private final GeneratorData data;
private List<DueDateWrapper> wrappers;
public MetadatasStepController(UserRequest ureq, WindowControl wControl, Form rootForm, StepsRunContext runContext) {
super(ureq, wControl, rootForm, runContext, LAYOUT_CUSTOM, "metadatas_config");
setTranslator(Util.createPackageTranslator(CheckListEditController.class, getLocale(), getTranslator()));
data = (GeneratorData)getFromRunContext("data");
numOfChecklist = data.getNumOfNodes();
initForm(ureq);
}
@Override
protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
setFormTitle("metadatas.details");
setFormDescription("metadatas.details.description");
if(formLayout instanceof FormLayoutContainer) {
FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
wrappers = new ArrayList<DueDateWrapper>();
for(int i=0;i<numOfChecklist;i++) {
wrappers.add(forgeRow(i, layoutCont));
}
layoutCont.contextPut("duedates", wrappers);
}
}
private DueDateWrapper forgeRow(int i, FormLayoutContainer tableCont) {
String title = data.getNodePrefix() + " " + (i+1);
TextElement titleEl = uifactory.addTextElement("title_" + i, null, 32, title, tableCont);
titleEl.setDisplaySize(21);
DateChooser dueDateEl = uifactory.addDateChooser("duedate_" + i, "config.due.date", null, tableCont);
dueDateEl.setDateChooserTimeEnabled(true);
DueDateWrapper wrapper = new DueDateWrapper(titleEl, dueDateEl);
return wrapper;
}
@Override
protected void doDispose() {
//
}
@Override
protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = true;
for(DueDateWrapper wrapper:wrappers) {
TextElement titleEl = wrapper.getTitleEl();
titleEl.clearError();
if(!StringHelper.containsNonWhitespace(titleEl.getValue())) {
titleEl.setErrorKey("form.legende.mandatory", null);
allOk &= false;
}
}
return allOk &= super.validateFormLogic(ureq);
}
@Override
protected void formOK(UserRequest ureq) {
List<CheckListNode> nodes = new ArrayList<>(wrappers.size());
for(DueDateWrapper wrapper:wrappers) {
nodes.add(wrapper.getNodeInfos());
}
data.setNodes(nodes);
fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
}
public static final class DueDateWrapper {
private final TextElement titleEl;
private final DateChooser dueDateEl;
private final CheckListNode checkListNode;
public DueDateWrapper(TextElement titleEl, DateChooser dueDateEl) {
this.titleEl = titleEl;
this.dueDateEl = dueDateEl;
checkListNode = new CheckListNode();
}
public CheckListNode getNodeInfos() {
checkListNode.setTitle(getTitle());
checkListNode.setDueDate(getDueDate());
return checkListNode;
}
public Date getDueDate() {
return dueDateEl.getDate();
}
public String getDueDateName() {
return dueDateEl.getComponent().getComponentName();
}
public String getTitle() {
return titleEl.getValue();
}
public TextElement getTitleEl() {
return titleEl;
}
public String getTitleName() {
return titleEl.getName();
}
}
}