BP-816, cut log to 200 warnings
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/StandbyScheduleController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/StandbyScheduleController.java
index cca45d3..4b82835 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/StandbyScheduleController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/StandbyScheduleController.java
@@ -80,6 +80,7 @@
 
 	public PlanningMsgResponseDto deleteBodyData(StandbyScheduleCopyDto standbyScheduleCopyDto, String modUserName)
 			throws SpException {
+		planningController.startWithNewList();
 		return bodyDataCopyController.deleteByGroups(standbyScheduleCopyDto, modUserName);
 	}
 }
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
index 6c7fd0c..c6c86b5 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlanningController.java
@@ -67,6 +67,7 @@
 	public static final String TXT_AUTOMATIC_PLANNING_HOLIDAY = "autom. Planung (Dienstfrei)";

 	public static final String TXT_AUTOMATIC_CHANGE = "autom. Änderung";

 	public static final String TXT_MANUAL_CHANGE = "manuelle Änderung";

+	public static final String TXT_AND_MORE = "und weitere";

 

 	@Autowired

 	private StandbyGroupRepository standbyGroupRepository;

@@ -102,12 +103,15 @@
 	private MailRequest mailing;

 

 	private List<PlanningMsgDto> lsPlanningMsg = new ArrayList<>();

+	private int warningCounter = 0;

 

 	public PlanningMsgResponseDto startPlanning(StandbyScheduleBlueprintDto standbyBlueprintDto, String username)

 			throws SpException {

 		PlanningMsgResponseDto responseDto = new PlanningMsgResponseDto();

 		try {

 			lsPlanningMsg = new ArrayList<>();

+			warningCounter = 0;

+

 			// check if input is valid

 			if (this.validateInputForPlanCalculation(standbyBlueprintDto)) {

 				standbyBlueprintDto.setValidTo(DateHelper.getEndOfDay(standbyBlueprintDto.getValidTo()));

@@ -146,9 +150,9 @@
 				List<StandbyGroup> lsStandbyGroups = new ArrayList<>();

 				lsStandbyGroups.add(standbyGroupRepository.findOne(standbyBlueprintDto.getStandbyGroupId()));

 

-				lsPlanningMsg.addAll(validatonController.startValidation(standbyBlueprintDto.getValidFrom(),

+				validatonController.startValidation(standbyBlueprintDto.getValidFrom(),

 						standbyBlueprintDto.getValidTo(), lsStandbyGroups, lsValidationBeanNames,

-						standbyBlueprintDto.getStatusId(), null));

+						standbyBlueprintDto.getStatusId(), null);

 				responseDto.setLsMsg(lsPlanningMsg);

 			}

 			return responseDto;

@@ -294,7 +298,7 @@
 				tmpDate = planningBodyResultDto.getTempDate();

 				currentPosition = planningBodyResultDto.getNewPosition();

 				lastStartUserId = planningBodyResultDto.getLastStartUserId();

-				lsPlanningMsg.addAll(planningBodyResultDto.getLsMsg());

+				this.addMessagesToList(planningBodyResultDto.getLsMsg());

 			}

 		} catch (Exception e) {

 			LOGGER.error(e, e);

@@ -564,7 +568,7 @@
 

 				String warning = "Für das Datum (" + currentDate

 						+ ") wird der Eintrag nur bis zum Tages-Ende geplant, da der Folgetag den definierten Zeitraum der Phase überschreitet.";

-				lsPlanningMsg.add(new PlanningMsgDto(warning, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO));

+				this.addMessageToList((new PlanningMsgDto(warning, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO)));

 				resultObj.setNewPosition(currentPosition);

 				return resultObj;

 

@@ -597,7 +601,7 @@
 				+ " wurde für den Zeitraum vom (" + stbyBody.getValidFrom() + ") bis zum (" + stbyBody.getValidTo()

 				+ ") eingeplant.";

 		PlanningMsgDto dto = new PlanningMsgDto(info, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO_ML3);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -620,7 +624,7 @@
 		}

 

 		PlanningMsgDto dto = new PlanningMsgDto(strBuilder.toString(), PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -635,7 +639,7 @@
 				+ ") wurde keine beginnende Duration für folgenden Tag gefunden: (" + currentDate + ")";

 		LOGGER.warn(warning);

 		PlanningMsgDto dto = new PlanningMsgDto(warning, PlanningMsgDto.WARN, PlanningMsgDto.CSS_WARN);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -656,18 +660,18 @@
 					+ " bis " + blueprintDto.getValidTo() + ", konnte keine Bereitschaftsphase generiert werden.";

 			LOGGER.info(info);

 			PlanningMsgDto dto = new PlanningMsgDto(info, PlanningMsgDto.WARN, PlanningMsgDto.CSS_WARN);

-			lsPlanningMsg.add(dto);

+			this.addMessageToList(dto);

 			return dto;

 		} else {

 			// search missing phase slots

-			lsPlanningMsg.addAll(this.createMsgMissingPhasesFound(map, blueprintDto));

+			this.addMessagesToList(this.createMsgMissingPhasesFound(map, blueprintDto));

 

 			info = "Durch wechselnde Gruppenmitglieder wurde(n)  " + map.size()

 					+ " Bereitschaftsphase(n) für den angegebenen Zeitraum , vom " + blueprintDto.getValidFrom()

 					+ " bis " + blueprintDto.getValidTo() + ", erkannt.";

 			LOGGER.info(info);

 			PlanningMsgDto dto = new PlanningMsgDto(info, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO);

-			lsPlanningMsg.add(dto);

+			this.addMessageToList(dto);

 

 			return dto;

 		}

