From 985ad9693b82c83d6dba28a2d96a5ff5ce4e0bb9 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 9 Jan 2017 16:32:57 +0100
Subject: [PATCH] OO-2343: validate null or empty directed pairs in match
 editor

---
 .../interactions/MatchEditorController.java   | 43 +++++++++++--------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchEditorController.java
index 6ba0c917d60..804f923df42 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/MatchEditorController.java
@@ -202,27 +202,34 @@ public class MatchEditorController extends FormBasicController {
 		if(singleMultiEl.isOneSelected() && singleMultiEl.isSelected(0)) {
 			Map<String,String> sourseTargetMap = new HashMap<>();
 			String[] directedPairsIds = ureq.getHttpReq().getParameterValues("qtiworks_response_" + itemBuilder.getResponseIdentifier());
-			for(String directedPairIds: directedPairsIds) {
-				String[] pairs = directedPairIds.split(" ");
-				String sourceId = pairs[0];
-				String targetId = pairs[1];
-				if(sourseTargetMap.containsKey(sourceId)) {
-					for(MatchWrapper sourceWrapper:sourceWrappers) {
-						if(sourceId.equals(sourceWrapper.getIdentifierString())) {
-							sourceWrapper.setErrorSingleChoice(true);
+			if(directedPairsIds == null || directedPairsIds.length == 0) {
+				for(MatchWrapper sourceWrapper:sourceWrappers) {
+					sourceWrapper.setErrorSingleChoice(true);
+					allOk &= false;
+				}
+			} else {
+				for(String directedPairIds: directedPairsIds) {
+					String[] pairs = directedPairIds.split(" ");
+					String sourceId = pairs[0];
+					String targetId = pairs[1];
+					if(sourseTargetMap.containsKey(sourceId)) {
+						for(MatchWrapper sourceWrapper:sourceWrappers) {
+							if(sourceId.equals(sourceWrapper.getIdentifierString())) {
+								sourceWrapper.setErrorSingleChoice(true);
+							}
 						}
+						allOk &= false;
+					} else {
+						sourseTargetMap.put(sourceId, targetId);
 					}
-					allOk &= false;
-				} else {
-					sourseTargetMap.put(sourceId, targetId);
 				}
-			}
-
-			for(MatchWrapper sourceWrapper:sourceWrappers) {
-				String sourceId = sourceWrapper.getIdentifierString();
-				if(!sourseTargetMap.containsKey(sourceId)) {
-					sourceWrapper.setErrorSingleChoice(true);
-					allOk &= false;
+	
+				for(MatchWrapper sourceWrapper:sourceWrappers) {
+					String sourceId = sourceWrapper.getIdentifierString();
+					if(!sourseTargetMap.containsKey(sourceId)) {
+						sourceWrapper.setErrorSingleChoice(true);
+						allOk &= false;
+					}
 				}
 			}
 		}
-- 
GitLab