BP-772 pull calculation steps apart for better analysis on performance
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 92bc1e1..6b0d257 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
@@ -12,6 +12,8 @@
  ********************************************************************************/
 package org.eclipse.openk.sp.controller;
 
+import java.util.Date;
+
 import org.apache.log4j.Logger;
 import org.eclipse.openk.sp.controller.planning.BodyDataCopyController;
 import org.eclipse.openk.sp.controller.planning.PlannedDataController;
@@ -59,7 +61,11 @@
 
 	public StandbyScheduleDto getFilteredPlanByStatusId(StandbyScheduleFilterDto standbyScheduleFilterDto,
 			Long statusId) throws SpException {
-		return plannedDataController.getFilteredPlanByStatus(standbyScheduleFilterDto, statusId);
+		LOGGER.debug(new Date());
+		StandbyScheduleDto plan = plannedDataController.getFilteredPlanByStatus(standbyScheduleFilterDto, statusId);
+		LOGGER.debug(new Date() + " for count day's " + plan.getListPlanRows().size());
+
+		return plan;
 	}
 
 	public PlanningMsgResponseDto calculatePlan(StandbyScheduleBlueprintDto standbyBlueprintDto, String username)
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlannedDataController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlannedDataController.java
index 5171b7f..57efac7 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlannedDataController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/planning/PlannedDataController.java
@@ -17,7 +17,6 @@
 import java.util.List;
 
 import org.apache.log4j.Logger;
-import org.dozer.DozerBeanMapper;
 import org.eclipse.openk.sp.controller.AbstractController;
 import org.eclipse.openk.sp.controller.CalendarController;
 import org.eclipse.openk.sp.db.converter.EntityConverter;
@@ -67,10 +66,6 @@
 	@Autowired
 	CalendarController calendarController;
 
-	/** dozer mapping API. */
-	@Autowired
-	private DozerBeanMapper mapper;
-
 	public StandbyScheduleDto getFilteredPlanByStatus(StandbyScheduleFilterDto standbyScheduleFilterDto, Long statusId)
 			throws SpException {
 
@@ -103,9 +98,7 @@
 				throw spE;
 			}
 
-			List<StandbyGroupSelectionDto> listStandbyGroupDto = new ArrayList<>();
-			listStandbyGroupDto = entityConverter.convertEntityToDtoList(standbyList.getLsStandbyGroups(),
-					listStandbyGroupDto, StandbyGroupSelectionDto.class);
+			List<StandbyGroupSelectionDto> listStandbyGroupDto = mapGroupDto(standbyList.getLsStandbyGroups());
 
 			Date startDate = DateHelper.getStartOfDay(standbyScheduleFilterDto.getValidFrom());
 			Date endDate = DateHelper.getEndOfDay(standbyScheduleFilterDto.getValidTo());
@@ -130,26 +123,37 @@
 			List<StandbyScheduleBody> listBodyMatrix = matrixOfPlannedBodysByStatus(groupIds, startDate, endDate,
 					statusId);
 
-			for (StandbyScheduleBody standbyScheduleBody : listBodyMatrix) {
+			LOGGER.info("query for " + listBodyMatrix.size() + " bodies");
 
-				StandbyScheduleBodySelectionDto standbyScheduleBodySelectionDto = (StandbyScheduleBodySelectionDto) entityConverter
-						.convertEntityToDto(standbyScheduleBody, new StandbyScheduleBodySelectionDto());
+			// convert to dto
+			List<StandbyScheduleBodySelectionDto> listBodyDto = new ArrayList<>();
+			listBodyDto = entityConverter.convertEntityToDtoList(listBodyMatrix, listBodyDto,
+					StandbyScheduleBodySelectionDto.class);
 
-				Date date = DateHelper.getStartOfDay(standbyScheduleBodySelectionDto.getValidFrom());
+			LOGGER.info("convertetd " + listBodyDto.size() + " bodies");
+
+			for (StandbyScheduleBodySelectionDto standbyScheduleBody : listBodyDto) {
+
+				Date date = DateHelper.getStartOfDay(standbyScheduleBody.getValidFrom());
 
 				PlanRowsDto row = plan.getRow(date);
 
 				if (row != null) {
-					setStyle(row, date);
+					row.addStandbyBody(standbyScheduleBody);
 
-					row.addStandbyBody(standbyScheduleBodySelectionDto);
-
-					plan.count(standbyScheduleBodySelectionDto);
+					plan.count(standbyScheduleBody);
 				} else {
 					LOGGER.info("no row for that date found (" + date + ")");
 				}
 			}
 
+			LOGGER.info("set style for " + plan.getListPlanRows().size() + " row's.");
+			// set style
+			for (PlanRowsDto row : plan.getListPlanRows()) {
+				Date date = DateHelper.getDateFromLabel(row.getLabel());
+				setStyle(row, date);
+			}
+
 			return plan;
 
 		} catch (SpException e) {
@@ -164,6 +168,13 @@
 
 	}
 
