/*******************************************************************************
* Copyright (c) 2014 antoniomariasanchez at gmail.com.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* antoniomaria - initial API and implementation
******************************************************************************/
package net.sf.gazpachoquest.facades.impl;
import net.sf.gazpachoquest.domain.core.Label;
import net.sf.gazpachoquest.domain.core.LabelSet;
import net.sf.gazpachoquest.domain.core.Question;
import net.sf.gazpachoquest.domain.core.QuestionOption;
import net.sf.gazpachoquest.domain.core.QuestionnaireDefinition;
import net.sf.gazpachoquest.domain.core.Section;
import net.sf.gazpachoquest.domain.core.embeddables.LabelLanguageSettings;
import net.sf.gazpachoquest.domain.core.embeddables.QuestionLanguageSettings;
import net.sf.gazpachoquest.domain.core.embeddables.QuestionOptionLanguageSettings;
import net.sf.gazpachoquest.domain.core.embeddables.QuestionnaireDefinitionLanguageSettings;
import net.sf.gazpachoquest.domain.core.embeddables.SectionLanguageSettings;
import net.sf.gazpachoquest.domain.i18.LabelTranslation;
import net.sf.gazpachoquest.domain.i18.QuestionOptionTranslation;
import net.sf.gazpachoquest.domain.i18.QuestionTranslation;
import net.sf.gazpachoquest.domain.i18.QuestionnaireDefinitionTranslation;
import net.sf.gazpachoquest.domain.i18.SectionTranslation;
import net.sf.gazpachoquest.dto.LabelDTO;
import net.sf.gazpachoquest.dto.LabelLanguageSettingsDTO;
import net.sf.gazpachoquest.dto.LabelSetDTO;
import net.sf.gazpachoquest.dto.QuestionDTO;
import net.sf.gazpachoquest.dto.QuestionOptionDTO;
import net.sf.gazpachoquest.dto.QuestionnaireDefinitionDTO;
import net.sf.gazpachoquest.dto.SectionDTO;
import net.sf.gazpachoquest.dto.embeddables.QuestionLanguageSettingsDTO;
import net.sf.gazpachoquest.dto.embeddables.QuestionOptionLanguageSettingsDTO;
import net.sf.gazpachoquest.dto.embeddables.QuestionnaireDefinitionLanguageSettingsDTO;
import net.sf.gazpachoquest.dto.embeddables.SectionLanguageSettingsDTO;
import net.sf.gazpachoquest.dto.support.TranslationDTO;
import net.sf.gazpachoquest.facades.QuestionnaireDefinitionEditorFacade;
import net.sf.gazpachoquest.services.LabelService;
import net.sf.gazpachoquest.services.LabelSetService;
import net.sf.gazpachoquest.services.QuestionOptionService;
import net.sf.gazpachoquest.services.QuestionService;
import net.sf.gazpachoquest.services.QuestionnaireDefinitionService;
import net.sf.gazpachoquest.services.SectionService;
import org.dozer.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public final class QuestionnaireDefinitionEditorFacadeImpl implements QuestionnaireDefinitionEditorFacade {
@Autowired
private LabelService labelService;
@Autowired
private LabelSetService labelSetService;
@Autowired
private Mapper mapper;
@Autowired
private SectionService sectionService;
@Autowired
private QuestionOptionService questionOptionService;
@Autowired
private QuestionService questionService;
@Autowired
@Qualifier("questionnaireDefinitionServiceImpl")
private QuestionnaireDefinitionService questionnaireDefinitionService;
public QuestionnaireDefinitionEditorFacadeImpl() {
super();
}
@Override
public void confirm(final QuestionnaireDefinitionDTO questionnaireDefinitionDTO) {
QuestionnaireDefinition entity = mapper.map(questionnaireDefinitionDTO, QuestionnaireDefinition.class);
questionnaireDefinitionService.confirm(entity);
}
@Override
public LabelDTO save(final LabelDTO label) {
Label entity = mapper.map(label, Label.class);
entity = labelService.save(entity);
return mapper.map(entity, LabelDTO.class);
}
@Override
public LabelSetDTO save(final LabelSetDTO labelSet) {
LabelSet entity = mapper.map(labelSet, LabelSet.class);
entity = labelSetService.save(entity);
return mapper.map(entity, LabelSetDTO.class);
}
@Override
public QuestionDTO save(final QuestionDTO question) {
Question entity = mapper.map(question, Question.class);
entity = questionService.save(entity);
return mapper.map(entity, QuestionDTO.class);
}
@Override
public SectionDTO save(final SectionDTO section) {
Section entity = mapper.map(section, Section.class);
entity = sectionService.save(entity);
return mapper.map(entity, SectionDTO.class);
}
@Override
public QuestionOptionDTO save(final QuestionOptionDTO questionOption) {
QuestionOption entity = mapper.map(questionOption, QuestionOption.class);
entity = questionOptionService.save(entity);
return mapper.map(entity, QuestionOptionDTO.class);
}
@Override
public QuestionnaireDefinitionDTO save(final QuestionnaireDefinitionDTO questionnaireDefinitionDTO) {
QuestionnaireDefinition entity = mapper.map(questionnaireDefinitionDTO, QuestionnaireDefinition.class);
entity = questionnaireDefinitionService.save(entity);
if (questionnaireDefinitionDTO.getSections().isEmpty()) {
return mapper.map(entity, QuestionnaireDefinitionDTO.class);
} else {
return mapper.map(entity, QuestionnaireDefinitionDTO.class, "toDTOwithSections");
}
}
@Override
public TranslationDTO<LabelDTO, LabelLanguageSettingsDTO> saveLabelTranslation(
final TranslationDTO<LabelDTO, LabelLanguageSettingsDTO> translation) {
LabelLanguageSettings languageSettings = mapper.map(translation.getLanguageSettings(),
LabelLanguageSettings.class);
Label entity = mapper.map(translation.getTranslatedEntity(), Label.class);
LabelTranslation translationEntity = LabelTranslation.with().language(translation.getLanguage())
.languageSettings(languageSettings).label(entity).build();
LabelTranslation tr = labelService.saveTranslation(translationEntity);
translation.setId(tr.getId());
return translation;
}
@Override
public TranslationDTO<SectionDTO, SectionLanguageSettingsDTO> saveSectionTranslation(
final TranslationDTO<SectionDTO, SectionLanguageSettingsDTO> translation) {
SectionLanguageSettings languageSettings = mapper.map(translation.getLanguageSettings(),
SectionLanguageSettings.class);
Section entity = mapper.map(translation.getTranslatedEntity(), Section.class);
SectionTranslation translationEntity = SectionTranslation.with().language(translation.getLanguage())
.languageSettings(languageSettings).section(entity).build();
SectionTranslation tr = sectionService.saveTranslation(translationEntity);
translation.setId(tr.getId());
return translation;
}
@Override
public TranslationDTO<QuestionOptionDTO, QuestionOptionLanguageSettingsDTO> saveQuestionOptionTranslation(
final TranslationDTO<QuestionOptionDTO, QuestionOptionLanguageSettingsDTO> translation) {
QuestionOptionLanguageSettings languageSettings = mapper.map(translation.getLanguageSettings(),
QuestionOptionLanguageSettings.class);
QuestionOption entity = mapper.map(translation.getTranslatedEntity(), QuestionOption.class);
QuestionOptionTranslation translationEntity = QuestionOptionTranslation.with()
.language(translation.getLanguage()).languageSettings(languageSettings).questionOption(entity).build();
QuestionOptionTranslation tr = questionOptionService.saveTranslation(translationEntity);
translation.setId(tr.getId());
return translation;
}
@Override
public TranslationDTO<QuestionDTO, QuestionLanguageSettingsDTO> saveQuestionTranslation(
final TranslationDTO<QuestionDTO, QuestionLanguageSettingsDTO> translation) {
QuestionLanguageSettings languageSettings = mapper.map(translation.getLanguageSettings(),
QuestionLanguageSettings.class);
Question entity = mapper.map(translation.getTranslatedEntity(), Question.class);
QuestionTranslation translationEntity = QuestionTranslation.with().language(translation.getLanguage())
.languageSettings(languageSettings).question(entity).build();
QuestionTranslation tr = questionService.saveTranslation(translationEntity);
translation.setId(tr.getId());
return translation;
}
@Override
public TranslationDTO<QuestionnaireDefinitionDTO, QuestionnaireDefinitionLanguageSettingsDTO> saveQuestionnaireTranslation(
final TranslationDTO<QuestionnaireDefinitionDTO, QuestionnaireDefinitionLanguageSettingsDTO> translation) {
QuestionnaireDefinitionLanguageSettings languageSettings = mapper.map(translation.getLanguageSettings(),
QuestionnaireDefinitionLanguageSettings.class);
QuestionnaireDefinition entity = mapper.map(translation.getTranslatedEntity(), QuestionnaireDefinition.class);
QuestionnaireDefinitionTranslation translationEntity = QuestionnaireDefinitionTranslation.with()
.language(translation.getLanguage()).languageSettings(languageSettings).questionnaireDefinition(entity)
.build();
QuestionnaireDefinitionTranslation tr = questionnaireDefinitionService.saveTranslation(translationEntity);
translation.setId(tr.getId());
return translation;
}
}