blob: 40d5798bd1f5c9997bc629418df7ef6b745ae407 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2018 Mettenmeier GmbH
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
package org.eclipse.openk.sp.controller.validation;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.log4j.Logger;
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;
import org.eclipse.openk.sp.db.dao.UserRepository;
import org.eclipse.openk.sp.db.model.StandbyGroup;
import org.eclipse.openk.sp.db.model.StandbyList;
import org.eclipse.openk.sp.db.model.StandbyStatus;
import org.eclipse.openk.sp.dto.ValidationDto;
import org.eclipse.openk.sp.dto.planning.PlanningMsgDto;
import org.eclipse.openk.sp.dto.planning.PlanningMsgResponseDto;
import org.eclipse.openk.sp.exceptions.SpErrorEntry;
import org.eclipse.openk.sp.exceptions.SpException;
import org.eclipse.openk.sp.exceptions.SpExceptionEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional(rollbackFor = Exception.class)
/** Class to handle planning operations. */
public class ValidationController extends AbstractController {
protected static final Logger LOGGER = Logger.getLogger(ValidationController.class);
public static final String BEAN_USER_AVAILABLE_VALIDATOR = "userAvailableValidator";
public static final String BEAN_USER_AVAILABLE_FOR_GROUP_VALIDATOR = "userAvailableForGroupValidator";
public static final String BEAN_GROUP_COVERAGE_VALIDATOR = "groupCoverageValidator";
public static final String BEAN_DOUBLE_PLANNED_VALIDATOR = "doublePlannedValidator";
public static final String BEAN_PLACEHOLDER_STANDBY_USER_VALIDATOR = "placeholderStandbyUserValidator";
@Autowired
private ApplicationContext appContext;
@Autowired
private UserController userController;
@Autowired
private UserRepository userRepository;
@Autowired
private StandbyGroupRepository standbyGroupRepository;
@Autowired
private StandbyListRepository standbyListRepository;
@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 {
try {
planningController
.addMessagesToList(ValidationMsgController.createMsgStartValidation(from, till, lsStandbyGroups));
for (StandbyGroup group : lsStandbyGroups) {
for (String beanName : lsValidationBeanNames) {
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
planningController.addMessagesToList(((IValidator) appContext.getBean(beanName))
.execute(from, till, group, lsStandbyGroups, stbyStatus.getId(), userId));
}
} else {
// check for given status
planningController.addMessagesToList(((IValidator) appContext.getBean(beanName))
.execute(from, till, group, lsStandbyGroups, statusId, userId));
}
}
}
}
ValidationMsgController.createMsgEndValidation(planningController.getLsMsgDto());
return planningController.getLsMsgDto();
} catch (Exception e) {
LOGGER.error(e, e);
SpErrorEntry ee = SpExceptionEnum.DEFAULT_EXCEPTION.getEntry();
ee.setE(e);
throw new SpException(ee);
}
}
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) {
StandbyList sbList = standbyListRepository.findOne(validatonDto.getStandbyListId());
lsStandbyGroups = sbList.getLsStandbyGroups();
} else if (validatonDto.getStandbyGroupId() != null) {
lsStandbyGroups = new ArrayList<>();
lsStandbyGroups.add(standbyGroupRepository.findOne(validatonDto.getStandbyGroupId()));
} else {
SpErrorEntry ee = SpExceptionEnum.MISSING_PARAMETERS_EXCEPTION.getEntry();
throw new SpException(ee);
}
// start validation
List<String> lsValidationBeanNames = new ArrayList<>();
lsValidationBeanNames.add(ValidationController.BEAN_GROUP_COVERAGE_VALIDATOR);
lsValidationBeanNames.add(ValidationController.BEAN_DOUBLE_PLANNED_VALIDATOR);
lsValidationBeanNames.add(ValidationController.BEAN_PLACEHOLDER_STANDBY_USER_VALIDATOR);
this.startValidation(validatonDto.getValidFrom(), validatonDto.getValidTo(), lsStandbyGroups,
lsValidationBeanNames, validatonDto.getStatusId(), validatonDto.getNewUserId());
responseDto.getLsMsg().addAll(planningController.getLsMsgDto());
return responseDto;
} catch (SpException e) {
throw e;
} catch (Exception e) {
LOGGER.error(e, e);
SpErrorEntry ee = SpExceptionEnum.DEFAULT_EXCEPTION.getEntry();
ee.setE(e);
throw new SpException(ee);
}
}
}