package edu.asu.spring.quadriga.service.workbench;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import edu.asu.spring.quadriga.dao.workbench.settings.IStatisticSettingsDAO;
import edu.asu.spring.quadriga.domain.IStatisticsSettings;
import edu.asu.spring.quadriga.dto.StatisticsSettingsDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.mapper.StatisticsSettingsDTOMapper;
/**
* this class holds the list of statistics settings for a project and used in
* the controller as a modelattribute
*
* @author Ajay Modi
*
*/
@Service
@PropertySource(value = "classpath:/settings.properties")
public class StatisticsSettingsService {
@Autowired
private IStatisticSettingsDAO statisticSettingsDAO;
@Autowired
private StatisticsSettingsDTOMapper statisticSettingsDTOMapper;
@Autowired
private Environment env;
@Transactional
public void addOrUpdateStatisticsSettings(String projectId, String[] names)
throws QuadrigaStorageException {
List<String> defaultValues = getDefaultStatisticsSettingsTypes();
List<String> namesList = Arrays.asList(names);
for (String name : defaultValues) {
StatisticsSettingsDTO statisticsSettingsDTO = statisticSettingsDAO
.getStatisticsSettings(projectId, name);
if (statisticsSettingsDTO == null) {
statisticsSettingsDTO = new StatisticsSettingsDTO(
statisticSettingsDAO.generateUniqueID(), projectId,
name, true);
}
if (namesList.contains(name)) {
statisticsSettingsDTO.setIschecked(true);
} else {
statisticsSettingsDTO.setIschecked(false);
}
statisticSettingsDAO
.saveOrUpdateStatisticsSettings(statisticsSettingsDTO);
}
}
@Transactional
public List<IStatisticsSettings> getStatisticsSettingsList(String projectId)
throws QuadrigaStorageException {
List<StatisticsSettingsDTO> statisticsDTOList = null;
List<String> defaultValues = getDefaultStatisticsSettingsTypes();
statisticsDTOList = statisticSettingsDAO
.getStatisticsSettings(projectId);
if (statisticsDTOList.size() == 0) {
statisticsDTOList = new ArrayList<StatisticsSettingsDTO>();
for (String name : defaultValues) {
StatisticsSettingsDTO statisticsSettingsDTO = new StatisticsSettingsDTO(
statisticSettingsDAO.generateUniqueID(), projectId,
name, false);
statisticsDTOList.add(statisticsSettingsDTO);
}
}
List<IStatisticsSettings> statisticsSettingsList = new ArrayList<IStatisticsSettings>();
for (StatisticsSettingsDTO statisticsSettingsDTO : statisticsDTOList) {
IStatisticsSettings s = statisticSettingsDTOMapper
.getStatisticsSettings(statisticsSettingsDTO);
statisticsSettingsList.add(s);
}
return statisticsSettingsList;
}
private List<String> getDefaultStatisticsSettingsTypes() {
String propertyValue = env.getProperty("statistics.settings");
List<String> settings = Arrays.asList(propertyValue.split(","));
return settings;
}
}