From 5ab226ca1bd8866738ba68e92558c54b65598259 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 18 Mar 2014 15:43:23 +0100
Subject: [PATCH] OO-1024: use a delegate list to store the checkpoints to edit

---
 .../ChecklistEditCheckpointsController.java   | 38 ++++++++++++-------
 1 file changed, 24 insertions(+), 14 deletions(-)

diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistEditCheckpointsController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistEditCheckpointsController.java
index 5a062889b4c..9ebb83f7d43 100644
--- a/src/main/java/de/bps/olat/modules/cl/ChecklistEditCheckpointsController.java
+++ b/src/main/java/de/bps/olat/modules/cl/ChecklistEditCheckpointsController.java
@@ -21,6 +21,7 @@ package de.bps.olat.modules.cl;
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.gui.UserRequest;
@@ -53,10 +54,10 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 	// GUI
 	private FormLayoutContainer titleContainer, buttonContainer;
 	private DialogBoxController yesNoController;
-	private ArrayList<TextElement> titleInputList;
-	private ArrayList<TextElement> descriptionInputList;
-	private ArrayList<SingleSelection> modeInputList;
-	private ArrayList<FormLink> delButtonList;
+	private List<TextElement> titleInputList;
+	private List<TextElement> descriptionInputList;
+	private List<SingleSelection> modeInputList;
+	private List<FormLink> delButtonList;
 	private String submitKey;
 	private FormLink addButton;
 	private CheckpointComparator checkpointComparator = ChecklistUIFactory.comparatorTitleAsc;
@@ -64,6 +65,7 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 	// data
 	private long counter = 0;
 	private Checklist checklist;
+	private List<Checkpoint> checkpointsInVc;
 	
 	// helpers
 	private boolean deletedOK = true;
@@ -82,10 +84,11 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 		}
 		
 		int size = checklist.getCheckpoints().size();
-		titleInputList = new ArrayList<TextElement>(size);
-		descriptionInputList = new ArrayList<TextElement>(size);
-		modeInputList = new ArrayList<SingleSelection>(size);
-		delButtonList = new ArrayList<FormLink>(size);
+		checkpointsInVc  = new ArrayList<>(size);
+		titleInputList = new ArrayList<>(size);
+		descriptionInputList = new ArrayList<>(size);
+		modeInputList = new ArrayList<>(size);
+		delButtonList = new ArrayList<>(size);
 		
 		initForm(ureq);
 	}
@@ -124,6 +127,9 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 		}
 		checklist = checklistManager.updateChecklist(checklist);
 		DBFactory.getInstance().commit();
+		checkpointsInVc.clear();
+		checkpointsInVc.addAll(checklist.getCheckpointsSorted(checkpointComparator));
+		titleContainer.contextPut("checkpoints", checkpointsInVc);
 		// Inform all listeners about the changes
 		fireEvent(ureq, Event.CHANGED_EVENT);
 	}
@@ -173,6 +179,7 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if (source.getComponent() instanceof Link) {
 			if (addButton.equals(source)) {
+				int index = checklist.getCheckpoints().size();
 				// add a new form link
 				Checkpoint newCheckpoint = new Checkpoint();
 				newCheckpoint.setChecklist(checklist);
@@ -180,9 +187,10 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 				newCheckpoint.setTitle("");
 				newCheckpoint.setDescription("");
 				newCheckpoint.setMode(CheckpointMode.MODE_EDITABLE);
-				int index = checklist.getCheckpoints().size();
 				checklist.addCheckpoint(index, newCheckpoint);
 				addNewFormCheckpoint(index, newCheckpoint);
+				checkpointsInVc.add(newCheckpoint);
+				flc.setDirty(true);
 			} else if (delButtonList.contains(source)) {
 				// special case: only one line existent
 				if (checklist.getCheckpoints().size() == 1) {
@@ -215,9 +223,10 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 		titleContainer = FormLayoutContainer.createCustomFormLayout("titleLayout", getTranslator(), velocity_root + "/edit.html");
 		fic.add(titleContainer);
 		// create gui elements for all checkpoints
-		if(checklist.getCheckpoints().size() == 0) {
+		int numOfCheckpoints = checklist.getCheckpoints().size();
+		if(numOfCheckpoints == 0) {
 			Checkpoint newCheckpoint = new Checkpoint();
-			newCheckpoint.setChecklist(this.checklist);
+			newCheckpoint.setChecklist(checklist);
 			newCheckpoint.setLastModified(new Date());
 			newCheckpoint.setTitle("");
 			newCheckpoint.setDescription("");
@@ -225,7 +234,7 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 			checklist.addCheckpoint(0, newCheckpoint);
 			addNewFormCheckpoint(0, newCheckpoint);
 		} else {
-			for (int i = 0; i < checklist.getCheckpoints().size(); i++) {
+			for (int i = 0; i<numOfCheckpoints; i++) {
 				Checkpoint checkpoint = checklist.getCheckpointsSorted(checkpointComparator).get(i);
 				addNewFormCheckpoint(i, checkpoint);
 			}
@@ -233,8 +242,9 @@ public class ChecklistEditCheckpointsController extends FormBasicController {
 		addButton = new FormLinkImpl("add" + counter, "add" + counter, "cl.table.add", Link.BUTTON_SMALL);
 		addButton.setUserObject(checklist.getCheckpointsSorted(checkpointComparator).get(checklist.getCheckpoints().size() - 1));
 		titleContainer.add(addButton);
-
-		titleContainer.contextPut("checkpoints", checklist.getCheckpointsSorted(checkpointComparator));
+		
+		checkpointsInVc.addAll(checklist.getCheckpointsSorted(checkpointComparator));
+		titleContainer.contextPut("checkpoints", checkpointsInVc);
 		titleContainer.contextPut("titleInputList", titleInputList);
 		titleContainer.contextPut("descriptionInputList", descriptionInputList);
 		titleContainer.contextPut("modeInputList", modeInputList);
-- 
GitLab