annotate src/main/java/org/mpi/openmind/repository/services/AbstractPersistenceService.java @ 80:4c9ceb28cfd0

fix some NPEs with refreshRelations
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Fri, 16 Jun 2017 15:41:39 +0200
parents e0be7c0030f5
children 4845dff46ad9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
jurzua
parents:
diff changeset
1 package org.mpi.openmind.repository.services;
jurzua
parents:
diff changeset
2
jurzua
parents:
diff changeset
3 import java.text.DecimalFormat;
jurzua
parents:
diff changeset
4 import java.util.ArrayList;
jurzua
parents:
diff changeset
5 import java.util.List;
jurzua
parents:
diff changeset
6 import java.util.Map;
jurzua
parents:
diff changeset
7
jurzua
parents:
diff changeset
8 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
9 import org.apache.log4j.Logger;
jurzua
parents:
diff changeset
10 import org.hibernate.Query;
jurzua
parents:
diff changeset
11 import org.hibernate.Session;
jurzua
parents:
diff changeset
12 import org.mpi.openmind.configuration.ConfigurationService;
jurzua
parents:
diff changeset
13 import org.mpi.openmind.repository.bo.Attribute;
jurzua
parents:
diff changeset
14 import org.mpi.openmind.repository.bo.Entity;
jurzua
parents:
diff changeset
15 import org.mpi.openmind.repository.bo.Node;
jurzua
parents:
diff changeset
16 import org.mpi.openmind.repository.bo.Relation;
jurzua
parents:
diff changeset
17 import org.mpi.openmind.repository.bo.View;
jurzua
parents:
diff changeset
18 import org.mpi.openmind.repository.bo.utils.Sequence;
jurzua
parents:
diff changeset
19 import org.mpi.openmind.repository.utils.HibernateUtil;
jurzua
parents:
diff changeset
20 import org.mpi.openmind.repository.utils.OwnValueGenerator;
jurzua
parents:
diff changeset
21
jurzua
parents:
diff changeset
22 /**
jurzua
parents:
diff changeset
23 *
jurzua
parents:
diff changeset
24 * @author jurzua
jurzua
parents:
diff changeset
25 */
jurzua
parents:
diff changeset
26 public abstract class AbstractPersistenceService {
jurzua
parents:
diff changeset
27
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
28 private ConfigurationService configurationService;
1
jurzua
parents:
diff changeset
29
jurzua
parents:
diff changeset
30 private OwnValueGenerator ownValueGenerator;
jurzua
parents:
diff changeset
31
jurzua
parents:
diff changeset
32 private final static String NODE_SEQUENCE = "nodeSequence";
jurzua
parents:
diff changeset
33
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
34 private static Logger logger = Logger.getLogger(AbstractPersistenceService.class);
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
35
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
36 public static final String TRANSACTION_LOGGER = "openmind.transactionlog";
1
jurzua
parents:
diff changeset
37
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
38 private static Logger txLog = Logger.getLogger(TRANSACTION_LOGGER);
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
39
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
40 private boolean importMode = false;
1
jurzua
parents:
diff changeset
41
jurzua
parents:
diff changeset
42 public AbstractPersistenceService() {
jurzua
parents:
diff changeset
43 }
jurzua
parents:
diff changeset
44
jurzua
parents:
diff changeset
45 public String generateOwnValue(Entity entity) {
jurzua
parents:
diff changeset
46 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
47 String ownValue = null;
jurzua
parents:
diff changeset
48
jurzua
parents:
diff changeset
49 try {
jurzua
parents:
diff changeset
50 session.getTransaction().begin();
jurzua
parents:
diff changeset
51 ownValue = this.ownValueGenerator.generateOwnValue(entity, session);
jurzua
parents:
diff changeset
52 } catch (Exception e) {
jurzua
parents:
diff changeset
53 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
54 // e.printStackTrace();
jurzua
parents:
diff changeset
55 } finally {
jurzua
parents:
diff changeset
56 session.getTransaction().commit();
jurzua
parents:
diff changeset
57 }
jurzua
parents:
diff changeset
58
jurzua
parents:
diff changeset
59 return ownValue;
jurzua
parents:
diff changeset
60 }
jurzua
parents:
diff changeset
61
jurzua
parents:
diff changeset
62 public int dropAssertions() {
jurzua
parents:
diff changeset
63 int row = 0;
jurzua
parents:
diff changeset
64 try {
jurzua
parents:
diff changeset
65 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
66 .getCurrentSession();
jurzua
parents:
diff changeset
67 session.beginTransaction();
jurzua
parents:
diff changeset
68 String sql = "DELETE FROM Node WHERE type = 'ABox'";
jurzua
parents:
diff changeset
69 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
70 row = query.executeUpdate();
jurzua
parents:
diff changeset
71
jurzua
parents:
diff changeset
72 logger.info("Drop assertions - rows deleted= " + row);
jurzua
parents:
diff changeset
73
jurzua
parents:
diff changeset
74 session.getTransaction().commit();
jurzua
parents:
diff changeset
75 } catch (Exception e) {
jurzua
parents:
diff changeset
76 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
77 // e.printStackTrace();
jurzua
parents:
diff changeset
78 }
jurzua
parents:
diff changeset
79 return row;
jurzua
parents:
diff changeset
80 }
jurzua
parents:
diff changeset
81
jurzua
parents:
diff changeset
82 public int dropDefinitions() {
jurzua
parents:
diff changeset
83 int row = 0;
jurzua
parents:
diff changeset
84 try {
jurzua
parents:
diff changeset
85 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
86 .getCurrentSession();
jurzua
parents:
diff changeset
87 session.beginTransaction();
jurzua
parents:
diff changeset
88 String sql = "DELETE FROM Node WHERE type = 'TBox'";
jurzua
parents:
diff changeset
89 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
90 row = query.executeUpdate();
jurzua
parents:
diff changeset
91
jurzua
parents:
diff changeset
92 logger.info("Drop definitions - rows deleted= " + row);
jurzua
parents:
diff changeset
93
jurzua
parents:
diff changeset
94 session.getTransaction().commit();
jurzua
parents:
diff changeset
95 } catch (Exception e) {
jurzua
parents:
diff changeset
96 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
97 // e.printStackTrace();
jurzua
parents:
diff changeset
98 }
jurzua
parents:
diff changeset
99 return row;
jurzua
parents:
diff changeset
100 }
jurzua
parents:
diff changeset
101
jurzua
parents:
diff changeset
102 public void saveOrUpdateObject(Object obj) {
jurzua
parents:
diff changeset
103 try {
jurzua
parents:
diff changeset
104 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
105 .getCurrentSession();
jurzua
parents:
diff changeset
106 session.getTransaction().begin();
jurzua
parents:
diff changeset
107 session.saveOrUpdate(obj);
jurzua
parents:
diff changeset
108 session.getTransaction().commit();
jurzua
parents:
diff changeset
109 } catch (Exception e) {
jurzua
parents:
diff changeset
110 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
111 }
jurzua
parents:
diff changeset
112 }
jurzua
parents:
diff changeset
113
jurzua
parents:
diff changeset
114 private void saveNode0(Session session, Node node, Sequence idSequence){
jurzua
parents:
diff changeset
115 node.autoNormalize();
jurzua
parents:
diff changeset
116 node.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
117
jurzua
parents:
diff changeset
118 if(node.getModificationTime() == null){
jurzua
parents:
diff changeset
119 node.setModificationTime(System.currentTimeMillis());
jurzua
parents:
diff changeset
120 }
jurzua
parents:
diff changeset
121 if(node.getVersion() == null){
jurzua
parents:
diff changeset
122 node.increaseVersion();
jurzua
parents:
diff changeset
123 }
jurzua
parents:
diff changeset
124
jurzua
parents:
diff changeset
125 if (node.getId() == null){
jurzua
parents:
diff changeset
126 node.setId(idSequence.generateId());
jurzua
parents:
diff changeset
127 }
jurzua
parents:
diff changeset
128
jurzua
parents:
diff changeset
129 if (node.getRowId() == null){
34
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
130 logger.debug("Save node: "+node.toString());
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
131 txLog.info("save node: "+node.toEncString());
1
jurzua
parents:
diff changeset
132 session.save(node);
jurzua
parents:
diff changeset
133 }else{
34
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
134 txLog.info("merge node: "+node.toEncString());
1
jurzua
parents:
diff changeset
135 session.merge(node);
jurzua
parents:
diff changeset
136 }
jurzua
parents:
diff changeset
137
jurzua
parents:
diff changeset
138 logger.info("Saved node\t" + node);
jurzua
parents:
diff changeset
139 }
jurzua
parents:
diff changeset
140
jurzua
parents:
diff changeset
141 public void saveNode(Node node) throws Exception {
jurzua
parents:
diff changeset
142
jurzua
parents:
diff changeset
143 logger.info("Saving node\t" + node);
jurzua
parents:
diff changeset
144
jurzua
parents:
diff changeset
145 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
146 session.getTransaction().begin();
jurzua
parents:
diff changeset
147
jurzua
parents:
diff changeset
148 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
149
jurzua
parents:
diff changeset
150 this.saveNode0(session, node, idSequence);
jurzua
parents:
diff changeset
151
jurzua
parents:
diff changeset
152 session.save(idSequence);
jurzua
parents:
diff changeset
153
jurzua
parents:
diff changeset
154 session.getTransaction().commit();
jurzua
parents:
diff changeset
155 logger.info("Node saved\t" + node);
jurzua
parents:
diff changeset
156 }
jurzua
parents:
diff changeset
157
jurzua
parents:
diff changeset
158 public void saveNodeList(List<Node> nodeList) throws Exception{
jurzua
parents:
diff changeset
159
jurzua
parents:
diff changeset
160 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
161 session.getTransaction().begin();
jurzua
parents:
diff changeset
162
jurzua
parents:
diff changeset
163 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
164 /*
jurzua
parents:
diff changeset
165 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
166 DecimalFormat df = new DecimalFormat("#.##");
jurzua
parents:
diff changeset
167 int counter = 0;
jurzua
parents:
diff changeset
168 */
jurzua
parents:
diff changeset
169 logger.info("##### Saving Node List: " + nodeList.size() + " #####");
jurzua
parents:
diff changeset
170
jurzua
parents:
diff changeset
171 for (Node node : nodeList) {
jurzua
parents:
diff changeset
172 this.saveNode0(session, node, idSequence);
jurzua
parents:
diff changeset
173 /*
jurzua
parents:
diff changeset
174 double percent = ((double) counter / (double) nodeList.size()) * 100.0;
jurzua
parents:
diff changeset
175 long diff = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
176 double min = (double) diff / (double) (60 * 1000);
jurzua
parents:
diff changeset
177
jurzua
parents:
diff changeset
178 if ((percent % 10) < 0.005) {
jurzua
parents:
diff changeset
179 logger.debug("\n[" + df.format(percent) + " %] counter: "
jurzua
parents:
diff changeset
180 + counter + " / " + nodeList.size());
jurzua
parents:
diff changeset
181
jurzua
parents:
diff changeset
182 logger.debug("Tempo: " + (double) counter / min);
jurzua
parents:
diff changeset
183 }
jurzua
parents:
diff changeset
184 counter++;
jurzua
parents:
diff changeset
185 */
jurzua
parents:
diff changeset
186 }
jurzua
parents:
diff changeset
187
jurzua
parents:
diff changeset
188 session.save(idSequence);
jurzua
parents:
diff changeset
189 session.getTransaction().commit();
jurzua
parents:
diff changeset
190 }
jurzua
parents:
diff changeset
191
jurzua
parents:
diff changeset
192 /**
jurzua
parents:
diff changeset
193 * This method delete the nodes and its history.
jurzua
parents:
diff changeset
194 *
jurzua
parents:
diff changeset
195 * @param nodeList
jurzua
parents:
diff changeset
196 */
jurzua
parents:
diff changeset
197 public void removeNode(Node node) {
jurzua
parents:
diff changeset
198 try {
jurzua
parents:
diff changeset
199 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
200 .getCurrentSession();
jurzua
parents:
diff changeset
201 session.getTransaction().begin();
jurzua
parents:
diff changeset
202
jurzua
parents:
diff changeset
203 this.removeNodesById(node.getId(), session);
jurzua
parents:
diff changeset
204
jurzua
parents:
diff changeset
205 session.getTransaction().commit();
jurzua
parents:
diff changeset
206 } catch (Exception e) {
jurzua
parents:
diff changeset
207 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
208 // e.printStackTrace();
jurzua
parents:
diff changeset
209 }
jurzua
parents:
diff changeset
210 }
jurzua
parents:
diff changeset
211
jurzua
parents:
diff changeset
212 /**
jurzua
parents:
diff changeset
213 * This method delete the nodes and its history.
jurzua
parents:
diff changeset
214 *
jurzua
parents:
diff changeset
215 * @param nodeList
jurzua
parents:
diff changeset
216 */
jurzua
parents:
diff changeset
217 public void removeNodeList(List<Node> nodeList) {
jurzua
parents:
diff changeset
218 try {
jurzua
parents:
diff changeset
219 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
220 .getCurrentSession();
jurzua
parents:
diff changeset
221 session.getTransaction().begin();
jurzua
parents:
diff changeset
222
jurzua
parents:
diff changeset
223 logger.debug("##### Deleting Node List: " + nodeList.size()
jurzua
parents:
diff changeset
224 + " #####");
jurzua
parents:
diff changeset
225
jurzua
parents:
diff changeset
226 for (Node node : nodeList) {
jurzua
parents:
diff changeset
227 this.removeNodesById(node.getId(), session);
jurzua
parents:
diff changeset
228 }
jurzua
parents:
diff changeset
229
jurzua
parents:
diff changeset
230 session.getTransaction().commit();
jurzua
parents:
diff changeset
231 } catch (Exception e) {
jurzua
parents:
diff changeset
232 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
233 // e.printStackTrace();
jurzua
parents:
diff changeset
234 }
jurzua
parents:
diff changeset
235 }
jurzua
parents:
diff changeset
236
jurzua
parents:
diff changeset
237 /**
jurzua
parents:
diff changeset
238 * Save every part of the entity but not generate new versions nor ownValue
jurzua
parents:
diff changeset
239 *
jurzua
parents:
diff changeset
240 * @param nodeList
jurzua
parents:
diff changeset
241 */
jurzua
parents:
diff changeset
242 public void saveEntityListAsNode(List<Entity> entList) {
jurzua
parents:
diff changeset
243 int entitiesSize = 0;
jurzua
parents:
diff changeset
244 int nodeSize = 0;
jurzua
parents:
diff changeset
245 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
246 try {
jurzua
parents:
diff changeset
247 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
248 .getCurrentSession();
jurzua
parents:
diff changeset
249 session.getTransaction().begin();
jurzua
parents:
diff changeset
250
jurzua
parents:
diff changeset
251 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
252
jurzua
parents:
diff changeset
253 DecimalFormat df = new DecimalFormat("#.##");
jurzua
parents:
diff changeset
254 int counter = 0;
jurzua
parents:
diff changeset
255
jurzua
parents:
diff changeset
256 List<Node> nodeList = generateNodeList(entList);
jurzua
parents:
diff changeset
257 logger.debug("##### Saving Node List #####");
jurzua
parents:
diff changeset
258 logger.debug("Entities: " + entList.size() + " #####");
jurzua
parents:
diff changeset
259 logger.debug("Nodes: " + nodeList.size() + " #####");
jurzua
parents:
diff changeset
260
jurzua
parents:
diff changeset
261 entitiesSize = entList.size();
jurzua
parents:
diff changeset
262 nodeSize = nodeList.size();
jurzua
parents:
diff changeset
263
jurzua
parents:
diff changeset
264 for (Node node : nodeList) {
jurzua
parents:
diff changeset
265
jurzua
parents:
diff changeset
266 node.autoNormalize();
jurzua
parents:
diff changeset
267
jurzua
parents:
diff changeset
268 if (node.getId() == null)
jurzua
parents:
diff changeset
269 node.setId(idSequence.generateId());
34
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
270 if (node.getRowId() == null) {
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
271 logger.debug("Save node from EntityListAsNode: "+node);
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
272 txLog.info("save node: "+node.toEncString());
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
273 session.save(node);
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
274 } else {
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
275 txLog.info("merge node: "+node.toEncString());
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
276 session.merge(node);
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
277
5737ab564b94 more transaction logging. logs more attributes and logs nodes.
casties
parents: 33
diff changeset
278 }
1
jurzua
parents:
diff changeset
279
jurzua
parents:
diff changeset
280 double percent = ((double) counter / (double) nodeList.size()) * 100.0;
jurzua
parents:
diff changeset
281 long diff = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
282 double min = (double) diff / (double) (60 * 1000);
jurzua
parents:
diff changeset
283
jurzua
parents:
diff changeset
284 if ((percent % 10) < 0.005) {
jurzua
parents:
diff changeset
285 logger.debug("\n[" + df.format(percent) + " %] counter: "
jurzua
parents:
diff changeset
286 + counter + " / " + nodeList.size());
jurzua
parents:
diff changeset
287
jurzua
parents:
diff changeset
288 logger.debug("Tempo: " + (double) counter / min);
jurzua
parents:
diff changeset
289 }
jurzua
parents:
diff changeset
290 counter++;
jurzua
parents:
diff changeset
291 }
jurzua
parents:
diff changeset
292
jurzua
parents:
diff changeset
293 session.save(idSequence);
jurzua
parents:
diff changeset
294 session.getTransaction().commit();
jurzua
parents:
diff changeset
295
jurzua
parents:
diff changeset
296 StringBuilder sb = new StringBuilder();
jurzua
parents:
diff changeset
297 sb.append("\n\t#### saveEntityListAsNode ####\n");
jurzua
parents:
diff changeset
298 sb.append("\tentitiesSize=\t" + entitiesSize + "\n");
jurzua
parents:
diff changeset
299 sb.append("\tnodeSize=\t" + nodeSize + "\n");
jurzua
parents:
diff changeset
300 sb.append("\ttime[ms]=\t" + (System.currentTimeMillis() - start)
jurzua
parents:
diff changeset
301 + "\n");
jurzua
parents:
diff changeset
302 logger.info(sb.toString());
jurzua
parents:
diff changeset
303
jurzua
parents:
diff changeset
304 } catch (Exception e) {
jurzua
parents:
diff changeset
305 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
306 e.printStackTrace();
jurzua
parents:
diff changeset
307 }
jurzua
parents:
diff changeset
308 }
jurzua
parents:
diff changeset
309
jurzua
parents:
diff changeset
310 private List<Node> generateNodeList(List<Entity> list) {
jurzua
parents:
diff changeset
311 List<Node> list0 = new ArrayList<Node>();
jurzua
parents:
diff changeset
312 for (Entity ent : list) {
jurzua
parents:
diff changeset
313 list0.add(ent);
jurzua
parents:
diff changeset
314 for (Attribute att : ent.getAttributes()) {
jurzua
parents:
diff changeset
315 list0.add(att);
jurzua
parents:
diff changeset
316 }
jurzua
parents:
diff changeset
317 for (Relation rel : ent.getSourceRelations()) {
jurzua
parents:
diff changeset
318 list0.add(rel);
jurzua
parents:
diff changeset
319 }
jurzua
parents:
diff changeset
320 for (Relation rel : ent.getTargetRelations()) {
jurzua
parents:
diff changeset
321 list0.add(rel);
jurzua
parents:
diff changeset
322 }
jurzua
parents:
diff changeset
323 }
jurzua
parents:
diff changeset
324 return list0;
jurzua
parents:
diff changeset
325 }
jurzua
parents:
diff changeset
326
jurzua
parents:
diff changeset
327 /**
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
328 * Saves all given entities without attributes and relations without creating new versions.
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
329 *
1
jurzua
parents:
diff changeset
330 * @param nodeList
jurzua
parents:
diff changeset
331 */
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
332 public void saveEntityListAsNodeWithoutContent(List<Entity> nodeList) throws Exception {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
333 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
334 try {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
335 session.getTransaction().begin();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
336 Sequence idSequence = this.getIdSequence(session);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
337
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
338 logger.debug("START saving Node list of size " + nodeList.size());
1
jurzua
parents:
diff changeset
339
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
340 for (Entity node : nodeList) {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
341 node.autoNormalize();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
342 if (node.getId() == null) {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
343 node.setId(idSequence.generateId());
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
344 }
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
345 if (node.getRowId() == null) {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
346 // node is new
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
347 logger.debug("Saving node from EntityListAsNodeWithoutContent: " + node);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
348 txLog.info("save node: " + node.toEncString());
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
349 session.save(node);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
350 } else {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
351 txLog.info("merge node: " + node.toEncString());
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
352 session.merge(node);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
353 }
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
354 }
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
355 // update sequence
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
356 session.save(idSequence);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
357
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
358 logger.debug("END saving Node list.");
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
359
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
360 } catch (Exception e) {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
361 logger.error(e);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
362 } finally {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
363 session.getTransaction().commit();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
364 }
1
jurzua
parents:
diff changeset
365 }
jurzua
parents:
diff changeset
366
jurzua
parents:
diff changeset
367 public void deleteEntityList(List<Entity> entities) {
jurzua
parents:
diff changeset
368 try {
jurzua
parents:
diff changeset
369 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
370 .getCurrentSession();
jurzua
parents:
diff changeset
371 session.getTransaction().begin();
jurzua
parents:
diff changeset
372
jurzua
parents:
diff changeset
373 for (Entity ent : entities) {
jurzua
parents:
diff changeset
374 this.removePersistenceEntity(ent, session);
jurzua
parents:
diff changeset
375 }
jurzua
parents:
diff changeset
376
jurzua
parents:
diff changeset
377 session.getTransaction().commit();
jurzua
parents:
diff changeset
378 } catch (Exception e) {
jurzua
parents:
diff changeset
379 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
380 // e.printStackTrace();
jurzua
parents:
diff changeset
381 }
jurzua
parents:
diff changeset
382 }
jurzua
parents:
diff changeset
383
jurzua
parents:
diff changeset
384 public void saveEntityList(List<Entity> entities) throws Exception {
jurzua
parents:
diff changeset
385 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
386 session.getTransaction().begin();
jurzua
parents:
diff changeset
387
jurzua
parents:
diff changeset
388 for (Entity entity : entities) {
jurzua
parents:
diff changeset
389 saveEntity0(session, entity);
jurzua
parents:
diff changeset
390 }
jurzua
parents:
diff changeset
391
jurzua
parents:
diff changeset
392 session.getTransaction().commit();
jurzua
parents:
diff changeset
393 }
jurzua
parents:
diff changeset
394
jurzua
parents:
diff changeset
395 public Map<Long, Long> saveEntityListAsNew(List<Entity> entities,
jurzua
parents:
diff changeset
396 Map<Long, Long> idMap) throws Exception {
jurzua
parents:
diff changeset
397
jurzua
parents:
diff changeset
398 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
399 session.getTransaction().begin();
jurzua
parents:
diff changeset
400 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
401
jurzua
parents:
diff changeset
402 for (Entity entity : entities) {
jurzua
parents:
diff changeset
403
jurzua
parents:
diff changeset
404 Long oldId = entity.getId();
jurzua
parents:
diff changeset
405 entity.resetId();
jurzua
parents:
diff changeset
406 entity.resetRowId();
jurzua
parents:
diff changeset
407 this.saveEntity0(session, entity);
jurzua
parents:
diff changeset
408 idMap.put(oldId, entity.getId());
jurzua
parents:
diff changeset
409 }
jurzua
parents:
diff changeset
410
jurzua
parents:
diff changeset
411 session.save(idSequence);
jurzua
parents:
diff changeset
412 session.getTransaction().commit();
jurzua
parents:
diff changeset
413 return idMap;
jurzua
parents:
diff changeset
414 }
jurzua
parents:
diff changeset
415
jurzua
parents:
diff changeset
416 /**
jurzua
parents:
diff changeset
417 * <p>
jurzua
parents:
diff changeset
418 * This method deletes all entities by type (TBox/ABox), it means the method
jurzua
parents:
diff changeset
419 * deletes either all concepts or all assertions.
jurzua
parents:
diff changeset
420 * </p>
jurzua
parents:
diff changeset
421 * <p>
jurzua
parents:
diff changeset
422 * The history of every deleted entity will be removed too.
jurzua
parents:
diff changeset
423 * </p>
jurzua
parents:
diff changeset
424 *
jurzua
parents:
diff changeset
425 * @param type
jurzua
parents:
diff changeset
426 * Node.TYPE_TBOX or Node.TYPE_ABOX
jurzua
parents:
diff changeset
427 */
jurzua
parents:
diff changeset
428 @Deprecated
jurzua
parents:
diff changeset
429 public void deleteEntities(Long id, String type, Boolean deleteHistory) {
jurzua
parents:
diff changeset
430 if (!(Node.TYPE_ABOX.equals(type) || Node.TYPE_TBOX.equals(type))) {
jurzua
parents:
diff changeset
431 throw new IllegalArgumentException(
jurzua
parents:
diff changeset
432 "The parameter 'type' should be either: " + Node.TYPE_ABOX
jurzua
parents:
diff changeset
433 + " or " + Node.TYPE_TBOX + ", but was: " + type);
jurzua
parents:
diff changeset
434 }
jurzua
parents:
diff changeset
435
jurzua
parents:
diff changeset
436 List<Entity> entList = this.getEntities(id,
jurzua
parents:
diff changeset
437 Node.SYS_STATUS_CURRENT_VERSION, type, null);
jurzua
parents:
diff changeset
438
jurzua
parents:
diff changeset
439 // loading previous versions
jurzua
parents:
diff changeset
440 List<Entity> historyEntList = new ArrayList<Entity>();
jurzua
parents:
diff changeset
441 if (deleteHistory) {
jurzua
parents:
diff changeset
442 for (Entity ent : entList) {
jurzua
parents:
diff changeset
443 historyEntList.addAll(this.getEntities(ent.getId(),
jurzua
parents:
diff changeset
444 Node.SYS_STATUS_PREVIOUS_VERSION, type, null));
jurzua
parents:
diff changeset
445 }
jurzua
parents:
diff changeset
446 }
jurzua
parents:
diff changeset
447
jurzua
parents:
diff changeset
448 try {
jurzua
parents:
diff changeset
449 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
450 .getCurrentSession();
jurzua
parents:
diff changeset
451 session.getTransaction().begin();
jurzua
parents:
diff changeset
452
jurzua
parents:
diff changeset
453 for (Entity ent : entList) {
jurzua
parents:
diff changeset
454 this.removePersistenceEntity(ent, session);
jurzua
parents:
diff changeset
455 }
jurzua
parents:
diff changeset
456 if (deleteHistory) {
jurzua
parents:
diff changeset
457 for (Entity ent : historyEntList) {
jurzua
parents:
diff changeset
458 this.removePersistenceEntity(ent, session);
jurzua
parents:
diff changeset
459 }
jurzua
parents:
diff changeset
460 }
jurzua
parents:
diff changeset
461
jurzua
parents:
diff changeset
462 session.getTransaction().commit();
jurzua
parents:
diff changeset
463 } catch (Exception e) {
jurzua
parents:
diff changeset
464 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
465 // e.printStackTrace();
jurzua
parents:
diff changeset
466 }
jurzua
parents:
diff changeset
467 }
jurzua
parents:
diff changeset
468
jurzua
parents:
diff changeset
469 /**
jurzua
parents:
diff changeset
470 * This deleting is made using JDBC and not hibernate. The history is too
jurzua
parents:
diff changeset
471 * removed by this method. TODO test what could happen with the hibernate
jurzua
parents:
diff changeset
472 * cache
jurzua
parents:
diff changeset
473 *
jurzua
parents:
diff changeset
474 * @param ent
jurzua
parents:
diff changeset
475 * @param session
jurzua
parents:
diff changeset
476 */
jurzua
parents:
diff changeset
477 private void removePersistenceEntity(Entity ent, Session session) {
jurzua
parents:
diff changeset
478 for (Attribute att : ent.getAttributes()) {
jurzua
parents:
diff changeset
479 // session.delete(att);
jurzua
parents:
diff changeset
480 removeNodesById(att.getId(), session);
jurzua
parents:
diff changeset
481 for (View view : att.getViews()) {
jurzua
parents:
diff changeset
482 // session.delete(view);
jurzua
parents:
diff changeset
483 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
484 }
jurzua
parents:
diff changeset
485 }
jurzua
parents:
diff changeset
486 for (Relation rel : ent.getSourceRelations()) {
jurzua
parents:
diff changeset
487 // session.delete(rel);
jurzua
parents:
diff changeset
488 removeNodesById(rel.getId(), session);
jurzua
parents:
diff changeset
489 for (View view : rel.getViews()) {
jurzua
parents:
diff changeset
490 // session.delete(view);
jurzua
parents:
diff changeset
491 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
492 }
jurzua
parents:
diff changeset
493 }
jurzua
parents:
diff changeset
494 for (Relation rel : ent.getTargetRelations()) {
jurzua
parents:
diff changeset
495 // session.delete(rel);
jurzua
parents:
diff changeset
496 removeNodesById(rel.getId(), session);
jurzua
parents:
diff changeset
497 for (View view : rel.getViews()) {
jurzua
parents:
diff changeset
498 // session.delete(view);
jurzua
parents:
diff changeset
499 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
500 }
jurzua
parents:
diff changeset
501 }
jurzua
parents:
diff changeset
502 for (View view : ent.getViews()) {
jurzua
parents:
diff changeset
503 // session.delete(view);
jurzua
parents:
diff changeset
504 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
505 }
jurzua
parents:
diff changeset
506 // session.delete(ent);
jurzua
parents:
diff changeset
507 removeNodesById(ent.getId(), session);
jurzua
parents:
diff changeset
508 }
jurzua
parents:
diff changeset
509
jurzua
parents:
diff changeset
510 private int removeNodesById(Long id, Session session) {
jurzua
parents:
diff changeset
511 String sql = "DELETE FROM Node WHERE id = :id";
jurzua
parents:
diff changeset
512 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
513 query.setLong("id", id);
jurzua
parents:
diff changeset
514 return query.executeUpdate();
jurzua
parents:
diff changeset
515 }
jurzua
parents:
diff changeset
516
jurzua
parents:
diff changeset
517 /**
jurzua
parents:
diff changeset
518 * <p>
jurzua
parents:
diff changeset
519 * Changes the system status of the entity from CURRENT_VERSION to
jurzua
parents:
diff changeset
520 * PREVIOUS_VERSION.
jurzua
parents:
diff changeset
521 * </p>
jurzua
parents:
diff changeset
522 *
jurzua
parents:
diff changeset
523 * <p>
jurzua
parents:
diff changeset
524 * It means, the entity will stay in the DB, but the it will not be visible
jurzua
parents:
diff changeset
525 * by the ordinary methods.
jurzua
parents:
diff changeset
526 * </p>
jurzua
parents:
diff changeset
527 *
jurzua
parents:
diff changeset
528 * @param entity
jurzua
parents:
diff changeset
529 */
51
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
530 public void removeEntCurrentVersion(Long entId, String type) throws Exception {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
531 logger.info("Deleting entity [ID=" + entId + ", type=" + type + "]. But keeping history in DB.");
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
532 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
533 try {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
534 session.getTransaction().begin();
1
jurzua
parents:
diff changeset
535
51
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
536 if (entId != null) {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
537 /*
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
538 * this method get the current version. Related to the relation,
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
539 * the time_modification is not consider, because it it
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
540 * producing problems.
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
541 */
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
542 List<Entity> previousEntityList = this.getEntities(session, entId, Node.SYS_STATUS_CURRENT_VERSION,
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
543 type, null, false);
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
544 if (previousEntityList.size() > 0) {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
545 if (previousEntityList.size() > 1) {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
546 logger.error("Found more than one current entities!");
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
547 }
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
548 Entity previousEntity = previousEntityList.get(0);
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
549 logger.info("Saving previous entity: " + previousEntity);
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
550 this.persistEntityAsPrevious(session, previousEntity);
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
551 }
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
552 }
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
553 } catch (Exception e) {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
554 logger.error(e);
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
555 } finally {
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
556 session.getTransaction().commit();
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
557 }
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
558 }
1
jurzua
parents:
diff changeset
559
jurzua
parents:
diff changeset
560 /**
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
561 * Save the entity to the database.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
562 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
563 * Creates a new version of the entity. Runs in a transaction.
1
jurzua
parents:
diff changeset
564 *
jurzua
parents:
diff changeset
565 * @param entity
jurzua
parents:
diff changeset
566 * @return
jurzua
parents:
diff changeset
567 */
jurzua
parents:
diff changeset
568 public void saveEntity(Entity entity) throws Exception {
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
569 // start transaction
1
jurzua
parents:
diff changeset
570 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
571 session.getTransaction().begin();
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
572 // save entity
1
jurzua
parents:
diff changeset
573 saveEntity0(session, entity);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
574 // end transaction
1
jurzua
parents:
diff changeset
575 session.getTransaction().commit();
jurzua
parents:
diff changeset
576 }
jurzua
parents:
diff changeset
577
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
578 /**
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
579 * Save the entity to the database using the given session.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
580 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
581 * Creates a new version and sets the existing entity to PREVIOUS_VERSION.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
582 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
583 * @param session
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
584 * @param entity
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
585 * @throws Exception
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
586 */
1
jurzua
parents:
diff changeset
587 private void saveEntity0(Session session, Entity entity) throws Exception {
jurzua
parents:
diff changeset
588 if (entity.getId() != null) {
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
589 // get the still current entity(s)
1
jurzua
parents:
diff changeset
590 List<Entity> previousEntityList = this.getEntities(session, entity.getId(), Node.SYS_STATUS_CURRENT_VERSION, entity.getType(), null, false);
jurzua
parents:
diff changeset
591 if (previousEntityList.size() > 0) {
jurzua
parents:
diff changeset
592 if (previousEntityList.size() > 1) {
51
d2833ab25c54 better logging of entity deletion.
casties
parents: 40
diff changeset
593 logger.error("Found more than one current entities!");
1
jurzua
parents:
diff changeset
594 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
595 // set the first current entity as previous
1
jurzua
parents:
diff changeset
596 Entity previousEntity = previousEntityList.get(0);
40
c181cb6f1761 first version of equalsStructure to test when saving entities.
casties
parents: 39
diff changeset
597 // compare old and new entity
c181cb6f1761 first version of equalsStructure to test when saving entities.
casties
parents: 39
diff changeset
598 if (! previousEntity.equalsStructure(entity)) {
c181cb6f1761 first version of equalsStructure to test when saving entities.
casties
parents: 39
diff changeset
599 logger.warn("Entity to save has different structure! old="+previousEntity+" new="+entity);
c181cb6f1761 first version of equalsStructure to test when saving entities.
casties
parents: 39
diff changeset
600 }
1
jurzua
parents:
diff changeset
601 logger.info("Saving previous entity: " + previousEntity);
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
602 this.persistEntityAsPrevious(session, previousEntity);
1
jurzua
parents:
diff changeset
603 }
jurzua
parents:
diff changeset
604 }
jurzua
parents:
diff changeset
605 this.saveCurrentEntity(session, entity, null);
jurzua
parents:
diff changeset
606 }
jurzua
parents:
diff changeset
607
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
608 /**
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
609 * Save the entity as (new) current version using the given session.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
610 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
611 * Sets system_status to CURRENT_VERSION and updates row_id, version, modification_time,
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
612 * etc.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
613 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
614 * @param session
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
615 * @param entity
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
616 * @param idSequence
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
617 * @throws Exception
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
618 */
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
619 private void saveCurrentEntity(Session session, Entity entity, Sequence idSequence) throws Exception {
1
jurzua
parents:
diff changeset
620 Long time = System.currentTimeMillis();
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
621 refreshEntityRelations(session, entity);
1
jurzua
parents:
diff changeset
622 entity.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
623 entity.resetRowId();
jurzua
parents:
diff changeset
624 entity.increaseVersion();
jurzua
parents:
diff changeset
625 entity.setObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
626 entity.setModificationTime(time);
jurzua
parents:
diff changeset
627 entity.setType(entity.getType());
jurzua
parents:
diff changeset
628 entity.setUser(entity.getUser());
jurzua
parents:
diff changeset
629 entity.autoNormalize();
jurzua
parents:
diff changeset
630 // generating of id, connecting rels, atts and views to the entity
jurzua
parents:
diff changeset
631 this.prepareEntity(session, entity, idSequence);
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
632 this.persistEntity(session, entity);
1
jurzua
parents:
diff changeset
633 }
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
634
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
635 /**
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
636 * Updates the endpoints of the relations of this entity.
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
637 *
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
638 * This class must be called,
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
639 * because sometimes the current entity is related to other entities that
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
640 * have been changed in parallel to the edition of this entity.
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
641 * For this reason, some relations of the current entity can have old information of the related entities (like the modification time).
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
642 * This method updates the relations of the current entities getting the actual information of the related entities directly from the DB.
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
643 *
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
644 * @author jurzua
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
645 *
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
646 * @param session
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
647 * @param entity
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
648 * @throws Exception
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
649 */
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
650 private void refreshEntityRelations(Session session, Entity entity) throws Exception {
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
651 for(Relation rel : entity.getSourceRelations()){
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
652 refreshRelationTarget(session, rel);
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
653 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
654
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
655 for(Relation rel : entity.getTargetRelations()){
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
656 refreshRelationSource(session, rel);
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
657 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
658 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
659
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
660 /**
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
661 * Update the target of the relation.
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
662 *
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
663 * @author jurzua
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
664 *
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
665 * @param session
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
666 * @param rel
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
667 * @throws Exception
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
668 */
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
669 private void refreshRelationTarget(Session session, Relation rel) throws Exception {
80
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
670 if(rel.getTargetId() == null){
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
671 throw new Exception("Refreshing entity " + rel.getSourceId() + ", the system found a relation with empty target.");
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
672 }
74
7acd7564e394 nicer logging.
casties
parents: 66
diff changeset
673 StringBuilder sb = new StringBuilder("refreshTarget of " + rel.toString() + " to "+rel.printTarget());
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
674 List<Entity> entityList = this.getEntities(session, rel.getTargetId(), Node.SYS_STATUS_CURRENT_VERSION, rel.getType(), null, false);
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
675 if(entityList.isEmpty()){
80
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
676 throw new Exception("Refreshing entity " + rel.getSourceId() + ", the system found a relation without target. " + rel.toString());
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
677 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
678 Entity target = entityList.get(0);
80
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
679 long targetModifOld = rel.getTargetModif();
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
680 rel.setTarget(target);
74
7acd7564e394 nicer logging.
casties
parents: 66
diff changeset
681 sb.append(" new "+rel.printTarget());
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
682 // the refresh is logged only if we detect a difference between the relation and the target entity.
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
683 if(targetModifOld != rel.getTargetModif()){
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
684 logger.warn(sb.toString());
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
685 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
686 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
687
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
688 /**
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
689 * Update the source of the relation.
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
690 *
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
691 * @author jurzua
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
692 *
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
693 * @param session
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
694 * @param rel
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
695 * @throws Exception
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
696 */
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
697 private void refreshRelationSource(Session session, Relation rel) throws Exception {
80
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
698 if(rel.getSourceId() == null){
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
699 throw new Exception("Refreshing entity " + rel.getTargetId() + ", the system found a relation with emtpy source.");
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
700 }
74
7acd7564e394 nicer logging.
casties
parents: 66
diff changeset
701 StringBuilder sb = new StringBuilder("refreshSource of " + rel.toString() + " to "+rel.printSource());
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
702 List<Entity> entityList = this.getEntities(session, rel.getSourceId(), Node.SYS_STATUS_CURRENT_VERSION, rel.getType(), null, false);
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
703 if(entityList.isEmpty()){
80
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
704 throw new Exception("Refreshing entity " + rel.getTargetId() + ", the system found a relation without source. " + rel.toString());
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
705 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
706 Entity source = entityList.get(0);
80
4c9ceb28cfd0 fix some NPEs with refreshRelations
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 75
diff changeset
707 long sourceModifOld = rel.getSourceModif();
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
708 rel.setSource(source);
74
7acd7564e394 nicer logging.
casties
parents: 66
diff changeset
709 sb.append(" new "+rel.printSource());
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
710 // the refresh is logged only if we detect a difference between the relation and the source entity.
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
711 if(sourceModifOld != rel.getSourceModif()){
57
e08f3dd127a5 cleanup of new methods.
casties
parents: 56
diff changeset
712 logger.warn(sb.toString());
56
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
713 }
467843399e70 Fixs for lost relation, when editing clone entities in parallel
jurzua <jjjurzua@hotmail.com>
parents: 51
diff changeset
714 }
1
jurzua
parents:
diff changeset
715
jurzua
parents:
diff changeset
716 /**
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
717 * Update the entity to prepare it for persistence using the session.
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
718 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
719 * If the ID is null new IDs will be assigned for the entity and its
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
720 * attributes and relations.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
721 * The modification time is propagated from the entity to its
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
722 * attributes and relations.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
723 * Own-values are normalized.
1
jurzua
parents:
diff changeset
724 *
jurzua
parents:
diff changeset
725 * @param session
jurzua
parents:
diff changeset
726 * @param entity
jurzua
parents:
diff changeset
727 * @return
jurzua
parents:
diff changeset
728 */
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
729 private Entity prepareEntity(Session session, Entity entity, Sequence idSequence) {
1
jurzua
parents:
diff changeset
730
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
731 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
732 * update id
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
733 */
1
jurzua
parents:
diff changeset
734 if (entity.getId() == null) {
jurzua
parents:
diff changeset
735 if (idSequence == null)
jurzua
parents:
diff changeset
736 entity.setId(this.generateId(session));
jurzua
parents:
diff changeset
737 else
jurzua
parents:
diff changeset
738 entity.setId(idSequence.generateId());
jurzua
parents:
diff changeset
739 }
jurzua
parents:
diff changeset
740
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
741 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
742 * update attributes
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
743 */
1
jurzua
parents:
diff changeset
744 for (Attribute att : entity.getAttributes()) {
jurzua
parents:
diff changeset
745 if (att.getId() == null) {
jurzua
parents:
diff changeset
746 if (idSequence == null)
jurzua
parents:
diff changeset
747 att.setId(this.generateId(session));
jurzua
parents:
diff changeset
748 else
jurzua
parents:
diff changeset
749 att.setId(idSequence.generateId());
jurzua
parents:
diff changeset
750 }
jurzua
parents:
diff changeset
751 att.setSourceId(entity.getId());
jurzua
parents:
diff changeset
752 att.setSourceModif(entity.getModificationTime());
jurzua
parents:
diff changeset
753 att.setSourceObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
754 att.autoNormalize();
jurzua
parents:
diff changeset
755 }
jurzua
parents:
diff changeset
756
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
757 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
758 * update source relations
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
759 */
1
jurzua
parents:
diff changeset
760 for (Relation rel : entity.getSourceRelations()) {
jurzua
parents:
diff changeset
761 if (rel.getId() == null) {
jurzua
parents:
diff changeset
762 if (idSequence == null)
jurzua
parents:
diff changeset
763 rel.setId(this.generateId(session));
jurzua
parents:
diff changeset
764 else
jurzua
parents:
diff changeset
765 rel.setId(idSequence.generateId());
jurzua
parents:
diff changeset
766 }
jurzua
parents:
diff changeset
767 rel.setSourceId(entity.getId());
jurzua
parents:
diff changeset
768 rel.setSourceModif(entity.getModificationTime());
jurzua
parents:
diff changeset
769 rel.setSourceObjectClass(entity.getObjectClass());
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
770 // TODO: update relation target too?
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
771 rel.autoNormalize(); // TODO: normalize relation?
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
772 if(StringUtils.equals(entity.getType(), Node.TYPE_ABOX)) {
1
jurzua
parents:
diff changeset
773 rel.setObjectClass(rel.getOwnValue());
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
774 } else if(StringUtils.equals(entity.getType(), Node.TYPE_TBOX)) {
1
jurzua
parents:
diff changeset
775 rel.setObjectClass(Node.TYPE_TBOX);
jurzua
parents:
diff changeset
776 }
jurzua
parents:
diff changeset
777
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
778 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
779 * update attributes for relations
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
780 */
1
jurzua
parents:
diff changeset
781 for (Attribute att : rel.getAttributes()) {
jurzua
parents:
diff changeset
782 if (att.getId() == null) {
jurzua
parents:
diff changeset
783 if (idSequence == null)
jurzua
parents:
diff changeset
784 att.setId(this.generateId(session));
jurzua
parents:
diff changeset
785 else
jurzua
parents:
diff changeset
786 att.setId(idSequence.generateId());
jurzua
parents:
diff changeset
787 }
jurzua
parents:
diff changeset
788 att.setSourceId(rel.getId());
jurzua
parents:
diff changeset
789 att.setSourceModif(rel.getModificationTime());
jurzua
parents:
diff changeset
790 att.setSourceObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
791 att.autoNormalize();
jurzua
parents:
diff changeset
792 }
jurzua
parents:
diff changeset
793 }
jurzua
parents:
diff changeset
794
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
795 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
796 * update target relations
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
797 */
1
jurzua
parents:
diff changeset
798 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
799 if (rel.getId() == null) {
jurzua
parents:
diff changeset
800 if (idSequence == null)
jurzua
parents:
diff changeset
801 rel.setId(this.generateId(session));
jurzua
parents:
diff changeset
802 else
jurzua
parents:
diff changeset
803 rel.setId(idSequence.generateId());
jurzua
parents:
diff changeset
804 }
jurzua
parents:
diff changeset
805 rel.setTargetId(entity.getId());
jurzua
parents:
diff changeset
806 rel.setTargetModif(entity.getModificationTime());
jurzua
parents:
diff changeset
807 rel.setTargetObjectClass(entity.getObjectClass());
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
808 // TODO: update relation source too?
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
809 rel.autoNormalize(); // TODO: normalize?
1
jurzua
parents:
diff changeset
810 if(StringUtils.equals(entity.getType(), Node.TYPE_ABOX)){
jurzua
parents:
diff changeset
811 rel.setObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
812 }else if(StringUtils.equals(entity.getType(), Node.TYPE_TBOX)){
jurzua
parents:
diff changeset
813 rel.setObjectClass(Node.TYPE_TBOX);
jurzua
parents:
diff changeset
814 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
815 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
816 * update relation attributes
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
817 */
1
jurzua
parents:
diff changeset
818 for (Attribute att : rel.getAttributes()) {
jurzua
parents:
diff changeset
819 if (att.getId() == null) {
jurzua
parents:
diff changeset
820 if (idSequence == null)
jurzua
parents:
diff changeset
821 att.setId(this.generateId(session));
jurzua
parents:
diff changeset
822 else
jurzua
parents:
diff changeset
823 att.setId(idSequence.generateId());
jurzua
parents:
diff changeset
824 }
jurzua
parents:
diff changeset
825 att.setSourceId(rel.getId());
jurzua
parents:
diff changeset
826 att.setSourceModif(rel.getModificationTime());
jurzua
parents:
diff changeset
827 att.setSourceObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
828 att.autoNormalize();
jurzua
parents:
diff changeset
829 }
jurzua
parents:
diff changeset
830 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
831
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
832 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
833 * update views(?)
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
834 */
1
jurzua
parents:
diff changeset
835 for (View view : entity.getViews()) {
jurzua
parents:
diff changeset
836 if (view.getId() == null) {
jurzua
parents:
diff changeset
837 if (idSequence == null)
jurzua
parents:
diff changeset
838 view.setId(this.generateId(session));
jurzua
parents:
diff changeset
839 else
jurzua
parents:
diff changeset
840 view.setId(idSequence.generateId());
jurzua
parents:
diff changeset
841 }
jurzua
parents:
diff changeset
842 view.setSourceId(entity.getId());
jurzua
parents:
diff changeset
843 view.setSourceModif(entity.getModificationTime());
jurzua
parents:
diff changeset
844 view.setSourceObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
845 view.autoNormalize();
jurzua
parents:
diff changeset
846 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
847
1
jurzua
parents:
diff changeset
848 return entity;
jurzua
parents:
diff changeset
849 }
jurzua
parents:
diff changeset
850
jurzua
parents:
diff changeset
851 /**
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
852 * Set an entities' system state to PREVIOUS_VERSION and persist it.
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
853 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
854 * Also persists the entities' attributes and relations.
1
jurzua
parents:
diff changeset
855 *
jurzua
parents:
diff changeset
856 * @param session
jurzua
parents:
diff changeset
857 * @param entity
jurzua
parents:
diff changeset
858 */
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
859 private void persistEntityAsPrevious(Session session, Entity entity) {
1
jurzua
parents:
diff changeset
860 entity.setSystemStatus(Node.SYS_STATUS_PREVIOUS_VERSION);
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
861 txLog.debug("* START save previous entity...");
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
862 txLog.info("save previous entity: "+entity.toEncString());
1
jurzua
parents:
diff changeset
863 session.save(entity);
jurzua
parents:
diff changeset
864 for (Attribute attribute : entity.getAttributes()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
865 txLog.info("save previous entity attribute: "+attribute.toEncString());
1
jurzua
parents:
diff changeset
866 session.save(attribute);
jurzua
parents:
diff changeset
867 }
jurzua
parents:
diff changeset
868 for (Relation rel : entity.getSourceRelations()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
869 txLog.info("save previous source relation: "+rel.toEncString());
1
jurzua
parents:
diff changeset
870 session.save(rel);
jurzua
parents:
diff changeset
871 for (Attribute att : rel.getAttributes()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
872 txLog.info("save previous source relation attribute: "+att.toEncString());
1
jurzua
parents:
diff changeset
873 session.save(att);
jurzua
parents:
diff changeset
874 }
jurzua
parents:
diff changeset
875 }
jurzua
parents:
diff changeset
876 for (Relation rel : entity.getTargetRelations()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
877 txLog.info("save previous target relation: "+rel.toEncString());
1
jurzua
parents:
diff changeset
878 session.save(rel);
25
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
879 for (Attribute att : rel.getAttributes()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
880 txLog.info("save previous target relation attribute: "+att.toEncString());
25
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
881 session.save(att);
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
882 }
1
jurzua
parents:
diff changeset
883 }
jurzua
parents:
diff changeset
884 for (View view : entity.getViews()) {
jurzua
parents:
diff changeset
885 session.save(view);
jurzua
parents:
diff changeset
886 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
887 txLog.debug("* END ...save previous entity");
1
jurzua
parents:
diff changeset
888 }
jurzua
parents:
diff changeset
889
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
890 /**
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
891 * Persist a (current) entity and its attributes and relations using the session.
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
892 *
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
893 * @param session
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
894 * @param entity
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
895 * @throws Exception
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
896 */
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
897 private void persistEntity(Session session, Entity entity) throws Exception {
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
898 txLog.info("* START save entity...");
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
899 txLog.info("save entity: "+entity.toEncString());
1
jurzua
parents:
diff changeset
900 session.save(entity);
jurzua
parents:
diff changeset
901 for (Attribute attribute : entity.getAttributes()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
902 txLog.info("save entity attribute: "+attribute.toEncString());
1
jurzua
parents:
diff changeset
903 session.save(attribute);
jurzua
parents:
diff changeset
904 }
jurzua
parents:
diff changeset
905 for (Relation rel : entity.getSourceRelations()) {
jurzua
parents:
diff changeset
906 rel.setSource(entity);
jurzua
parents:
diff changeset
907 if (rel.getSourceId() == null || rel.getTargetId() == null) {
jurzua
parents:
diff changeset
908 throw new IllegalStateException(
jurzua
parents:
diff changeset
909 "Either the sourceId or the targetId was not initialized to the source relation: "
jurzua
parents:
diff changeset
910 + rel.getOwnValue());
jurzua
parents:
diff changeset
911 }
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
912 txLog.info("save source relation: "+rel.toEncString());
1
jurzua
parents:
diff changeset
913 session.save(rel);
jurzua
parents:
diff changeset
914 for (Attribute att : rel.getAttributes()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
915 txLog.info("save source relation attribute: "+att.toEncString());
1
jurzua
parents:
diff changeset
916 session.save(att);
jurzua
parents:
diff changeset
917 }
jurzua
parents:
diff changeset
918 }
jurzua
parents:
diff changeset
919 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
920 rel.setTarget(entity);
jurzua
parents:
diff changeset
921 if (rel.getSourceId() == null || rel.getTargetId() == null) {
jurzua
parents:
diff changeset
922 throw new IllegalStateException(
25
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
923 "Either the sourceId or the targetId was not initialized to the target relation: "
1
jurzua
parents:
diff changeset
924 + rel.getOwnValue());
jurzua
parents:
diff changeset
925 }
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
926 txLog.info("save target relation: "+rel.toEncString());
1
jurzua
parents:
diff changeset
927 session.save(rel);
25
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
928 for (Attribute att : rel.getAttributes()) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
929 txLog.info("save target relation attribute: "+att.toEncString());
25
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
930 session.save(att);
c23ae718fdd3 clean up and more logging when saving attributes.
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 1
diff changeset
931 }
1
jurzua
parents:
diff changeset
932 }
jurzua
parents:
diff changeset
933
jurzua
parents:
diff changeset
934 // Call of ownValue Generator.
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
935 if (!isImportMode()) {
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
936 String ownValue = this.getOwnValueGenerator().generateOwnValue(entity, session);
1
jurzua
parents:
diff changeset
937 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
938 entity.setOwnValue(ownValue);
jurzua
parents:
diff changeset
939 entity.autoNormalize();
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
940 txLog.info("save entity (new ov): "+entity.toEncString());
1
jurzua
parents:
diff changeset
941 session.save(entity);
jurzua
parents:
diff changeset
942 }
jurzua
parents:
diff changeset
943 }
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
944 txLog.debug("* ...END save entity");
1
jurzua
parents:
diff changeset
945 }
jurzua
parents:
diff changeset
946
jurzua
parents:
diff changeset
947 public OwnValueGenerator getOwnValueGenerator() {
jurzua
parents:
diff changeset
948 return ownValueGenerator;
jurzua
parents:
diff changeset
949 }
jurzua
parents:
diff changeset
950
jurzua
parents:
diff changeset
951 public void setOwnValueGenerator(OwnValueGenerator ownValueGenerator) {
jurzua
parents:
diff changeset
952 this.ownValueGenerator = ownValueGenerator;
jurzua
parents:
diff changeset
953 }
jurzua
parents:
diff changeset
954
jurzua
parents:
diff changeset
955 /**
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
956 * Returns entities with their content from the database using the session.
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
957 *
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
958 * If a parameter is null then the condition is omitted from the query
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
959 * returning all entities matching the remaining conditions.
1
jurzua
parents:
diff changeset
960 *
jurzua
parents:
diff changeset
961 * @param session
jurzua
parents:
diff changeset
962 * @param id
jurzua
parents:
diff changeset
963 * @param systemStatus
jurzua
parents:
diff changeset
964 * @param type
jurzua
parents:
diff changeset
965 * @param ownValue
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
966 * @param considerTimeModif
1
jurzua
parents:
diff changeset
967 * @return
jurzua
parents:
diff changeset
968 */
jurzua
parents:
diff changeset
969 private List<Entity> getEntities(Session session, Long id,
jurzua
parents:
diff changeset
970 String systemStatus, String type, String ownValue, boolean considerTimeModif) {
jurzua
parents:
diff changeset
971
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
972 if (!(systemStatus.equals(Node.SYS_STATUS_PREVIOUS_VERSION)
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
973 || systemStatus.equals(Node.SYS_STATUS_CURRENT_VERSION))) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
974 throw new IllegalArgumentException("Invalid input systemStatus: " + systemStatus);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
975 }
1
jurzua
parents:
diff changeset
976
jurzua
parents:
diff changeset
977 if (StringUtils.isNotEmpty(type)
jurzua
parents:
diff changeset
978 && !(type.equals(Node.TYPE_ABOX) || type.equals(Node.TYPE_TBOX))) {
jurzua
parents:
diff changeset
979 throw new IllegalArgumentException("Invalid input type: " + type);
jurzua
parents:
diff changeset
980 }
jurzua
parents:
diff changeset
981
jurzua
parents:
diff changeset
982 List<Entity> entities;
jurzua
parents:
diff changeset
983
jurzua
parents:
diff changeset
984 String hqlEntities = "from Entity where systemStatus = :systemStatus";
jurzua
parents:
diff changeset
985
jurzua
parents:
diff changeset
986 if (StringUtils.isNotEmpty(type)) {
jurzua
parents:
diff changeset
987 hqlEntities += " AND type = :type";
jurzua
parents:
diff changeset
988 }
jurzua
parents:
diff changeset
989
jurzua
parents:
diff changeset
990 if (id != null) {
jurzua
parents:
diff changeset
991 hqlEntities += " AND id = :id";
jurzua
parents:
diff changeset
992 }
jurzua
parents:
diff changeset
993
jurzua
parents:
diff changeset
994 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
995 hqlEntities += " AND ownValue = :ownValue";
jurzua
parents:
diff changeset
996 }
jurzua
parents:
diff changeset
997
jurzua
parents:
diff changeset
998 Query queryEntities = session.createQuery(hqlEntities);
jurzua
parents:
diff changeset
999 queryEntities.setString("systemStatus", systemStatus);
jurzua
parents:
diff changeset
1000
jurzua
parents:
diff changeset
1001 if (StringUtils.isNotEmpty(type)) {
jurzua
parents:
diff changeset
1002 queryEntities.setString("type", type);
jurzua
parents:
diff changeset
1003 }
jurzua
parents:
diff changeset
1004
jurzua
parents:
diff changeset
1005 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1006 queryEntities.setString("ownValue", ownValue);
jurzua
parents:
diff changeset
1007 }
jurzua
parents:
diff changeset
1008
jurzua
parents:
diff changeset
1009 if (id != null) {
jurzua
parents:
diff changeset
1010 queryEntities.setLong("id", id);
jurzua
parents:
diff changeset
1011 }
jurzua
parents:
diff changeset
1012 entities = queryEntities.list();
jurzua
parents:
diff changeset
1013
jurzua
parents:
diff changeset
1014 for (Entity entity : entities) {
jurzua
parents:
diff changeset
1015 entity.setLightweight(true);
jurzua
parents:
diff changeset
1016 entity = this.getEntityContent(session, entity, considerTimeModif);
jurzua
parents:
diff changeset
1017 }
jurzua
parents:
diff changeset
1018
jurzua
parents:
diff changeset
1019 return entities;
jurzua
parents:
diff changeset
1020 }
jurzua
parents:
diff changeset
1021
jurzua
parents:
diff changeset
1022 /**
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1023 * Returns entities with their content from the database.
1
jurzua
parents:
diff changeset
1024 *
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1025 * If a parameter is null then the condition is omitted from the query
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1026 * returning all entities matching the remaining conditions.
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1027 *
1
jurzua
parents:
diff changeset
1028 * @param id
jurzua
parents:
diff changeset
1029 * @param systemStatus
jurzua
parents:
diff changeset
1030 * @param type
jurzua
parents:
diff changeset
1031 * @param ownValue
jurzua
parents:
diff changeset
1032 * @return
jurzua
parents:
diff changeset
1033 */
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1034 public List<Entity> getEntities(Long id, String systemStatus, String type, String ownValue) {
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1035 // logger.debug("GET ENTITIES Entities [id=" + id + ", type=" + type + ", ownValue=" + ownValue + "]");
1
jurzua
parents:
diff changeset
1036
jurzua
parents:
diff changeset
1037 if (!(systemStatus.equals(Node.SYS_STATUS_PREVIOUS_VERSION) || systemStatus
jurzua
parents:
diff changeset
1038 .equals(Node.SYS_STATUS_CURRENT_VERSION))) {
jurzua
parents:
diff changeset
1039 throw new IllegalArgumentException("Invalid input systemStatus: "
jurzua
parents:
diff changeset
1040 + systemStatus);
jurzua
parents:
diff changeset
1041 }
jurzua
parents:
diff changeset
1042
jurzua
parents:
diff changeset
1043 if (StringUtils.isNotEmpty(type)
jurzua
parents:
diff changeset
1044 && !(type.equals(Node.TYPE_ABOX) || type.equals(Node.TYPE_TBOX))) {
jurzua
parents:
diff changeset
1045 throw new IllegalArgumentException("Invalid input type: " + type);
jurzua
parents:
diff changeset
1046 }
jurzua
parents:
diff changeset
1047
jurzua
parents:
diff changeset
1048 List<Entity> entities = null;
jurzua
parents:
diff changeset
1049 Session session = null;
jurzua
parents:
diff changeset
1050 try {
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1051 //long start = System.currentTimeMillis();
1
jurzua
parents:
diff changeset
1052 session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1053 session.getTransaction().begin();
jurzua
parents:
diff changeset
1054
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1055 entities = this.getEntities(session, id, systemStatus, type, ownValue, true);
1
jurzua
parents:
diff changeset
1056
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1057 /* long dif = System.currentTimeMillis() - start;
1
jurzua
parents:
diff changeset
1058 String s = "Found=\n";
jurzua
parents:
diff changeset
1059 for (Entity e : entities) {
jurzua
parents:
diff changeset
1060 s += e.toString() + "\n";
jurzua
parents:
diff changeset
1061 }
jurzua
parents:
diff changeset
1062 s += "time used= " + dif + "[ms]\n\n";
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1063 logger.debug(s); */
1
jurzua
parents:
diff changeset
1064
jurzua
parents:
diff changeset
1065 } catch (Exception e) {
jurzua
parents:
diff changeset
1066 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1067 // e.printStackTrace();
jurzua
parents:
diff changeset
1068 } finally {
jurzua
parents:
diff changeset
1069 session.getTransaction().commit();
jurzua
parents:
diff changeset
1070 }
jurzua
parents:
diff changeset
1071 return entities;
jurzua
parents:
diff changeset
1072 }
jurzua
parents:
diff changeset
1073
jurzua
parents:
diff changeset
1074 private String whereUpdate(String where) {
jurzua
parents:
diff changeset
1075 if (StringUtils.isEmpty(where))
jurzua
parents:
diff changeset
1076 where = " where ";
jurzua
parents:
diff changeset
1077 else
jurzua
parents:
diff changeset
1078 where += " AND ";
jurzua
parents:
diff changeset
1079 return where;
jurzua
parents:
diff changeset
1080 }
jurzua
parents:
diff changeset
1081
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1082 /**
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1083 * Returns a list of Nodes.
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1084 *
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1085 * If a parameter is null then the condition is omitted from the query
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1086 * returning all entities matching the remaining conditions.
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1087 *
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1088 * @param session
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1089 * @param id
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1090 * @param systemStatus
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1091 * @param sourceId
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1092 * @param srcModif
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1093 * @param targetId
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1094 * @param tarModif
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1095 * @return
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1096 */
1
jurzua
parents:
diff changeset
1097 public List<Node> getNodes(Session session, Long id, String systemStatus,
jurzua
parents:
diff changeset
1098 Long sourceId, Long srcModif, Long targetId, Long tarModif) {
jurzua
parents:
diff changeset
1099 List<Node> nodes = null;
jurzua
parents:
diff changeset
1100
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1101 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1102 * create HQL query string
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1103 */
1
jurzua
parents:
diff changeset
1104 String from = "from Node ";
jurzua
parents:
diff changeset
1105 String where = "";
jurzua
parents:
diff changeset
1106
jurzua
parents:
diff changeset
1107 if (id != null) {
jurzua
parents:
diff changeset
1108 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1109 where += " id = :id ";
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1110 }
1
jurzua
parents:
diff changeset
1111
jurzua
parents:
diff changeset
1112 if (StringUtils.isNotEmpty(systemStatus)) {
jurzua
parents:
diff changeset
1113 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1114 where += " systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
1115 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1116
1
jurzua
parents:
diff changeset
1117 if (sourceId != null) {
jurzua
parents:
diff changeset
1118 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1119 where += " sourceId = :sourceId ";
jurzua
parents:
diff changeset
1120 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1121
1
jurzua
parents:
diff changeset
1122 if (srcModif != null) {
jurzua
parents:
diff changeset
1123 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1124 where += " sourceModif = :sourceModif ";
jurzua
parents:
diff changeset
1125 }
jurzua
parents:
diff changeset
1126
jurzua
parents:
diff changeset
1127 if (targetId != null) {
jurzua
parents:
diff changeset
1128 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1129 where += " targetId = :targetId ";
jurzua
parents:
diff changeset
1130 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1131
1
jurzua
parents:
diff changeset
1132 if (tarModif != null) {
jurzua
parents:
diff changeset
1133 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1134 where += " targetModif = :targetModif ";
jurzua
parents:
diff changeset
1135 }
jurzua
parents:
diff changeset
1136
jurzua
parents:
diff changeset
1137 String hql = from + where;
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1138 // create query object
1
jurzua
parents:
diff changeset
1139 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1140
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1141 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1142 * add query parameters
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1143 */
1
jurzua
parents:
diff changeset
1144 if (id != null)
jurzua
parents:
diff changeset
1145 query.setLong("id", id);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1146
1
jurzua
parents:
diff changeset
1147 if (StringUtils.isNotEmpty(systemStatus))
jurzua
parents:
diff changeset
1148 query.setString("systemStatus", systemStatus);
jurzua
parents:
diff changeset
1149
jurzua
parents:
diff changeset
1150 if (sourceId != null)
jurzua
parents:
diff changeset
1151 query.setLong("sourceId", sourceId);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1152
1
jurzua
parents:
diff changeset
1153 if (srcModif != null)
jurzua
parents:
diff changeset
1154 query.setLong("sourceModif", srcModif);
jurzua
parents:
diff changeset
1155
jurzua
parents:
diff changeset
1156 if (targetId != null)
jurzua
parents:
diff changeset
1157 query.setLong("targetId", targetId);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1158
1
jurzua
parents:
diff changeset
1159 if (tarModif != null)
jurzua
parents:
diff changeset
1160 query.setLong("targetModif", tarModif);
jurzua
parents:
diff changeset
1161
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1162 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1163 * run the query
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1164 */
1
jurzua
parents:
diff changeset
1165 nodes = query.list();
jurzua
parents:
diff changeset
1166
jurzua
parents:
diff changeset
1167 return nodes;
jurzua
parents:
diff changeset
1168 }
jurzua
parents:
diff changeset
1169
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1170 /**
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1171 * Populate a lightweight entity with attributes and relations.
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1172 *
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1173 * @param session
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1174 * @param entity
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1175 * @param considerTimeModif
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1176 * @return
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1177 */
1
jurzua
parents:
diff changeset
1178 private Entity getEntityContent(Session session, Entity entity, boolean considerTimeModif) {
jurzua
parents:
diff changeset
1179 if (entity != null && entity.isLightweight()) {
jurzua
parents:
diff changeset
1180 entity.setLightweight(false);
jurzua
parents:
diff changeset
1181 entity.setAttributes(new ArrayList<Attribute>());
jurzua
parents:
diff changeset
1182 entity.setSourceRelations(new ArrayList<Relation>());
jurzua
parents:
diff changeset
1183 entity.setTargetRelations(new ArrayList<Relation>());
jurzua
parents:
diff changeset
1184
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1185 /*
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1186 * Danger: getNodes finds all attributes in the db and tries to attach them to
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1187 * this entity if id=null!
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1188 */
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1189 if (entity.getId() == null) {
27
8ea716da439f better error message :-)
casties
parents: 26
diff changeset
1190 logger.error("Entity with id=null! Abort loading attributes.");
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1191 return entity;
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1192 }
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1193
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1194 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1195 * get all nodes with source_id = entity.id
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1196 * i.e. Attributes and SourceRelations.
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1197 */
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1198 List<Node> nodes = null;
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1199 if (considerTimeModif) {
1
jurzua
parents:
diff changeset
1200 nodes = this.getNodes(session, null,
jurzua
parents:
diff changeset
1201 entity.getSystemStatus(), entity.getId(),
jurzua
parents:
diff changeset
1202 entity.getModificationTime(), null, null);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1203 } else {
1
jurzua
parents:
diff changeset
1204 nodes = this.getNodes(session, null,
jurzua
parents:
diff changeset
1205 entity.getSystemStatus(), entity.getId(),
jurzua
parents:
diff changeset
1206 null, null, null);
jurzua
parents:
diff changeset
1207 }
jurzua
parents:
diff changeset
1208
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1209 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1210 * add Attributes and SourceRelations
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1211 */
1
jurzua
parents:
diff changeset
1212 for (Node node : nodes) {
jurzua
parents:
diff changeset
1213 if (node instanceof Attribute) {
jurzua
parents:
diff changeset
1214 entity.addAttribute((Attribute) node);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1215
1
jurzua
parents:
diff changeset
1216 } else if (node instanceof Relation) {
jurzua
parents:
diff changeset
1217 Relation rel = (Relation) node;
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1218 /*
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1219 * Danger: getNodes finds all attributes in the db and tries to attach them to
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1220 * this relation if id=null!
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1221 */
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1222 if (rel.getId() == null) {
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1223 logger.error("Relation with id=null! Abort loading attributes.");
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1224 continue;
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1225 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1226 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1227 * get all nodes with source_id = rel.id
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1228 * i.e. relation Attributes
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1229 */
1
jurzua
parents:
diff changeset
1230 List<Node> attrs = this.getNodes(session, null,
jurzua
parents:
diff changeset
1231 rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
1232 rel.getModificationTime(), null, null);
jurzua
parents:
diff changeset
1233 for (Node attNode : attrs) {
jurzua
parents:
diff changeset
1234 if (attNode instanceof Attribute) {
jurzua
parents:
diff changeset
1235 rel.addAttribute((Attribute) attNode);
jurzua
parents:
diff changeset
1236 }
jurzua
parents:
diff changeset
1237 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1238 // TODO: ???
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1239 if (considerTimeModif) {
1
jurzua
parents:
diff changeset
1240 entity.addSourceRelation(rel);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1241 } else {
1
jurzua
parents:
diff changeset
1242 entity.getSourceRelations().add(rel);
jurzua
parents:
diff changeset
1243 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1244
1
jurzua
parents:
diff changeset
1245 } else if (node instanceof View) {
jurzua
parents:
diff changeset
1246 entity.getViews().add((View) node);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1247
1
jurzua
parents:
diff changeset
1248 } else {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1249 throw new IllegalArgumentException("Invalid node found: " + node);
1
jurzua
parents:
diff changeset
1250 }
jurzua
parents:
diff changeset
1251 }
jurzua
parents:
diff changeset
1252
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1253 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1254 * get all nodes with target_id = entity.id
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1255 * i.e. TargetRelations
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1256 */
1
jurzua
parents:
diff changeset
1257 List<Node> tarRels = null;
jurzua
parents:
diff changeset
1258
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1259 if (considerTimeModif) {
1
jurzua
parents:
diff changeset
1260 tarRels = this.getNodes(session, null,
jurzua
parents:
diff changeset
1261 entity.getSystemStatus(), null, null, entity.getId(),
jurzua
parents:
diff changeset
1262 entity.getModificationTime());
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1263 } else {
1
jurzua
parents:
diff changeset
1264 tarRels = this.getNodes(session, null,
jurzua
parents:
diff changeset
1265 entity.getSystemStatus(), null, null, entity.getId(),
jurzua
parents:
diff changeset
1266 null);
jurzua
parents:
diff changeset
1267 }
jurzua
parents:
diff changeset
1268
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1269 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1270 * add TargetRelations
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1271 */
1
jurzua
parents:
diff changeset
1272 for (Node node : tarRels) {
jurzua
parents:
diff changeset
1273 if (node instanceof Relation) {
jurzua
parents:
diff changeset
1274 Relation rel = (Relation) node;
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1275 /*
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1276 * Danger: getNodes finds all attributes in the db and tries to attach them to
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1277 * this relation if id=null!
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1278 */
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1279 if (rel.getId() == null) {
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1280 logger.error("Relation with id=null! Abort loading attributes.");
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1281 continue;
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 25
diff changeset
1282 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1283 /*
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1284 * get all nodes with source_id = rel.id
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1285 * i.e. relation Attributes
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1286 */
1
jurzua
parents:
diff changeset
1287 List<Node> attrs = this.getNodes(session, null,
jurzua
parents:
diff changeset
1288 rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
1289 rel.getModificationTime(), null, null);
jurzua
parents:
diff changeset
1290 for (Node attNode : attrs) {
jurzua
parents:
diff changeset
1291 if (attNode instanceof Attribute) {
jurzua
parents:
diff changeset
1292 rel.addAttribute((Attribute) attNode);
jurzua
parents:
diff changeset
1293 }
jurzua
parents:
diff changeset
1294 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1295 // TODO: ???
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1296 if (considerTimeModif) {
1
jurzua
parents:
diff changeset
1297 entity.addTargetRelation(rel);
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1298 } else {
1
jurzua
parents:
diff changeset
1299 entity.getTargetRelations().add(rel);
jurzua
parents:
diff changeset
1300 }
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1301
1
jurzua
parents:
diff changeset
1302 } else {
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1303 throw new IllegalArgumentException("Invalid node found: " + node);
1
jurzua
parents:
diff changeset
1304 }
jurzua
parents:
diff changeset
1305 }
jurzua
parents:
diff changeset
1306 }
jurzua
parents:
diff changeset
1307 return entity;
jurzua
parents:
diff changeset
1308 }
jurzua
parents:
diff changeset
1309
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1310 /**
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1311 * Populate a lightweight entity with attributes and relations.
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1312 *
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1313 * @param entity
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1314 * @return
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1315 */
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1316 public Entity getEntityContent(Entity entity) {
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1317 if (entity != null && entity.isLightweight()) {
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1318 Session session = null;
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1319 try {
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1320 /* logger.debug("GET ENTITY CONTENT [objClass=" + entity.getObjectClass() + ", id=" + entity.getId()
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1321 + ", ownValue=" + entity.getOwnValue() + "]"); */
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1322 //long start = System.currentTimeMillis();
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1323
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1324 // start transaction
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1325 session = HibernateUtil.getSessionFactory().getCurrentSession();
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1326 session.getTransaction().begin();
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1327 // get entity content
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1328 entity = this.getEntityContent(session, entity, true);
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1329
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1330 /* long diff = System.currentTimeMillis() - start;
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1331 logger.debug("Time to get content=" + diff + "(s)"); */
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1332 } catch (Exception e) {
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1333 logger.error(e.getMessage(), e);
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1334 } finally {
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1335 session.getTransaction().commit();
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1336 }
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1337 }
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1338 return entity;
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1339 }
1
jurzua
parents:
diff changeset
1340
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1341 public List<String> getObjecClassSuggestion(String objectClass, Class nodeClass, int maxResults) {
1
jurzua
parents:
diff changeset
1342 objectClass += "%";
jurzua
parents:
diff changeset
1343 try {
jurzua
parents:
diff changeset
1344
jurzua
parents:
diff changeset
1345 List<String> suggestions = new ArrayList<String>();
jurzua
parents:
diff changeset
1346 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1347 .getCurrentSession();
jurzua
parents:
diff changeset
1348 session.getTransaction().begin();
jurzua
parents:
diff changeset
1349 String hql = "from ";
jurzua
parents:
diff changeset
1350 if (nodeClass.equals(Entity.class)) {
jurzua
parents:
diff changeset
1351 hql += "Entity ";
jurzua
parents:
diff changeset
1352 }
jurzua
parents:
diff changeset
1353 if (nodeClass.equals(Relation.class)) {
jurzua
parents:
diff changeset
1354 hql += "Relation ";
jurzua
parents:
diff changeset
1355 }
jurzua
parents:
diff changeset
1356 if (nodeClass.equals(Attribute.class)) {
jurzua
parents:
diff changeset
1357 hql += "Attribute ";
jurzua
parents:
diff changeset
1358 }
jurzua
parents:
diff changeset
1359 if (nodeClass.equals(Node.class)) {
jurzua
parents:
diff changeset
1360 hql += "Node ";
jurzua
parents:
diff changeset
1361 }
jurzua
parents:
diff changeset
1362 if (nodeClass.equals(View.class)) {
jurzua
parents:
diff changeset
1363 hql += "View ";
jurzua
parents:
diff changeset
1364 }
jurzua
parents:
diff changeset
1365 hql += " where objectClass like :objectClass "
jurzua
parents:
diff changeset
1366 + "group by objectClass";
jurzua
parents:
diff changeset
1367
jurzua
parents:
diff changeset
1368 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1369 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1370 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1371 List<Node> list = query.list();
jurzua
parents:
diff changeset
1372 for (Node node : list) {
jurzua
parents:
diff changeset
1373 suggestions.add(node.getObjectClass());
jurzua
parents:
diff changeset
1374 }
jurzua
parents:
diff changeset
1375 return suggestions;
jurzua
parents:
diff changeset
1376
jurzua
parents:
diff changeset
1377 } catch (Exception e) {
jurzua
parents:
diff changeset
1378 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1379 // e.printStackTrace();
jurzua
parents:
diff changeset
1380 }
jurzua
parents:
diff changeset
1381 return null;
jurzua
parents:
diff changeset
1382 }
jurzua
parents:
diff changeset
1383
36
63fe33172397 more comments, less log messages.
casties
parents: 34
diff changeset
1384 public List<String> getOwnValueSuggestion(String ownValue, Class nodeClass, int maxResults) {
1
jurzua
parents:
diff changeset
1385 ownValue += "%";
jurzua
parents:
diff changeset
1386 try {
jurzua
parents:
diff changeset
1387
jurzua
parents:
diff changeset
1388 List<String> suggestions = new ArrayList<String>();
jurzua
parents:
diff changeset
1389 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1390 .getCurrentSession();
jurzua
parents:
diff changeset
1391 session.getTransaction().begin();
jurzua
parents:
diff changeset
1392 String hql = "from ";
jurzua
parents:
diff changeset
1393 if (nodeClass.equals(Entity.class)) {
jurzua
parents:
diff changeset
1394 hql += "Entity ";
jurzua
parents:
diff changeset
1395 }
jurzua
parents:
diff changeset
1396 if (nodeClass.equals(Relation.class)) {
jurzua
parents:
diff changeset
1397 hql += "Relation ";
jurzua
parents:
diff changeset
1398 }
jurzua
parents:
diff changeset
1399 if (nodeClass.equals(Attribute.class)) {
jurzua
parents:
diff changeset
1400 hql += "Attribute ";
jurzua
parents:
diff changeset
1401 }
jurzua
parents:
diff changeset
1402 if (nodeClass.equals(Node.class)) {
jurzua
parents:
diff changeset
1403 hql += "Node ";
jurzua
parents:
diff changeset
1404 }
jurzua
parents:
diff changeset
1405 if (nodeClass.equals(View.class)) {
jurzua
parents:
diff changeset
1406 hql += "View ";
jurzua
parents:
diff changeset
1407 }
jurzua
parents:
diff changeset
1408 hql += " where ownValue like :ownValue " + "group by ownValue";
jurzua
parents:
diff changeset
1409
jurzua
parents:
diff changeset
1410 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1411 query.setString("ownValue", ownValue);
jurzua
parents:
diff changeset
1412 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1413 List<Node> list = query.list();
jurzua
parents:
diff changeset
1414 for (Node node : list) {
jurzua
parents:
diff changeset
1415 suggestions.add(node.getOwnValue());
jurzua
parents:
diff changeset
1416 }
jurzua
parents:
diff changeset
1417 return suggestions;
jurzua
parents:
diff changeset
1418
jurzua
parents:
diff changeset
1419 } catch (Exception e) {
jurzua
parents:
diff changeset
1420 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1421 // e.printStackTrace();
jurzua
parents:
diff changeset
1422 }
jurzua
parents:
diff changeset
1423 return null;
jurzua
parents:
diff changeset
1424 }
jurzua
parents:
diff changeset
1425
jurzua
parents:
diff changeset
1426 public Entity loadEntitiesForTargetRelation(Entity entity) {
jurzua
parents:
diff changeset
1427 try {
jurzua
parents:
diff changeset
1428 // where parent_id = :parent_id AND type = :type
jurzua
parents:
diff changeset
1429 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1430 .getCurrentSession();
jurzua
parents:
diff changeset
1431 session.getTransaction().begin();
jurzua
parents:
diff changeset
1432
jurzua
parents:
diff changeset
1433 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
1434 List<Entity> entities = this.getEntities(session,
jurzua
parents:
diff changeset
1435 rel.getSourceId(), Node.SYS_STATUS_CURRENT_VERSION,
jurzua
parents:
diff changeset
1436 null, null, true);
jurzua
parents:
diff changeset
1437 if (entities.size() > 0) {
jurzua
parents:
diff changeset
1438 Entity source = entities.get(0);
jurzua
parents:
diff changeset
1439 rel.setSource(source);
jurzua
parents:
diff changeset
1440 }
jurzua
parents:
diff changeset
1441 }
jurzua
parents:
diff changeset
1442
jurzua
parents:
diff changeset
1443 session.getTransaction().commit();
jurzua
parents:
diff changeset
1444 return entity;
jurzua
parents:
diff changeset
1445 } catch (Exception e) {
jurzua
parents:
diff changeset
1446 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1447 // e.printStackTrace();
jurzua
parents:
diff changeset
1448 }
jurzua
parents:
diff changeset
1449 return entity;
jurzua
parents:
diff changeset
1450 }
jurzua
parents:
diff changeset
1451
jurzua
parents:
diff changeset
1452 /**
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1453 * Return all (lightweight) entities matching the query.
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1454 *
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1455 * Any parameter that is null is omitted as a query condition matching
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1456 * all values in this parameter.
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1457 *
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1458 * Own value is searched as substring if ownValueSubString=true.
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1459 *
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1460 * @param session
1
jurzua
parents:
diff changeset
1461 * @param systemStatus
jurzua
parents:
diff changeset
1462 * @param id
jurzua
parents:
diff changeset
1463 * @param type
jurzua
parents:
diff changeset
1464 * @param objectClass
jurzua
parents:
diff changeset
1465 * @param ownValue
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1466 * @param ownValueSubString
1
jurzua
parents:
diff changeset
1467 * @param maxResult
jurzua
parents:
diff changeset
1468 * @return
jurzua
parents:
diff changeset
1469 */
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1470 protected List<Entity> getLightweightEntities(Session session, String systemStatus, Long id, String type,
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1471 String objectClass, String ownValue, boolean ownValueSubString, int maxResult) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1472
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1473 /*
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1474 * build query string
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1475 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1476 String hqlEntities = "from Entity where ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1477 if (StringUtils.isNotEmpty(ownValue)) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1478 if (ownValueSubString)
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1479 hqlEntities += "ownValue like :ownValue AND ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1480 else
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1481 hqlEntities += "ownValue = :ownValue AND ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1482 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1483 if (id != null) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1484 hqlEntities += "id = :id AND ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1485 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1486 if (StringUtils.isNotEmpty(objectClass)) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1487 hqlEntities += "objectClass = :objectClass AND ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1488 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1489 if (StringUtils.isNotEmpty(type)) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1490 hqlEntities += "type = :type AND ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1491 }
1
jurzua
parents:
diff changeset
1492
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1493 hqlEntities += "systemStatus = :systemStatus ";
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1494
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1495 /*
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1496 * create query object
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1497 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1498 Query queryEntities = session.createQuery(hqlEntities);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1499
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1500 /*
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1501 * add query parameters
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1502 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1503 queryEntities.setString("systemStatus", systemStatus);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1504 if (StringUtils.isNotEmpty(ownValue)) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1505 if (ownValueSubString) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1506 // substring search
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1507 queryEntities.setString("ownValue", "%" + ownValue + "%");
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1508 //logger.debug("ownValue=%" + ownValue + "%");
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1509 } else {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1510 queryEntities.setString("ownValue", ownValue);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1511 //logger.debug("ownValue=" + ownValue);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1512 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1513 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1514 if (maxResult > 0) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1515 queryEntities.setMaxResults(maxResult);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1516 }
1
jurzua
parents:
diff changeset
1517
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1518 if (StringUtils.isNotEmpty(type)) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1519 queryEntities.setString("type", type);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1520 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1521 if (id != null) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1522 queryEntities.setLong("id", id);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1523 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1524 if (StringUtils.isNotEmpty(objectClass)) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1525 queryEntities.setString("objectClass", objectClass);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1526 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1527
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1528 /*
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1529 * run query and return results
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1530 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1531 List<Entity> entities = queryEntities.list();
1
jurzua
parents:
diff changeset
1532
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1533 for (Entity ent : entities) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1534 ent.setLightweight(true);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1535 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1536
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1537 return entities;
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1538 }
1
jurzua
parents:
diff changeset
1539
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1540 /**
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1541 * Return all (lightweight) entities matching the query.
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1542 *
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1543 * Any parameter that is null is omitted as a query condition matching
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1544 * all values in this parameter.
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1545 *
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1546 * Own value is searched as substring if ownValueSubString=true.
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1547 *
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1548 * @param systemStatus
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1549 * @param id
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1550 * @param type
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1551 * @param objectClass
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1552 * @param ownValue
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1553 * @param ownValueSubString
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1554 * @param maxResult
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1555 * @return
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1556 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1557 public List<Entity> getLightweightEntities(String systemStatus, Long id, String type, String objectClass,
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1558 String ownValue, boolean ownValueSubString, int maxResult) {
62
58659e865279 less System.out.println. less logging.
casties
parents: 61
diff changeset
1559 //logger.debug("GET LW ENTITIES [type=" + type + " id=" + id + ", objectClass=" + objectClass + ", ownValue="
58659e865279 less System.out.println. less logging.
casties
parents: 61
diff changeset
1560 // + ownValue + "]");
1
jurzua
parents:
diff changeset
1561
39
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1562 List<Entity> entities = new ArrayList<Entity>();
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1563 /*
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1564 * check inputs
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1565 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1566 if (!(systemStatus.equals(Node.SYS_STATUS_PREVIOUS_VERSION)
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1567 || systemStatus.equals(Node.SYS_STATUS_CURRENT_VERSION))) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1568 throw new IllegalArgumentException("Invalid input systemStatus: " + systemStatus);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1569 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1570 if (StringUtils.isNotEmpty(type) && !(type.equals(Node.TYPE_ABOX) || type.equals(Node.TYPE_TBOX))) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1571 throw new IllegalArgumentException("Invalid input type: " + type);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1572 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1573
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1574 /*
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1575 * call getLightweightEntities with transaction
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1576 */
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1577 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1578 try {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1579 session.getTransaction().begin();
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1580
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1581 entities = this.getLightweightEntities(session, systemStatus, id, type, objectClass, ownValue,
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1582 ownValueSubString, maxResult);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1583
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1584 } catch (Exception e) {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1585 logger.error(e);
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1586 } finally {
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1587 session.getTransaction().commit();
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1588 }
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1589 return entities;
86c343109257 more comments and cleanup.
casties
parents: 38
diff changeset
1590 }
1
jurzua
parents:
diff changeset
1591
jurzua
parents:
diff changeset
1592 private Sequence getIdSequence(Session session) {
jurzua
parents:
diff changeset
1593 Sequence sequence = null;
jurzua
parents:
diff changeset
1594 String hqlJoin = "from Sequence where name = :name";
jurzua
parents:
diff changeset
1595 Query query = session.createQuery(hqlJoin);
jurzua
parents:
diff changeset
1596 query.setString("name", NODE_SEQUENCE);
jurzua
parents:
diff changeset
1597 List<Sequence> sequences = query.list();
jurzua
parents:
diff changeset
1598 if (sequences.size() > 0)
jurzua
parents:
diff changeset
1599 sequence = sequences.get(0);
jurzua
parents:
diff changeset
1600 if (sequence == null) {
jurzua
parents:
diff changeset
1601 sequence = new Sequence(NODE_SEQUENCE, new Long(0));
jurzua
parents:
diff changeset
1602 }
jurzua
parents:
diff changeset
1603 return sequence;
jurzua
parents:
diff changeset
1604 }
jurzua
parents:
diff changeset
1605
jurzua
parents:
diff changeset
1606 protected Long generateId(Session session) {
jurzua
parents:
diff changeset
1607 Long id = null;
jurzua
parents:
diff changeset
1608 Sequence sequence = null;
jurzua
parents:
diff changeset
1609 String hqlJoin = "from Sequence where name = :name";
jurzua
parents:
diff changeset
1610 Query query = session.createQuery(hqlJoin);
jurzua
parents:
diff changeset
1611 query.setString("name", NODE_SEQUENCE);
jurzua
parents:
diff changeset
1612 List<Sequence> sequences = query.list();
jurzua
parents:
diff changeset
1613 if (sequences.size() > 0) {
jurzua
parents:
diff changeset
1614 sequence = sequences.get(0);
jurzua
parents:
diff changeset
1615 } else {
jurzua
parents:
diff changeset
1616 sequence = new Sequence(NODE_SEQUENCE, new Long(0));
jurzua
parents:
diff changeset
1617 }
jurzua
parents:
diff changeset
1618 id = sequence.generateId();
jurzua
parents:
diff changeset
1619 session.save(sequence);
jurzua
parents:
diff changeset
1620 return id;
jurzua
parents:
diff changeset
1621 }
jurzua
parents:
diff changeset
1622
jurzua
parents:
diff changeset
1623 public ConfigurationService getConfigurationService() {
jurzua
parents:
diff changeset
1624 return configurationService;
jurzua
parents:
diff changeset
1625 }
jurzua
parents:
diff changeset
1626
jurzua
parents:
diff changeset
1627 public void setConfigurationService(
jurzua
parents:
diff changeset
1628 ConfigurationService configurationService) {
jurzua
parents:
diff changeset
1629 this.configurationService = configurationService;
jurzua
parents:
diff changeset
1630 }
jurzua
parents:
diff changeset
1631
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1632 public boolean isImportMode() {
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1633 return importMode;
1
jurzua
parents:
diff changeset
1634 }
jurzua
parents:
diff changeset
1635
jurzua
parents:
diff changeset
1636 public void setImportModus(boolean importModus) {
33
e52f593f9e0d new transaction logger "openmind.transactionlog" logging entity save actions and their data.
casties
parents: 27
diff changeset
1637 this.importMode = importModus;
1
jurzua
parents:
diff changeset
1638 }
jurzua
parents:
diff changeset
1639
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1640 /**
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1641 * Returns all definition relations.
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1642 *
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1643 * @return
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1644 * @throws Exception
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1645 */
1
jurzua
parents:
diff changeset
1646 public List<Relation> getDefRelations() {
jurzua
parents:
diff changeset
1647 List<Relation> list = new ArrayList<Relation>();
jurzua
parents:
diff changeset
1648 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1649 try {
jurzua
parents:
diff changeset
1650 session.getTransaction().begin();
jurzua
parents:
diff changeset
1651
jurzua
parents:
diff changeset
1652 String hql = "from Relation where systemStatus = :systemStatus and type = :type";
jurzua
parents:
diff changeset
1653 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1654
jurzua
parents:
diff changeset
1655 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1656 query.setString("type", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1657
jurzua
parents:
diff changeset
1658 list = query.list();
jurzua
parents:
diff changeset
1659 } catch (Exception e) {
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1660 logger.error(e);
1
jurzua
parents:
diff changeset
1661 } finally {
jurzua
parents:
diff changeset
1662 session.getTransaction().commit();
jurzua
parents:
diff changeset
1663 }
jurzua
parents:
diff changeset
1664 return list;
jurzua
parents:
diff changeset
1665 }
jurzua
parents:
diff changeset
1666
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1667 /**
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1668 * Returns all definition attributes.
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1669 *
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1670 * @return
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1671 * @throws Exception
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1672 */
1
jurzua
parents:
diff changeset
1673 public List<Attribute> getDefAttributes() {
jurzua
parents:
diff changeset
1674 List<Attribute> list = new ArrayList<Attribute>();
jurzua
parents:
diff changeset
1675 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1676 try {
jurzua
parents:
diff changeset
1677 session.getTransaction().begin();
jurzua
parents:
diff changeset
1678
jurzua
parents:
diff changeset
1679 String hql = "from Attribute where systemStatus = :systemStatus and type = :type";
jurzua
parents:
diff changeset
1680 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1681
jurzua
parents:
diff changeset
1682 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1683 query.setString("type", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1684
jurzua
parents:
diff changeset
1685 list = query.list();
jurzua
parents:
diff changeset
1686
jurzua
parents:
diff changeset
1687 } catch (Exception e) {
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1688 logger.error(e);
1
jurzua
parents:
diff changeset
1689 } finally {
jurzua
parents:
diff changeset
1690 session.getTransaction().commit();
jurzua
parents:
diff changeset
1691 }
jurzua
parents:
diff changeset
1692 return list;
jurzua
parents:
diff changeset
1693 }
jurzua
parents:
diff changeset
1694
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1695 /**
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1696 * Returns all (lightweight) definition entities.
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1697 *
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1698 * @return
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1699 * @throws Exception
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1700 */
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1701 public List<Entity> getLWDefinitions() throws Exception {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1702 List<Entity> list = new ArrayList<Entity>();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1703 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1704 try {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1705 session.getTransaction().begin();
1
jurzua
parents:
diff changeset
1706
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1707 String hql = "from Entity where systemStatus = :systemStatus and type = :type";
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1708 Query query = session.createQuery(hql);
1
jurzua
parents:
diff changeset
1709
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1710 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1711 query.setString("type", Node.TYPE_TBOX);
1
jurzua
parents:
diff changeset
1712
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1713 list = query.list();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1714 for (Entity def : list) {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1715 def.setLightweight(true);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1716 }
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1717 } catch (Exception e) {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1718 logger.error(e);
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1719 } finally {
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1720 session.getTransaction().commit();
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1721 }
1
jurzua
parents:
diff changeset
1722
38
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1723 return list;
cb25e343e317 more comments and refactorings.
casties
parents: 36
diff changeset
1724 }
1
jurzua
parents:
diff changeset
1725
jurzua
parents:
diff changeset
1726 // #################################################################
jurzua
parents:
diff changeset
1727 // #################################################################
jurzua
parents:
diff changeset
1728 // #################################################################
jurzua
parents:
diff changeset
1729
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1730 /**
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1731 * Returns the number of Entities of the given objectClass in the database.
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1732 *
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1733 * Returns the number of all Entities if objectClass==null.
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1734 *
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1735 * @param objectClass
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1736 * @return
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1737 */
1
jurzua
parents:
diff changeset
1738 public Long getEntityCount(String objectClass) {
jurzua
parents:
diff changeset
1739 Long count = null;
jurzua
parents:
diff changeset
1740 try {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1741 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
1
jurzua
parents:
diff changeset
1742 session.getTransaction().begin();
jurzua
parents:
diff changeset
1743
jurzua
parents:
diff changeset
1744 String hql = "select count(*) from Entity where ";
jurzua
parents:
diff changeset
1745
jurzua
parents:
diff changeset
1746 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1747 hql += "objectClass = :objectClass AND ";
jurzua
parents:
diff changeset
1748 } else {
jurzua
parents:
diff changeset
1749 hql += "objectClass != :objectClass AND ";
jurzua
parents:
diff changeset
1750 }
jurzua
parents:
diff changeset
1751 hql += "systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
1752
jurzua
parents:
diff changeset
1753 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1754 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1755 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1756 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1757 } else {
jurzua
parents:
diff changeset
1758 query.setString("objectClass", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1759 }
jurzua
parents:
diff changeset
1760 count = (Long) query.uniqueResult();
jurzua
parents:
diff changeset
1761
jurzua
parents:
diff changeset
1762 session.getTransaction().commit();
jurzua
parents:
diff changeset
1763 } catch (Exception e) {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1764 logger.error(e);
1
jurzua
parents:
diff changeset
1765 }
jurzua
parents:
diff changeset
1766 return count;
jurzua
parents:
diff changeset
1767 }
jurzua
parents:
diff changeset
1768
jurzua
parents:
diff changeset
1769 /**
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1770 * Returns all Entities of the given objectClass in the database
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1771 * between startRecord and endRecord.
1
jurzua
parents:
diff changeset
1772 *
jurzua
parents:
diff changeset
1773 * @param objectClass
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1774 * if it is null, all entities are returned (except
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1775 * definitions). To get the definitions objectClass should be:
1
jurzua
parents:
diff changeset
1776 * Node.TYPE_TBOX
jurzua
parents:
diff changeset
1777 * @param startRecord
jurzua
parents:
diff changeset
1778 * @param endRecord
jurzua
parents:
diff changeset
1779 * @return
jurzua
parents:
diff changeset
1780 */
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1781 public List<Entity> getEntityPage(String objectClass, final int startRecord, final int endRecord) {
1
jurzua
parents:
diff changeset
1782
jurzua
parents:
diff changeset
1783 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
1784 try {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1785 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
1
jurzua
parents:
diff changeset
1786 session.getTransaction().begin();
jurzua
parents:
diff changeset
1787
jurzua
parents:
diff changeset
1788 String hql = "from Entity where ";
jurzua
parents:
diff changeset
1789
jurzua
parents:
diff changeset
1790 if (StringUtils.isNotEmpty(objectClass)) {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1791 // real objectClass
1
jurzua
parents:
diff changeset
1792 hql += "objectClass = :objectClass AND ";
jurzua
parents:
diff changeset
1793 } else {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1794 // objectClass == null -- match object_class != 'TBox'
1
jurzua
parents:
diff changeset
1795 hql += "objectClass != :objectClass AND ";
jurzua
parents:
diff changeset
1796 }
jurzua
parents:
diff changeset
1797
jurzua
parents:
diff changeset
1798 hql += "systemStatus = :systemStatus order by ownValue";
jurzua
parents:
diff changeset
1799
jurzua
parents:
diff changeset
1800 Query query = session.createQuery(hql);
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1801 // use Hibernate's result paging
1
jurzua
parents:
diff changeset
1802 query.setFirstResult(startRecord);
jurzua
parents:
diff changeset
1803 query.setMaxResults(endRecord);
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1804 // add query params
1
jurzua
parents:
diff changeset
1805 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1806 if (StringUtils.isNotEmpty(objectClass)) {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1807 // real objectClass
1
jurzua
parents:
diff changeset
1808 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1809 } else {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1810 // objectClass == null -- match object_class != 'TBox'
1
jurzua
parents:
diff changeset
1811 query.setString("objectClass", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1812 }
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1813 // fetch Entities
1
jurzua
parents:
diff changeset
1814 entities = query.list();
jurzua
parents:
diff changeset
1815
jurzua
parents:
diff changeset
1816 session.getTransaction().commit();
jurzua
parents:
diff changeset
1817 } catch (Exception e) {
75
e0be7c0030f5 cleanup and better comments.
casties
parents: 74
diff changeset
1818 logger.error(e);
1
jurzua
parents:
diff changeset
1819 }
jurzua
parents:
diff changeset
1820 return entities;
jurzua
parents:
diff changeset
1821 }
jurzua
parents:
diff changeset
1822
jurzua
parents:
diff changeset
1823 public static void main(String[] args) {
jurzua
parents:
diff changeset
1824 /*
jurzua
parents:
diff changeset
1825 * ServiceRegistry sr = new ServiceRegistry(); Long count =
jurzua
parents:
diff changeset
1826 * sr.getPersistenceService().getEntityCount("CODEX");
jurzua
parents:
diff changeset
1827 * logger.info("count codex " + count);
jurzua
parents:
diff changeset
1828 *
jurzua
parents:
diff changeset
1829 * List<Entity> list = sr.getPersistenceService().getEntityPage("CODEX",
jurzua
parents:
diff changeset
1830 * count.intValue() - 100, count.intValue() - 50); for(Entity e : list){
jurzua
parents:
diff changeset
1831 * logger.info(e.toString()); }
jurzua
parents:
diff changeset
1832 */
jurzua
parents:
diff changeset
1833 }
jurzua
parents:
diff changeset
1834
jurzua
parents:
diff changeset
1835 }