@@ -681,7 +685,7 @@
 				+ DateHelper.getStartOfDay(phase.getEndDate()) + ") berechnet";

 		LOGGER.info(info);

 		PlanningMsgDto dto = new PlanningMsgDto(info, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		lsMsgDto.add(dto);

 

 		StringBuilder builder = new StringBuilder();

@@ -697,7 +701,7 @@
 		info = "Folgende Bereitschaftende werden verplant: " + builder.toString();

 		LOGGER.info(info);

 		dto = new PlanningMsgDto(info, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		lsMsgDto.add(dto);

 

 		return lsMsgDto;

@@ -752,7 +756,7 @@
 		String info = "Die Berechnung der Bereitschaftsphase (" + phasenId + ") wurde abgeschlossen";

 		LOGGER.info(info);

 		PlanningMsgDto dto = new PlanningMsgDto(info, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -767,7 +771,7 @@
 		String info = "Der letzte Starter wurde aufgrund des aktivierten Vorschubs übersprungen.";

 		LOGGER.info(info);

 		PlanningMsgDto dto = new PlanningMsgDto(info, PlanningMsgDto.INFO, PlanningMsgDto.CSS_INFO);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -783,7 +787,7 @@
 				+ " ältere Bereitschaften für den angegebenen Zeitraum entfernt.";

 		LOGGER.info(warning);

 		PlanningMsgDto dto = new PlanningMsgDto(warning, PlanningMsgDto.WARN, PlanningMsgDto.CSS_WARN);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -801,7 +805,7 @@
 				+ nextUser.getLastname() + ") begonnen.";

 		LOGGER.info(warning);

 		PlanningMsgDto dto = new PlanningMsgDto(warning, PlanningMsgDto.WARN, PlanningMsgDto.CSS_WARN);

-		lsPlanningMsg.add(dto);

+		this.addMessageToList(dto);

 		return dto;

 	}

 

@@ -1118,6 +1122,7 @@
 	public PlanningMsgResponseDto replaceUserInPlan(StandbyScheduleActionDto actionDto, String username)

 			throws SpException {

 		PlanningMsgResponseDto responseDto = new PlanningMsgResponseDto();

+		this.startWithNewList();

 

 		// check input values

 		List<Object> lsInputParams = new ArrayList<>();

@@ -1317,6 +1322,7 @@
 	public PlanningMsgResponseDto moveUserInPlan(StandbyScheduleActionDto actionDto, String username)

 			throws SpException {

 		PlanningMsgResponseDto responseDto = new PlanningMsgResponseDto();

+		this.startWithNewList();

 

 		// check input values

 		List<Object> lsInputParams = new ArrayList<>();

@@ -1456,4 +1462,46 @@
 		}

 		return lsFittingDurations;

 	}

+

+	/**

+	 * Method to add PlanningMsgDtos to list and stop filling the list at an amount

+	 * bigger then 200 entries.

+	 */

+	public void addMessagesToList(List<PlanningMsgDto> lsMsg) {

+		for (PlanningMsgDto dto : lsMsg) {

+			if (dto.getType().equals(PlanningMsgDto.INFO)) {

+				lsPlanningMsg.add(dto);

+			} else if (warningCounter < 200) {

+				lsPlanningMsg.add(dto);

+				warningCounter++;

+			} else {

+				PlanningMsgDto lastDto = lsPlanningMsg.get(lsPlanningMsg.size() - 1);

+				if (!lastDto.getMsg().equals(TXT_AND_MORE)) {

+					lsPlanningMsg.add(new PlanningMsgDto(TXT_AND_MORE, PlanningMsgDto.WARN, PlanningMsgDto.CSS_WARN));

+				}

+			}

+		}

+	}

+

+	/**

+	 * Method to add a PlanningMsgDto to list.

+	 */

+	public void addMessageToList(PlanningMsgDto msg) {

+		List<PlanningMsgDto> lsMsg = new ArrayList<>();

+		lsMsg.add(msg);

+		this.addMessagesToList(lsMsg);

+	}

+

+	public List<PlanningMsgDto> getLsMsgDto() {

+		return lsPlanningMsg;

+	}

+

+	public void startWithNewList() {

+		lsPlanningMsg = new ArrayList<>();

+		warningCounter = 0;

+	}

+

+	public int getWarningCounter() {

+		return warningCounter;

+	}

 }

diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/validation/ValidationController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/validation/ValidationController.java
index 11e53eb..27f1037 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/validation/ValidationController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/validation/ValidationController.java
@@ -20,6 +20,7 @@
 import org.eclipse.openk.sp.controller.AbstractController;
 import org.eclipse.openk.sp.controller.UserController;
 import org.eclipse.openk.sp.controller.msg.ValidationMsgController;
+import org.eclipse.openk.sp.controller.planning.PlanningController;
 import org.eclipse.openk.sp.db.dao.StandbyGroupRepository;
 import org.eclipse.openk.sp.db.dao.StandbyListRepository;
 import org.eclipse.openk.sp.db.dao.StandbyStatusRepository;
@@ -67,32 +68,37 @@
 	@Autowired
 	private StandbyStatusRepository standbyStatusRepository;
 
+	@Autowired
+	private PlanningController planningController;
+
 	public List<PlanningMsgDto> startValidation(Date from, Date till, List<StandbyGroup> lsStandbyGroups,
 			List<String> lsValidationBeanNames, Long statusId, Long userId) throws SpException {
 		List<PlanningMsgDto> lsMsgDto = new ArrayList<>();
 		try {
-			lsMsgDto.addAll(ValidationMsgController.createMsgStartValidation(from, till, lsStandbyGroups));
+
+			planningController
+					.addMessagesToList(ValidationMsgController.createMsgStartValidation(from, till, lsStandbyGroups));
 			for (StandbyGroup group : lsStandbyGroups) {
 				for (String beanName : lsValidationBeanNames) {
-					if (appContext.containsBean(beanName)) {
+					if (appContext.containsBean(beanName) && planningController.getWarningCounter() < 200) {
 						if (statusId == null) {
 							// check for every status in DB
 							for (StandbyStatus stbyStatus : standbyStatusRepository.findAll()) {
 								// check for given status
-								lsMsgDto.addAll(((IValidator) appContext.getBean(beanName)).execute(from, till, group,
-										lsStandbyGroups, stbyStatus.getId(), userId));
+								planningController.addMessagesToList(((IValidator) appContext.getBean(beanName))
+										.execute(from, till, group, lsStandbyGroups, stbyStatus.getId(), userId));
 							}
 						} else {
 							// check for given status
-							lsMsgDto.addAll(((IValidator) appContext.getBean(beanName)).execute(from, till, group,
-									lsStandbyGroups, statusId, userId));
+							planningController.addMessagesToList(((IValidator) appContext.getBean(beanName))
+									.execute(from, till, group, lsStandbyGroups, statusId, userId));
 						}
 					}
 				}
 			}
-			lsMsgDto.addAll(ValidationMsgController.createMsgEndValidation(lsMsgDto));
+			ValidationMsgController.createMsgEndValidation(planningController.getLsMsgDto());
 
-			return lsMsgDto;
+			return planningController.getLsMsgDto();
 		} catch (Exception e) {
 			LOGGER.error(e, e);
 			SpErrorEntry ee = SpExceptionEnum.DEFAULT_EXCEPTION.getEntry();
@@ -103,8 +109,8 @@
 
 	public PlanningMsgResponseDto startValidation(ValidationDto validatonDto) throws SpException {
 		PlanningMsgResponseDto responseDto = new PlanningMsgResponseDto();
+		planningController.startWithNewList();
 		try {
-
 			// check if to validate groups or list
 			List<StandbyGroup> lsStandbyGroups = null;
 			if (validatonDto.getStandbyListId() != null) {
@@ -123,8 +129,9 @@
 			lsValidationBeanNames.add(ValidationController.BEAN_GROUP_COVERAGE_VALIDATOR);
 			lsValidationBeanNames.add(ValidationController.BEAN_DOUBLE_PLANNED_VALIDATOR);
 			lsValidationBeanNames.add(ValidationController.BEAN_PLACEHOLDER_STANDBY_USER_VALIDATOR);
-			responseDto.getLsMsg().addAll(this.startValidation(validatonDto.getValidFrom(), validatonDto.getValidTo(),
-					lsStandbyGroups, lsValidationBeanNames, validatonDto.getStatusId(), validatonDto.getNewUserId()));
+			this.startValidation(validatonDto.getValidFrom(), validatonDto.getValidTo(), lsStandbyGroups,
+					lsValidationBeanNames, validatonDto.getStatusId(), validatonDto.getNewUserId());
+			responseDto.getLsMsg().addAll(planningController.getLsMsgDto());
 			return responseDto;
 		} catch (SpException e) {
 			throw e;
diff --git a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/validation/ValidationControllerTest.java b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/validation/ValidationControllerTest.java
index d831272..224a656 100644
--- a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/validation/ValidationControllerTest.java
+++ b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/validation/ValidationControllerTest.java
@@ -21,6 +21,7 @@
 
 import org.apache.log4j.Logger;
 import org.eclipse.openk.sp.controller.UserController;
+import org.eclipse.openk.sp.controller.planning.PlanningController;
 import org.eclipse.openk.sp.controller.validation.validator.GroupCoverageValidator;
 import org.eclipse.openk.sp.db.dao.StandbyGroupRepository;
 import org.eclipse.openk.sp.db.dao.StandbyListRepository;
@@ -65,6 +66,9 @@
 	@Mock
 	private UserRepository userRepository;
 
+	@Mock
+	private PlanningController planningController;
+
 	@InjectMocks
 	ValidationController validatonController;
 
@@ -145,6 +149,8 @@
 		validationDto.setValidFrom(DateHelper.getDate(2018, 10, 01));
 		validationDto.setValidTo(DateHelper.getDate(2018, 10, 03));
 
+		List<PlanningMsgDto> lsPlanningList = new ArrayList<>();
+
 		Mockito.when(standbyListRepository.findOne(Mockito.anyLong())).thenReturn(sbList);
 		Mockito.when(standbyGroupRepository.findOne(Mockito.anyLong())).thenReturn(group);
 		PlanningMsgResponseDto dto = null;