+	public List<StandbyGroupSelectionDto> mapGroupDto(List<StandbyGroup> lsStandbyGroups) {
+		List<StandbyGroupSelectionDto> listStandbyGroupDto = new ArrayList<>();
+		listStandbyGroupDto = entityConverter.convertEntityToDtoList(lsStandbyGroups, listStandbyGroupDto,
+				StandbyGroupSelectionDto.class);
+		return listStandbyGroupDto;
+	}
+
 	@SuppressWarnings("unchecked")
 	public StandbyScheduleArchiveDto createPlan(StandbyScheduleFilterDto standbyScheduleFilterDto,
 			PlanHeaderDto planHeader, Long statusId) throws SpException {
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/reports/ReportController.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/reports/ReportController.java
index 2cbeeff..7b1e4cd 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/reports/ReportController.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/controller/reports/ReportController.java
@@ -351,11 +351,8 @@
 
 			LOGGER.debug("from " + groupList.size() + " in " + reportInputDataSet.size());
 			compressResultLevel1(reportInputDataSet, reportDto, groupList);
-
 		}
-
 		return reportInputDataSet;
-
 	}
 
 	private void calcReportStartDate(StandbyScheduleBody body) {
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/mail/MailRequest.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/mail/MailRequest.java
index 397a2c0..4e75430 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/mail/MailRequest.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/mail/MailRequest.java
@@ -28,6 +28,7 @@
 import org.eclipse.openk.sp.db.model.User;
 import org.eclipse.openk.sp.dto.planning.StandbyScheduleActionDto;
 import org.eclipse.openk.sp.exceptions.SpException;
+import org.eclipse.openk.sp.util.DateHelper;
 import org.eclipse.openk.sp.util.FileHelper;
 import org.eclipse.openk.sp.util.SpMsg;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -95,9 +96,13 @@
 			String link = property.getProperty(Globals.LINK_DASHBOARD);
 			logger.info("read link from properties: " + link);
 
-			String body = generateHTML(template, standbyBody.getStandbyGroup().getTitle(), standbyBody.getValidFrom(),
-					standbyBody.getValidTo(), targetGroup.getTitle(), actionDto.getValidFrom(), actionDto.getValidTo(),
-					link);
+			String strSBFrom = DateHelper.convertToLocalString(standbyBody.getValidFrom(), "EE. dd.MM.yy HH:mm");
+			String strSBTo = DateHelper.convertToLocalString(standbyBody.getValidTo(), "EE. dd.MM.yy HH:mm");
+			String strAcFrom = DateHelper.convertToLocalString(actionDto.getValidFrom(), "EE. dd.MM.yy HH:mm");
+			String strAcTo = DateHelper.convertToLocalString(actionDto.getValidTo(), "EE. dd.MM.yy HH:mm");
+
+			String body = generateHTML(template, standbyBody.getStandbyGroup().getTitle(), strSBFrom, strSBTo,
+					targetGroup.getTitle(), strAcFrom, strAcTo, link);
 
 			email = calcMail(subject, standbyBody.getUser().getBusinessContactData().getEmail(), property, body);
 
@@ -141,8 +146,10 @@
 
 			String userName = newUser.getFirstname() + " " + newUser.getLastname();
 			String link = property.getProperty(Globals.LINK_DASHBOARD);
-			String body = generateHTML(template, standbyGroup.getTitle(), actionDto.getValidFrom(),
-					actionDto.getValidTo(), userName, link);
+			String strAcFrom = DateHelper.convertToLocalString(actionDto.getValidFrom(), "EE. dd.MM.yy HH:mm");
+			String strAcTo = DateHelper.convertToLocalString(actionDto.getValidTo(), "EE. dd.MM.yy HH:mm");
+
+			String body = generateHTML(template, standbyGroup.getTitle(), strAcFrom, strAcTo, userName, link);
 
 			email = calcMail(subject, oldUser.getBusinessContactData().getEmail(), property, body);
 
@@ -178,8 +185,10 @@
 
 			String userName = oldUser.getFirstname() + " " + oldUser.getLastname();
 			String link = property.getProperty(Globals.LINK_DASHBOARD);
-			String body = generateHTML(template, standbyGroup.getTitle(), userName, actionDto.getValidFrom(),
-					actionDto.getValidTo(), link);
+			String strAcFrom = DateHelper.convertToLocalString(actionDto.getValidFrom(), "EE. dd.MM.yy HH:mm");
+			String strAcTo = DateHelper.convertToLocalString(actionDto.getValidTo(), "EE. dd.MM.yy HH:mm");
+
+			String body = generateHTML(template, standbyGroup.getTitle(), userName, strAcFrom, strAcTo, link);
 
 			email = calcMail(subject, newUser.getBusinessContactData().getEmail(), property, body);
 
diff --git a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/util/GsonTypeHelper.java b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/util/GsonTypeHelper.java
index 150fd93..da695da 100644
--- a/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/util/GsonTypeHelper.java
+++ b/oKBereitschaftsplanungBackend/src/main/java/org/eclipse/openk/sp/util/GsonTypeHelper.java
@@ -37,6 +37,7 @@
 import org.eclipse.openk.sp.dto.StandbyGroupDto;
 import org.eclipse.openk.sp.dto.StandbyListDto;
 import org.eclipse.openk.sp.dto.StandbyScheduleBodyDto;
+import org.eclipse.openk.sp.dto.StandbyScheduleBodySelectionDto;
 import org.eclipse.openk.sp.dto.UserDto;
 import org.eclipse.openk.sp.dto.UserFunctionDto;
 import org.eclipse.openk.sp.dto.UserInStandbyGroupDto;
@@ -139,6 +140,9 @@
 	public static final Type JSON_TYPE_STANDBYBODY_DTO_ARRAY_LIST = new TypeToken<ArrayList<StandbyScheduleBodyDto>>() {
 	}.getType();
 
+	public static final Type JSON_TYPE_STANDBYBODY_SELECTION_DTO_ARRAY_LIST = new TypeToken<ArrayList<StandbyScheduleBodySelectionDto>>() {
+	}.getType();
+
 	/**
 	 * StandbyDuration
 	 */
diff --git a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/StandbyListControllerTest.java b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/StandbyListControllerTest.java
index da479bd..cacd7a9 100644
--- a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/StandbyListControllerTest.java
+++ b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/StandbyListControllerTest.java
@@ -508,8 +508,8 @@
 		when(entityConverter.convertEntityToDtoList((List<AbstractEntity>) any(), (List<AbstractDto>) any(), any()))
 				.thenReturn(lsStandbyListHasStandbyGroupDto);
 
-		when(entityConverter.convertEntityToDtoList((List<AbstractEntity>) any(), (List<AbstractDto>) any(), any()))
-				.thenReturn(lsStandbyListHasStandbyGroupDto);
+//		when(entityConverter.convertEntityToDtoList((List<AbstractEntity>) any(), (List<AbstractDto>) any(), any()))
+//				.thenReturn(lsStandbyListHasStandbyGroupDto);
 		// when(entityConverter.convertDtoToEntity((AbstractDto) any(), (AbstractEntity)
 		// any()))
 		// .thenReturn(standbyGroup.getLsUserInStandbyGroups().get(0));
diff --git a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlannedDataControllerTest.java b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlannedDataControllerTest.java
index a3b12b9..7a09078 100644
--- a/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlannedDataControllerTest.java
+++ b/oKBereitschaftsplanungBackend/src/test/java/org/eclipse/openk/sp/controller/planning/PlannedDataControllerTest.java
@@ -51,6 +51,7 @@
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
+import org.mockito.Spy;
 import org.mockito.runners.MockitoJUnitRunner;
 
 import com.google.gson.Gson;
@@ -75,6 +76,7 @@
 	@Mock
 	private StandbyGroupRepository standbyGroupRepository;
 
+	@Spy
 	@InjectMocks
 	PlannedDataController plannedDataController;
 
@@ -265,6 +267,9 @@
 		List<StandbyScheduleBody> lsStandbyScheduleBody = (List<StandbyScheduleBody>) new Gson().fromJson(json,
 				GsonTypeHelper.JSON_TYPE_STANDBYBODY_ARRAY_LIST);
 
+		List<StandbyScheduleBodySelectionDto> listBodyDto = (List<StandbyScheduleBodySelectionDto>) new Gson()
+				.fromJson(json, GsonTypeHelper.JSON_TYPE_STANDBYBODY_SELECTION_DTO_ARRAY_LIST);
+
 		json = fh.loadStringFromResource("testStandbyGroup.json");
 		StandbyGroupSelectionDto standbyGroupSelectionDto = (StandbyGroupSelectionDto) new Gson().fromJson(json,
 				StandbyGroupSelectionDto.class);
@@ -282,8 +287,13 @@
 		Mockito.when(standbyListRepository.findOne(Mockito.anyLong())).thenReturn(standbyList);
 		when(entityConverter.convertEntityToDto((AbstractEntity) any(), (AbstractDto) any()))
 				.thenReturn((AbstractDto) bodyDto);
+//		when(entityConverter.convertEntityToDtoList((List<StandbyListHasStandbyGroup>) any(), (List<AbstractDto>) any(),
+//				StandbyGroupSelectionDto.class)).thenReturn(listGroupDto);
+
+		Mockito.doReturn(listGroupDto).when(plannedDataController).mapGroupDto(any());
+
 		when(entityConverter.convertEntityToDtoList((List<AbstractEntity>) any(), (List<AbstractDto>) any(), any()))
-				.thenReturn(listGroupDto);
+				.thenReturn(listBodyDto);
 
 		when(standbyGroupRepository.findOne(Mockito.anyLong())).thenReturn(standbyGroup);