Skip to content
Snippets Groups Projects
Commit 1065932e authored by uhensler's avatar uhensler
Browse files

OO-4531, OO-4532: Cancel rubric changes, order new rubric sliders

parent 6ff3070d
No related branches found
No related tags found
No related merge requests found
...@@ -24,13 +24,11 @@ import static org.olat.modules.forms.ui.EvaluationFormFormatter.oneDecimal; ...@@ -24,13 +24,11 @@ import static org.olat.modules.forms.ui.EvaluationFormFormatter.oneDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.form.flexible.FormItem; 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.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.FormLink; import org.olat.core.gui.components.form.flexible.elements.FormLink;
...@@ -44,12 +42,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; ...@@ -44,12 +42,7 @@ 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.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.components.form.flexible.impl.elements.richText.TextMode; import org.olat.core.gui.components.form.flexible.impl.elements.richText.TextMode;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.updown.UpDown;
import org.olat.core.gui.components.updown.UpDownEvent;
import org.olat.core.gui.components.updown.UpDownEvent.Direction;
import org.olat.core.gui.components.updown.UpDownFactory;
import org.olat.core.gui.control.Controller; 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.WindowControl;
import org.olat.core.util.CodeHelper; import org.olat.core.util.CodeHelper;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
...@@ -143,7 +136,9 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -143,7 +136,9 @@ public class RubricEditorController extends FormBasicController implements PageE
rubricCtrl = new RubricController(ureq, getWindowControl(), rubric, mainForm); rubricCtrl = new RubricController(ureq, getWindowControl(), rubric, mainForm);
listenTo(rubricCtrl); listenTo(rubricCtrl);
formLayout.add("rubric", rubricCtrl.getInitialFormItem()); formLayout.add("rubric", rubricCtrl.getInitialFormItem());
}
private void initEditForm(FormItemContainer formLayout) {
settingsLayout = FormLayoutContainer.createDefaultFormLayout("settings", getTranslator()); settingsLayout = FormLayoutContainer.createDefaultFormLayout("settings", getTranslator());
settingsLayout.setRootForm(mainForm); settingsLayout.setRootForm(mainForm);
formLayout.add("settings", settingsLayout); formLayout.add("settings", settingsLayout);
...@@ -310,6 +305,7 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -310,6 +305,7 @@ public class RubricEditorController extends FormBasicController implements PageE
updateTypeSettings(); updateTypeSettings();
updateSteps(); updateSteps();
sliders.clear();
for(Slider slider:rubric.getSliders()) { for(Slider slider:rubric.getSliders()) {
SliderRow row = forgeSliderRow(slider); SliderRow row = forgeSliderRow(slider);
sliders.add(row); sliders.add(row);
...@@ -500,7 +496,21 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -500,7 +496,21 @@ public class RubricEditorController extends FormBasicController implements PageE
weightEl.setEnabled(!restrictedEditWeight); weightEl.setEnabled(!restrictedEditWeight);
SliderRow row = new SliderRow(slider, startLabelEl, endLabelEl, weightEl, createSliderEl()); SliderRow row = new SliderRow(slider, startLabelEl, endLabelEl, weightEl, createSliderEl());
if(!restrictedEdit) {FormLink deleteButton = uifactory.addFormLink("del." + count.incrementAndGet(), "delete_slider", "", null, flc, Link.BUTTON | Link.NONTRANSLATED);
FormLink upButton = uifactory.addFormLink("up." + count.incrementAndGet(), "up", "", null, flc, Link.BUTTON | Link.NONTRANSLATED);
upButton.setDomReplacementWrapperRequired(false);
upButton.setIconLeftCSS("o_icon o_icon-lg o_icon_move_up");
upButton.setUserObject(row);
row.setUpButton(upButton);
FormLink downButton = uifactory.addFormLink("down." + count.incrementAndGet(), "down", "", null, flc, Link.BUTTON | Link.NONTRANSLATED);
downButton.setDomReplacementWrapperRequired(false);
downButton.setIconLeftCSS("o_icon o_icon-lg o_icon_move_down");
downButton.setUserObject(row);
row.setDownButton(downButton);
if(!restrictedEdit) {
FormLink deleteButton = uifactory.addFormLink("del." + count.incrementAndGet(), "delete_slider", "", null, flc, Link.BUTTON | Link.NONTRANSLATED);
deleteButton.setDomReplacementWrapperRequired(false); deleteButton.setDomReplacementWrapperRequired(false);
deleteButton.setIconLeftCSS("o_icon o_icon-lg o_icon_delete_item"); deleteButton.setIconLeftCSS("o_icon o_icon-lg o_icon_delete_item");
deleteButton.setUserObject(row); deleteButton.setUserObject(row);
...@@ -508,12 +518,6 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -508,12 +518,6 @@ public class RubricEditorController extends FormBasicController implements PageE
flc.contextPut("deleteButtons", Boolean.TRUE); flc.contextPut("deleteButtons", Boolean.TRUE);
} }
String name = "ud." + count.incrementAndGet();
UpDown upDown = UpDownFactory.createUpDown(name, UpDown.Layout.BUTTON_HORIZONTAL, flc.getFormItemComponent(), this);
upDown.setUserObject(row);
row.setUpDown(upDown);
flc.put(name, upDown);
return row; return row;
} }
...@@ -581,6 +585,9 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -581,6 +585,9 @@ public class RubricEditorController extends FormBasicController implements PageE
@Override @Override
public void setEditMode(boolean editMode) { public void setEditMode(boolean editMode) {
this.editMode = editMode; this.editMode = editMode;
if (editMode) {
initEditForm(flc);
}
flc.getFormItemComponent().contextPut("editMode", Boolean.valueOf(editMode)); flc.getFormItemComponent().contextPut("editMode", Boolean.valueOf(editMode));
} }
...@@ -615,43 +622,37 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -615,43 +622,37 @@ public class RubricEditorController extends FormBasicController implements PageE
} }
} else if(source instanceof FormLink) { } else if(source instanceof FormLink) {
FormLink button = (FormLink)source; FormLink button = (FormLink)source;
if("delete_slider".equals(button.getCmd())) { if ("up".equals(button.getCmd())) {
doMoveUp((SliderRow)button.getUserObject());
} else if ("down".equals(button.getCmd())) {
doMoveDown((SliderRow)button.getUserObject());
} else if ("delete_slider".equals(button.getCmd())) {
doRemoveSlider((SliderRow)button.getUserObject()); doRemoveSlider((SliderRow)button.getUserObject());
} }
} }
super.formInnerEvent(ureq, source, event); super.formInnerEvent(ureq, source, event);
} }
@Override private void doMoveUp(SliderRow slideRow) {
public void event(UserRequest ureq, Component source, Event event) { int index = sliders.indexOf(slideRow);
if (event instanceof UpDownEvent) { if (index > -1) {
UpDownEvent ude = (UpDownEvent) event; swapSliders(index - 1, index);
SliderRow row = (SliderRow) ude.getUserObject(); setUpDownVisibility();
doMove(row.getSlider(), ude.getDirection()); flc.setDirty(true);
} }
super.event(ureq, source, event);
} }
private void doMove(Slider slider, Direction direction) { private void doMoveDown(SliderRow slideRow) {
int index = rubric.getSliders().indexOf(slider); int index = sliders.indexOf(slideRow);
if (index > -1) { if (index > -1) {
if (Direction.UP.equals(direction)) { swapSliders(index, index + 1);
swapSliders(index - 1, index);
} else if (Direction.DOWN.equals(direction)) {
swapSliders(index, index + 1);
}
setUpDownVisibility(); setUpDownVisibility();
flc.setDirty(true); flc.setDirty(true);
} }
} }
private void swapSliders(int i, int j) { private void swapSliders(int i, int j) {
List<Slider> rubricSliders = rubric.getSliders(); if(i >= 0 && j >= 0 && i < sliders.size() && j < sliders.size()) {
if(i >= 0 && j >= 0 && i < rubricSliders.size() && j < rubricSliders.size()) {
Slider tempRubricSlider = rubricSliders.get(i);
rubricSliders.set(i, rubricSliders.get(j));
rubricSliders.set(j, tempRubricSlider);
SliderRow tempSlider = sliders.get(i); SliderRow tempSlider = sliders.get(i);
sliders.set(i, sliders.get(j)); sliders.set(i, sliders.get(j));
sliders.set(j, tempSlider); sliders.set(j, tempSlider);
...@@ -661,7 +662,6 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -661,7 +662,6 @@ public class RubricEditorController extends FormBasicController implements PageE
private void doRemoveSlider(SliderRow row) { private void doRemoveSlider(SliderRow row) {
updateSteps(); updateSteps();
sliders.remove(row); sliders.remove(row);
rubric.getSliders().remove(row.getSlider());
setUpDownVisibility(); setUpDownVisibility();
flc.setDirty(true); flc.setDirty(true);
} }
...@@ -669,7 +669,6 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -669,7 +669,6 @@ public class RubricEditorController extends FormBasicController implements PageE
private void doAddSlider() { private void doAddSlider() {
Slider slider = new Slider(); Slider slider = new Slider();
slider.setId(UUID.randomUUID().toString()); slider.setId(UUID.randomUUID().toString());
rubric.getSliders().add(slider);
SliderRow row = forgeSliderRow(slider); SliderRow row = forgeSliderRow(slider);
sliders.add(row); sliders.add(row);
setUpDownVisibility(); setUpDownVisibility();
...@@ -679,14 +678,13 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -679,14 +678,13 @@ public class RubricEditorController extends FormBasicController implements PageE
private void setUpDownVisibility() { private void setUpDownVisibility() {
for (int i = 0; i < sliders.size(); i++) { for (int i = 0; i < sliders.size(); i++) {
SliderRow sliderRow = sliders.get(i); SliderRow sliderRow = sliders.get(i);
UpDown upDown = sliderRow.getUpDown(); sliderRow.getUpButton().setEnabled(true);
upDown.setTopmost(false); sliderRow.getDownButton().setEnabled(true);
upDown.setLowermost(false);
if (i == 0) { if (i == 0) {
upDown.setTopmost(true); sliderRow.getUpButton().setEnabled(false);
} }
if (i == sliders.size() -1) { if (i == sliders.size() -1) {
upDown.setLowermost(true); sliderRow.getDownButton().setEnabled(false);
} }
} }
} }
...@@ -877,15 +875,6 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -877,15 +875,6 @@ public class RubricEditorController extends FormBasicController implements PageE
ScaleType scaleType = ScaleType.getEnum(selectedScaleTypeKey); ScaleType scaleType = ScaleType.getEnum(selectedScaleTypeKey);
rubric.setScaleType(scaleType); rubric.setScaleType(scaleType);
for(Iterator<Slider> sliderIt=rubric.getSliders().iterator(); sliderIt.hasNext(); ) {
Slider slider = sliderIt.next();
if(!StringHelper.containsNonWhitespace(slider.getStartLabel()) && !StringHelper.containsNonWhitespace(slider.getEndLabel())) {
sliderIt.remove();
sliders.removeIf(row -> row.getSlider().equals(slider));
flc.setDirty(true);
}
}
boolean noResonse = noAnswerEl.isAtLeastSelected(1); boolean noResonse = noAnswerEl.isAtLeastSelected(1);
rubric.setNoResponseEnabled(noResonse); rubric.setNoResponseEnabled(noResonse);
...@@ -975,6 +964,7 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -975,6 +964,7 @@ public class RubricEditorController extends FormBasicController implements PageE
} }
private void commitFields() { private void commitFields() {
List<Slider> editedSliders = new ArrayList<>(sliders.size());
for(SliderRow row:sliders) { for(SliderRow row:sliders) {
String start = row.getStartLabelEl().getValue(); String start = row.getStartLabelEl().getValue();
if(StringHelper.containsNonWhitespace(start)) { if(StringHelper.containsNonWhitespace(start)) {
...@@ -993,7 +983,11 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -993,7 +983,11 @@ public class RubricEditorController extends FormBasicController implements PageE
Integer weight = getIntOrNull(row.getWeightEl()); Integer weight = getIntOrNull(row.getWeightEl());
row.getSlider().setWeight(weight); row.getSlider().setWeight(weight);
if (row.getSlider().getStartLabel() != null || row.getSlider().getEndLabel() != null) {
editedSliders.add(row.getSlider());
}
} }
rubric.setSliders(editedSliders);
} }
private Integer getIntOrNull(TextElement weightEl) { private Integer getIntOrNull(TextElement weightEl) {
...@@ -1035,8 +1029,9 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -1035,8 +1029,9 @@ public class RubricEditorController extends FormBasicController implements PageE
private final TextElement startLabelEl; private final TextElement startLabelEl;
private final TextElement endLabelEl; private final TextElement endLabelEl;
private final TextElement weightEl; private final TextElement weightEl;
private FormLink upButton;
private FormLink downButton;
private FormLink deleteButton; private FormLink deleteButton;
private UpDown upDown;
private FormItem sliderEl; private FormItem sliderEl;
private final Slider slider; private final Slider slider;
...@@ -1073,12 +1068,20 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -1073,12 +1068,20 @@ public class RubricEditorController extends FormBasicController implements PageE
this.deleteButton = deleteButton; this.deleteButton = deleteButton;
} }
public UpDown getUpDown() { public FormLink getUpButton() {
return upDown; return upButton;
}
public void setUpButton(FormLink upButton) {
this.upButton = upButton;
} }
void setUpDown(UpDown upDown) { public FormLink getDownButton() {
this.upDown = upDown; return downButton;
}
public void setDownButton(FormLink downButton) {
this.downButton = downButton;
} }
public FormItem getSliderEl() { public FormItem getSliderEl() {
...@@ -1102,6 +1105,38 @@ public class RubricEditorController extends FormBasicController implements PageE ...@@ -1102,6 +1105,38 @@ public class RubricEditorController extends FormBasicController implements PageE
} }
return ""; return "";
} }
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + ((slider == null) ? 0 : slider.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
SliderRow other = (SliderRow) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (slider == null) {
if (other.slider != null)
return false;
} else if (!slider.equals(other.slider))
return false;
return true;
}
private RubricEditorController getOuterType() {
return RubricEditorController.this;
}
} }
......
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
$r.render("${slider.weightEl.getComponent().getComponentName()}_EXAMPLE") $r.render("${slider.weightEl.getComponent().getComponentName()}_EXAMPLE")
$r.render($slider.weightEl) $r.render($slider.weightEl)
<div> <div>
$r.render($slider.upDown) <div class='btn-group o_updown'>$r.render($slider.upButton)$r.render($slider.downButton)</div>
#if($r.isNotNull($slider.deleteButton) && $r.visible($slider.deleteButton)) #if($r.isNotNull($slider.deleteButton) && $r.visible($slider.deleteButton))
$r.render($slider.deleteButton) $r.render($slider.deleteButton)
#end #end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment