save(QuestionModelInterface)   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
dl 0
loc 9
rs 9.95
1
package easytests.core.services;
2
3
import easytests.core.entities.QuestionEntity;
4
import easytests.core.mappers.QuestionsMapper;
5
import easytests.core.models.QuestionModel;
6
import easytests.core.models.QuestionModelInterface;
7
import easytests.core.models.TopicModelInterface;
8
import easytests.core.options.QuestionsOptionsInterface;
9
import easytests.core.services.exceptions.DeleteUnidentifiedModelException;
10
import java.util.ArrayList;
11
import java.util.List;
12
import org.springframework.beans.factory.annotation.Autowired;
13
import org.springframework.stereotype.Service;
14
15
/**
16
 * @author firkhraag
17
 */
18
@Service
19
public class QuestionsService implements QuestionsServiceInterface {
20
21
    @Autowired
22
    private QuestionsMapper questionsMapper;
23
24
    @Autowired
25
    private AnswersService answersService;
26
27
    @Autowired
28
    private TopicsService topicsService;
29
30
    @Autowired
31
    private QuestionTypesService questionTypesService;
32
33
    @Override
34
    public List<QuestionModelInterface> findAll() {
35
        return this.map(this.questionsMapper.findAll());
36
    }
37
38
    @Override
39
    public List<QuestionModelInterface> findAll(QuestionsOptionsInterface questionsOptions) {
40
        return this.withServices(questionsOptions).withRelations(this.findAll());
41
    }
42
43
    @Override
44
45
    public QuestionModelInterface find(Integer id) {
46
        return this.map(this.questionsMapper.find(id));
47
    }
48
49
    @Override
50
    public QuestionModelInterface find(Integer id, QuestionsOptionsInterface questionsOptions) {
51
        return this.withServices(questionsOptions).withRelations(this.find(id));
52
    }
53
54
    @Override
55
    public List<QuestionModelInterface> findByTopic(TopicModelInterface topicModel) {
56
        return this.map(this.questionsMapper.findByTopicId(topicModel.getId()));
57
    }
58
59
    @Override
60
    public List<QuestionModelInterface> findByTopic(
61
            TopicModelInterface topicModel,
62
            QuestionsOptionsInterface questionsOptions
63
    ) {
64
        return questionsOptions.withRelations(this.map(this.questionsMapper.findByTopicId(topicModel.getId())));
65
    }
66
67
    @Override
68
    public void save(QuestionModelInterface questionModel) {
69
        final QuestionEntity questionEntity = this.map(questionModel);
70
        if (questionEntity.getId() == null) {
71
            this.questionsMapper.insert(questionEntity);
72
            questionModel.setId(questionEntity.getId());
73
            return;
74
        }
75
        this.questionsMapper.update(questionEntity);
76
    }
77
78
    @Override
79
    public void save(QuestionModelInterface questionModel, QuestionsOptionsInterface questionsOptions) {
80
        this.withServices(questionsOptions).saveWithRelations(questionModel);
81
    }
82
83
    @Override
84
    public void save(List<QuestionModelInterface> questionsModels) {
85
        for (QuestionModelInterface questionModel: questionsModels) {
86
            this.save(questionModel);
87
        }
88
    }
89
90
    @Override
91
    public void save(List<QuestionModelInterface> questionsModels, QuestionsOptionsInterface questionsOptions) {
92
        for (QuestionModelInterface questionModel: questionsModels) {
93
            this.save(questionModel, questionsOptions);
94
        }
95
    }
96
97
    @Override
98
    public void delete(QuestionModelInterface questionModel) {
99
        final QuestionEntity questionEntity = this.map(questionModel);
100
        if (questionEntity.getId() == null) {
101
            throw new DeleteUnidentifiedModelException();
102
        }
103
        this.questionsMapper.delete(questionEntity);
104
    }
105
106
    @Override
107
    public void delete(QuestionModelInterface questionModel, QuestionsOptionsInterface questionsOptions) {
108
        this.withServices(questionsOptions).deleteWithRelations(questionModel);
109
    }
110
111
    @Override
112
    public void delete(List<QuestionModelInterface> questionsModels) {
113
        for (QuestionModelInterface questionModel: questionsModels) {
114
            this.delete(questionModel);
115
        }
116
    }
117
118
    @Override
119
    public void delete(List<QuestionModelInterface> questionsModels, QuestionsOptionsInterface questionsOptions) {
120
        for (QuestionModelInterface questionModel: questionsModels) {
121
            this.delete(questionModel, questionsOptions);
122
        }
123
    }
124
125
    private QuestionsOptionsInterface withServices(QuestionsOptionsInterface questionsOptions) {
126
        questionsOptions.setQuestionsService(this);
127
        questionsOptions.setAnswersService(this.answersService);
128
        questionsOptions.setTopicsService(this.topicsService);
129
        questionsOptions.setQuestionTypesService(this.questionTypesService);
130
        return questionsOptions;
131
    }
132
133
    private QuestionModelInterface map(QuestionEntity questionEntity) {
134
        if (questionEntity == null) {
135
            return null;
136
        }
137
        final QuestionModelInterface questionModel = new QuestionModel();
138
        questionModel.map(questionEntity);
139
        return questionModel;
140
    }
141
142
    private QuestionEntity map(QuestionModelInterface questionModel) {
143
        final QuestionEntity questionEntity = new QuestionEntity();
144
        questionEntity.map(questionModel);
145
        return questionEntity;
146
    }
147
148
    private List<QuestionModelInterface> map(List<QuestionEntity> questionsList) {
149
        final List<QuestionModelInterface> resultQuestionList = new ArrayList(questionsList.size());
150
        for (QuestionEntity question: questionsList) {
151
            resultQuestionList.add(this.map(question));
152
        }
153
        return resultQuestionList;
154
    }
155
}
156