1
2
3
4
5
6
7 package fr.ifremer.quadrige3.core.dao.system.rule;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 import fr.ifremer.quadrige3.core.dao.technical.Assert;
30 import fr.ifremer.quadrige3.core.vo.system.rule.RulePreconditionVO;
31 import org.hibernate.SessionFactory;
32 import org.hibernate.type.StringType;
33 import org.springframework.beans.factory.annotation.Autowired;
34 import org.springframework.context.annotation.Lazy;
35 import org.springframework.stereotype.Repository;
36
37 import java.sql.Timestamp;
38 import java.util.Collection;
39 import java.util.List;
40
41
42
43
44 @Repository("rulePreconditionDao")
45 @Lazy
46 public class RulePreconditionDaoImpl
47 extends RulePreconditionDaoBase
48 implements RulePreconditionExtendDao
49 {
50
51
52
53 @Autowired
54 public RulePreconditionDaoImpl(SessionFactory sessionFactory) {
55 super();
56 setSessionFactory(sessionFactory);
57 }
58
59 @Override
60 protected RulePreconditionVO handleSave(RulePreconditionVO source, Timestamp updateDt) {
61 Assert.notNull(source);
62 Assert.notNull(source.getRuleCd());
63
64
65 Rule parent = get(RuleImpl.class, source.getRuleCd());
66
67
68 RulePrecondition entity = null;
69 boolean isNew = false;
70 if (source.getRulePrecondId() != null) {
71 entity = get(source.getRulePrecondId());
72 }
73 if (entity == null) {
74 entity = RulePrecondition.Factory.newInstance();
75 entity.setRule(parent);
76 parent.getRulePreconditions().clear();
77 parent.addRulePreconditions(entity);
78 isNew = true;
79 }
80
81
82
83
84
85
86
87
88 rulePreconditionVOToEntity(source, entity, true);
89
90
91 if (isNew) {
92 getSession().save(entity);
93 source.setRulePrecondId(entity.getRulePrecondId());
94 } else {
95 getSession().update(entity);
96 }
97
98 return source;
99 }
100
101 @Override
102 public void toRulePreconditionVO(RulePrecondition source, RulePreconditionVO target) {
103 super.toRulePreconditionVO(source, target);
104
105
106 if (source.getRule() == null) {
107 target.setRuleCd(null);
108 } else {
109 target.setRuleCd(source.getRule().getRuleCd());
110 }
111
112
113 if (source.getUsedRule() == null) {
114 target.setUsedRuleCd(null);
115 } else {
116 target.setUsedRuleCd(source.getUsedRule().getRuleCd());
117 }
118 }
119
120 @Override
121 protected void handleRemoveByIds(Collection<Integer> rulePreconditionIds) {
122 rulePreconditionIds.forEach(this::remove);
123 }
124
125 @Override
126 public RulePrecondition rulePreconditionVOToEntity(RulePreconditionVO rulePreconditionVO) {
127 RulePrecondition entity = this.loadRulePreconditionFromRulePreconditionVO(rulePreconditionVO);
128 this.rulePreconditionVOToEntity(rulePreconditionVO, entity, true);
129 return entity;
130 }
131
132 @Override
133 public void rulePreconditionVOToEntity(RulePreconditionVO source, RulePrecondition target, boolean copyIfNull) {
134 super.rulePreconditionVOToEntity(source, target, copyIfNull);
135
136
137 if (copyIfNull || source.getRulePrecondId() != null) {
138 target.setRulePrecondId(source.getRulePrecondId());
139 }
140
141
142 if (copyIfNull || source.getRuleCd() != null) {
143 if (source.getRuleCd() == null) {
144 target.setRule(null);
145 } else {
146 target.setRule(load(RuleImpl.class, source.getRuleCd()));
147 }
148 }
149
150
151 if (copyIfNull || source.getUsedRuleCd() != null) {
152 if (source.getUsedRuleCd() == null) {
153 target.setUsedRule(null);
154 } else {
155 target.setUsedRule(load(RuleImpl.class, source.getUsedRuleCd()));
156 }
157 }
158 }
159
160
161
162
163
164
165 private RulePrecondition loadRulePreconditionFromRulePreconditionVO(RulePreconditionVO rulePreconditionVO) {
166 RulePrecondition rulePrecondition = null;
167 if (rulePreconditionVO.getRulePrecondId() != null) {
168 rulePrecondition = this.get(rulePreconditionVO.getRulePrecondId());
169 }
170 if (rulePrecondition == null) {
171 rulePrecondition = RulePrecondition.Factory.newInstance();
172 }
173 return rulePrecondition;
174 }
175
176 @Override
177 public List<RulePrecondition> getByCode(String code) {
178 return queryListTyped("rulePreconditionsByCode", "code", StringType.INSTANCE, code);
179 }
180 }