diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java index 4d1e27843d31de716cb6f9415b28e5fad39ed035..34eee9b60d42452c461385601a2c26c8e2f5e298 100644 --- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java +++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java @@ -169,6 +169,9 @@ public enum TextMode { public String getText() { StringBuilder content = new StringBuilder(1024); + if(sb.length() > 0) { + content.append(sb); + } for(String line:lines) { line = line.trim(); if(StringHelper.containsNonWhitespace(line)) { diff --git a/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java b/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java index efd64c066766527a267b9b403a2b6869750b5bf2..e4f5957210cb79eb465ad444051b2af81e924c2a 100644 --- a/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java +++ b/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java @@ -37,7 +37,6 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.wizard.Step; import org.olat.core.gui.control.generic.wizard.StepRunnerCallback; import org.olat.core.gui.control.generic.wizard.StepsMainRunController; -import org.olat.core.gui.control.generic.wizard.StepsRunContext; import org.olat.course.assessment.manager.BulkAssessmentTask; import org.olat.course.assessment.model.BulkAssessmentDatas; import org.olat.course.assessment.model.BulkAssessmentFeedback; @@ -94,6 +93,9 @@ public class BulkAssessmentToolController extends BasicController { bulkAssessmentCtrl = null; if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { doBulkAssessmentSynchronous(ureq, feedback); + fireEvent(ureq, Event.CHANGED_EVENT); + } else { + fireEvent(ureq, Event.DONE_EVENT); } } } @@ -101,15 +103,12 @@ public class BulkAssessmentToolController extends BasicController { } private void doOpen(UserRequest ureq) { - StepRunnerCallback finish = new StepRunnerCallback() { - @Override - public Step execute(UserRequest uureq, WindowControl bwControl, StepsRunContext runContext) { - Date scheduledDate = (Date)runContext.get("scheduledDate"); - BulkAssessmentDatas datas = (BulkAssessmentDatas)runContext.get("datas"); - Feedback feedback = doBulkAssessment(scheduledDate, datas); - runContext.put("feedback", feedback); - return StepsMainRunController.DONE_MODIFIED; - } + StepRunnerCallback finish = (uureq, bwControl, runContext) -> { + Date scheduledDate = (Date)runContext.get("scheduledDate"); + BulkAssessmentDatas datas = (BulkAssessmentDatas)runContext.get("datas"); + Feedback feedback = doBulkAssessment(scheduledDate, datas); + runContext.put("feedback", feedback); + return StepsMainRunController.DONE_MODIFIED; }; Step start = new BulkAssessment_2_DatasStep(ureq, courseNode); diff --git a/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java b/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java index 8ca3fc47f1fe82104a9dc366a1ac509234f6a6a2..b4fb25da24225ec9f94e595de2431358faeb65d4 100644 --- a/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java +++ b/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java @@ -40,6 +40,7 @@ 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.filter.FilterFactory; import org.olat.course.assessment.model.BulkAssessmentColumnSettings; import org.olat.course.assessment.model.BulkAssessmentDatas; import org.olat.course.assessment.model.BulkAssessmentRow; @@ -55,9 +56,15 @@ import org.olat.course.nodes.AssessableCourseNode; public class ChooseColumnsStepForm extends StepFormBasicController { private int numOfColumns; - private SingleSelection userNameColumnEl, scoreColumnEl, passedColumnEl, commentColumnEl; + private SingleSelection scoreColumnEl; + private SingleSelection passedColumnEl; + private SingleSelection commentColumnEl; + private SingleSelection userNameColumnEl; private final OverviewDataModel overviewDataModel; private final BulkAssessmentColumnSettings columnsSettings; + + private final String translatedPassed; + private final String translatedFailed; public ChooseColumnsStepForm(UserRequest ureq, WindowControl wControl, BulkAssessmentColumnSettings columnsSettings, StepsRunContext runContext, Form rootForm) { @@ -67,10 +74,13 @@ public class ChooseColumnsStepForm extends StepFormBasicController { @SuppressWarnings("unchecked") List<String[]> splittedRows = (List<String[]>)getFromRunContext("splittedRows"); - if(splittedRows.size() > 0) { + if(!splittedRows.isEmpty()) { numOfColumns = splittedRows.get(0).length; } + translatedPassed = FilterFactory.getHtmlTagsFilter().filter(translate("passed.true")).trim(); + translatedFailed = FilterFactory.getHtmlTagsFilter().filter(translate("passed.false")).trim(); + overviewDataModel = new OverviewDataModel(splittedRows); initForm(ureq); } @@ -160,15 +170,17 @@ public class ChooseColumnsStepForm extends StepFormBasicController { @Override protected boolean validateFormLogic(UserRequest ureq) { - boolean allOk = true; + boolean allOk = super.validateFormLogic(ureq); - userNameColumnEl.clearError(); - if(userNameColumnEl != null && !userNameColumnEl.isOneSelected()) { - userNameColumnEl.setErrorKey("form.legende.mandatory", null); - allOk &= false; + if(userNameColumnEl != null) { + userNameColumnEl.clearError(); + if(!userNameColumnEl.isOneSelected()) { + userNameColumnEl.setErrorKey("form.legende.mandatory", null); + allOk &= false; + } } - return allOk & super.validateFormLogic(ureq); + return allOk; } @Override @@ -224,7 +236,7 @@ public class ChooseColumnsStepForm extends StepFormBasicController { } String identifyer = values[settings.getUsernameColumn()]; - identifyer.trim(); + identifyer = identifyer.trim(); if (!StringHelper.containsNonWhitespace(identifyer)) { identifyer = "-"; } @@ -258,19 +270,24 @@ public class ChooseColumnsStepForm extends StepFormBasicController { if(valuesLength > settings.getPassedColumn()) { String passedStr = values[settings.getPassedColumn()]; - passedStr= passedStr.trim(); + passedStr = passedStr.trim(); + + + Boolean passed; if ("y".equalsIgnoreCase(passedStr) || "yes".equalsIgnoreCase(passedStr) || "passed".equalsIgnoreCase(passedStr) || "true".equalsIgnoreCase(passedStr) - || "1".equalsIgnoreCase(passedStr)) { + || "1".equalsIgnoreCase(passedStr) + || translatedPassed.equalsIgnoreCase(passedStr)) { passed = Boolean.TRUE; } else if ("n".equalsIgnoreCase(passedStr) || "no".equalsIgnoreCase(passedStr) || "false".equalsIgnoreCase(passedStr) || "failed".equalsIgnoreCase(passedStr) - || "0".equalsIgnoreCase(passedStr)) { + || "0".equalsIgnoreCase(passedStr) + || translatedFailed.equalsIgnoreCase(passedStr)) { passed = Boolean.FALSE; } else { // only set defined values, ignore everything else diff --git a/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java b/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java index cd6dd63c9752b7c17215e49d523a3591d6e9f6c5..88bcd7b095f0acb53b0e86922a74841fd52a7b08 100644 --- a/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java +++ b/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java @@ -24,6 +24,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -125,7 +126,7 @@ public class DataStepForm extends StepFormBasicController { if(savedDatas != null && StringHelper.containsNonWhitespace(savedDatas.getDataBackupFile())) { VFSLeaf file = VFSManager.olatRootLeaf(savedDatas.getDataBackupFile()); try(InputStream in = file.getInputStream()) { - dataVal = IOUtils.toString(in, "UTF-8"); + dataVal = IOUtils.toString(in, StandardCharsets.UTF_8); } catch (IOException e) { logError("", e); } @@ -283,7 +284,7 @@ public class DataStepForm extends StepFormBasicController { } try(OutputStream out = inputFile.getOutputStream(false)) { - IOUtils.write(val, out, "UTF-8"); + IOUtils.write(val, out, StandardCharsets.UTF_8); datas.setDataBackupFile(inputFile.getRelPath()); } catch (IOException e) { logError("", e); diff --git a/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java b/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java index 19c4a400e50f670360609ff9d9f719a69ca04335..848d53c7463196fad95bd9cea04b3cfe0716726a 100644 --- a/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java +++ b/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java @@ -120,21 +120,21 @@ public class ValidationStepForm extends StepFormBasicController { if(datas.getRows() != null) { doValidateRows(datas); } - flc.contextPut("hasNoItems", Boolean.valueOf(datas.getRows() == null || datas.getRows().size() == 0)); + flc.contextPut("hasNoItems", Boolean.valueOf(datas.getRows() == null || datas.getRows().isEmpty())); } private void doValidateRows(BulkAssessmentDatas datas) { List<BulkAssessmentRow> rows = datas.getRows(); - List<String> assessedIdList = new ArrayList<String>(rows.size()); + List<String> assessedIdList = new ArrayList<>(rows.size()); for(BulkAssessmentRow row : rows) { assessedIdList.add(row.getAssessedId()); } Map<String,Identity> idToIdentityMap = loadAssessedIdentities(assessedIdList); - List<UserData> validDatas = new ArrayList<UserData>(idToIdentityMap.size()); - List<UserData> invalidDatas = new ArrayList<UserData>(rows.size() - idToIdentityMap.size()); + List<UserData> validDatas = new ArrayList<>(idToIdentityMap.size()); + List<UserData> invalidDatas = new ArrayList<>(rows.size() - idToIdentityMap.size()); for(BulkAssessmentRow row : datas.getRows()) { Identity foundIdentity = idToIdentityMap.get(row.getAssessedId()); if(foundIdentity == null) { @@ -153,7 +153,7 @@ public class ValidationStepForm extends StepFormBasicController { } private Map<String,Identity> loadAssessedIdentities(List<String> assessedIdList) { - Map<String,Identity> idToIdentityMap = new HashMap<String, Identity>(); + Map<String,Identity> idToIdentityMap = new HashMap<>(); for(String assessedId : assessedIdList) { Identity identity = securityManager.findIdentityByName(assessedId); diff --git a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java index fae0d16ade05d801df6a89c455c010f6e1a6d33b..01cdd892d39f0f6eeb02a1dad854989355b62194 100644 --- a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java +++ b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java @@ -1,4 +1,5 @@ /** + * <a href="http://www.openolat.org"> * OpenOLAT - Online Learning and Training</a><br> * <p> diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java index 90925fe07e02b066f84a9c9315eb0f837907bb46..85eb94368a9121a073c099b57e9064a7b68d9ee3 100644 --- a/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java +++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java @@ -77,6 +77,7 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC private FormLink groupAssessmentButton; private GroupAssessmentController assessmentCtrl; + private BulkAssessmentToolController bulkAssessmentToolCtrl; @Autowired private GTAManager gtaManager; @@ -136,10 +137,12 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC } private void initBulkAsssessmentTool(UserRequest ureq, FormLayoutContainer formLayout) { - BulkAssessmentToolController bulkAssessmentTollCtrl = new BulkAssessmentToolController(ureq, getWindowControl(), + removeAsListenerAndDispose(bulkAssessmentToolCtrl); + + bulkAssessmentToolCtrl = new BulkAssessmentToolController(ureq, getWindowControl(), getCourseEnvironment(), (AssessableCourseNode)courseNode); - listenTo(bulkAssessmentTollCtrl); - formLayout.put("bulk.assessment", bulkAssessmentTollCtrl.getInitialComponent()); + listenTo(bulkAssessmentToolCtrl); + formLayout.put("bulk.assessment", bulkAssessmentToolCtrl.getInitialComponent()); } @Override @@ -181,6 +184,11 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC } cmc.deactivate(); cleanUp(); + } else if(bulkAssessmentToolCtrl == source) { + if(event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) { + loadModel(ureq); + } + cleanUp(); } super.event(ureq, source, event); } @@ -198,7 +206,9 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC @Override protected void cleanUp() { + removeAsListenerAndDispose(bulkAssessmentToolCtrl); removeAsListenerAndDispose(assessmentCtrl); + bulkAssessmentToolCtrl = null; assessmentCtrl = null; super.cleanUp(); } diff --git a/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java b/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java index ec7749dd9684146094486092f2929e00ca302974..1df05a2f87fc1eecff5686fa99c4f2a5495b4719 100644 --- a/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java +++ b/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java @@ -31,12 +31,27 @@ import org.junit.Test; public class TextModeTest { @Test - public void guessOneLine() { - TextMode mode1 = TextMode.guess("bla bla"); + public void textModeOneLine_text() { + String text = "bla bla"; + TextMode mode1 = TextMode.guess(text); Assert.assertEquals(TextMode.oneLine, mode1); - TextMode mode2 = TextMode.guess("<p>bla bla</p>"); + String fromOneLine = TextMode.fromOneLine(text); + Assert.assertEquals("<p>bla bla</p>", fromOneLine); + + String toOneLine = TextMode.toOneLine(text); + Assert.assertEquals("bla bla", toOneLine); + } + + @Test + public void textModeOneLine_paragraph() { + String paragraph = "<p>bla bla</p>"; + + TextMode mode2 = TextMode.guess("paragraph"); Assert.assertEquals(TextMode.oneLine, mode2); + + String toOneLine = TextMode.toOneLine(paragraph); + Assert.assertEquals("bla bla", toOneLine); } @Test