annotate src/main/java/org/mpi/openmind/repository/services/AbstractPersistenceService.java @ 1:615d27dce9b3

(none)
author jurzua
date Wed, 29 Oct 2014 13:28:45 +0000
parents
children c23ae718fdd3
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.Collection;
jurzua
parents:
diff changeset
6 import java.util.List;
jurzua
parents:
diff changeset
7 import java.util.Map;
jurzua
parents:
diff changeset
8
jurzua
parents:
diff changeset
9 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
10 import org.apache.log4j.Logger;
jurzua
parents:
diff changeset
11 import org.hibernate.Query;
jurzua
parents:
diff changeset
12 import org.hibernate.Session;
jurzua
parents:
diff changeset
13 import org.hibernate.impl.SessionFactoryImpl;
jurzua
parents:
diff changeset
14 import org.mpi.openmind.configuration.ConfigurationService;
jurzua
parents:
diff changeset
15 import org.mpi.openmind.repository.bo.Attribute;
jurzua
parents:
diff changeset
16 import org.mpi.openmind.repository.bo.Entity;
jurzua
parents:
diff changeset
17 import org.mpi.openmind.repository.bo.Node;
jurzua
parents:
diff changeset
18 import org.mpi.openmind.repository.bo.Relation;
jurzua
parents:
diff changeset
19 import org.mpi.openmind.repository.bo.View;
jurzua
parents:
diff changeset
20 import org.mpi.openmind.repository.bo.utils.Sequence;
jurzua
parents:
diff changeset
21 import org.mpi.openmind.repository.utils.ArabicNormalizerUtils;
jurzua
parents:
diff changeset
22 import org.mpi.openmind.repository.utils.HibernateUtil;
jurzua
parents:
diff changeset
23 import org.mpi.openmind.repository.utils.NormalizerUtils;
jurzua
parents:
diff changeset
24 import org.mpi.openmind.repository.utils.OwnValueGenerator;
jurzua
parents:
diff changeset
25
jurzua
parents:
diff changeset
26 /**
jurzua
parents:
diff changeset
27 *
jurzua
parents:
diff changeset
28 * @author jurzua
jurzua
parents:
diff changeset
29 */
jurzua
parents:
diff changeset
30 public abstract class AbstractPersistenceService {
jurzua
parents:
diff changeset
31
jurzua
parents:
diff changeset
32 private ConfigurationService configurationService;
jurzua
parents:
diff changeset
33
jurzua
parents:
diff changeset
34 private OwnValueGenerator ownValueGenerator;
jurzua
parents:
diff changeset
35
jurzua
parents:
diff changeset
36 private final static String NODE_SEQUENCE = "nodeSequence";
jurzua
parents:
diff changeset
37
jurzua
parents:
diff changeset
38 private static Logger logger = Logger
jurzua
parents:
diff changeset
39 .getLogger(AbstractPersistenceService.class);
jurzua
parents:
diff changeset
40
jurzua
parents:
diff changeset
41 private boolean importModus = false;
jurzua
parents:
diff changeset
42
jurzua
parents:
diff changeset
43 /*
jurzua
parents:
diff changeset
44 * static { logger.setLevel(Level.DEBUG); PatternLayout layout = new
jurzua
parents:
diff changeset
45 * PatternLayout( "%d{ABSOLUTE} %5p %c{1}:%L - %m%n"); Appender stdout = new
jurzua
parents:
diff changeset
46 * ConsoleAppender(layout, "System.out"); logger.addAppender(stdout); }
jurzua
parents:
diff changeset
47 */
jurzua
parents:
diff changeset
48
jurzua
parents:
diff changeset
49 public AbstractPersistenceService() {
jurzua
parents:
diff changeset
50 }
jurzua
parents:
diff changeset
51
jurzua
parents:
diff changeset
52 public String generateOwnValue(Entity entity) {
jurzua
parents:
diff changeset
53 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
54 String ownValue = null;
jurzua
parents:
diff changeset
55
jurzua
parents:
diff changeset
56 try {
jurzua
parents:
diff changeset
57 session.getTransaction().begin();
jurzua
parents:
diff changeset
58 ownValue = this.ownValueGenerator.generateOwnValue(entity, session);
jurzua
parents:
diff changeset
59 } catch (Exception e) {
jurzua
parents:
diff changeset
60 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
61 // e.printStackTrace();
jurzua
parents:
diff changeset
62 } finally {
jurzua
parents:
diff changeset
63 session.getTransaction().commit();
jurzua
parents:
diff changeset
64 }
jurzua
parents:
diff changeset
65
jurzua
parents:
diff changeset
66 return ownValue;
jurzua
parents:
diff changeset
67 }
jurzua
parents:
diff changeset
68
jurzua
parents:
diff changeset
69 /**
jurzua
parents:
diff changeset
70 * Performs the actual disabling of the Hibernate second-level cache.
jurzua
parents:
diff changeset
71 */
jurzua
parents:
diff changeset
72 /*
jurzua
parents:
diff changeset
73 protected void disableSecondLevelCache() {
jurzua
parents:
diff changeset
74 Map<Object, Cache> cacheRegionsMap = ((SessionFactoryImpl) HibernateUtil
jurzua
parents:
diff changeset
75 .getSessionFactory()).getAllSecondLevelCacheRegions();
jurzua
parents:
diff changeset
76 Collection<Cache> cacheRegions = cacheRegionsMap.values();
jurzua
parents:
diff changeset
77 for (Cache cache : cacheRegions) {
jurzua
parents:
diff changeset
78 cache.clear();
jurzua
parents:
diff changeset
79 }
jurzua
parents:
diff changeset
80 }*/
jurzua
parents:
diff changeset
81
jurzua
parents:
diff changeset
82 public int dropAssertions() {
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 = 'ABox'";
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 assertions - 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 int dropDefinitions() {
jurzua
parents:
diff changeset
103 int row = 0;
jurzua
parents:
diff changeset
104 try {
jurzua
parents:
diff changeset
105 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
106 .getCurrentSession();
jurzua
parents:
diff changeset
107 session.beginTransaction();
jurzua
parents:
diff changeset
108 String sql = "DELETE FROM Node WHERE type = 'TBox'";
jurzua
parents:
diff changeset
109 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
110 row = query.executeUpdate();
jurzua
parents:
diff changeset
111
jurzua
parents:
diff changeset
112 logger.info("Drop definitions - rows deleted= " + row);
jurzua
parents:
diff changeset
113
jurzua
parents:
diff changeset
114 session.getTransaction().commit();
jurzua
parents:
diff changeset
115 } catch (Exception e) {
jurzua
parents:
diff changeset
116 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
117 // e.printStackTrace();
jurzua
parents:
diff changeset
118 }
jurzua
parents:
diff changeset
119 return row;
jurzua
parents:
diff changeset
120 }
jurzua
parents:
diff changeset
121
jurzua
parents:
diff changeset
122 public void saveOrUpdateObject(Object obj) {
jurzua
parents:
diff changeset
123 try {
jurzua
parents:
diff changeset
124 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
125 .getCurrentSession();
jurzua
parents:
diff changeset
126 session.getTransaction().begin();
jurzua
parents:
diff changeset
127 session.saveOrUpdate(obj);
jurzua
parents:
diff changeset
128 session.getTransaction().commit();
jurzua
parents:
diff changeset
129 } catch (Exception e) {
jurzua
parents:
diff changeset
130 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
131 }
jurzua
parents:
diff changeset
132 }
jurzua
parents:
diff changeset
133
jurzua
parents:
diff changeset
134 private void saveNode0(Session session, Node node, Sequence idSequence){
jurzua
parents:
diff changeset
135 node.autoNormalize();
jurzua
parents:
diff changeset
136 node.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
137
jurzua
parents:
diff changeset
138 if(node.getModificationTime() == null){
jurzua
parents:
diff changeset
139 node.setModificationTime(System.currentTimeMillis());
jurzua
parents:
diff changeset
140 }
jurzua
parents:
diff changeset
141 if(node.getVersion() == null){
jurzua
parents:
diff changeset
142 node.increaseVersion();
jurzua
parents:
diff changeset
143 }
jurzua
parents:
diff changeset
144
jurzua
parents:
diff changeset
145 if (node.getId() == null){
jurzua
parents:
diff changeset
146 node.setId(idSequence.generateId());
jurzua
parents:
diff changeset
147 }
jurzua
parents:
diff changeset
148
jurzua
parents:
diff changeset
149 if (node.getRowId() == null){
jurzua
parents:
diff changeset
150 session.save(node);
jurzua
parents:
diff changeset
151 }else{
jurzua
parents:
diff changeset
152 session.merge(node);
jurzua
parents:
diff changeset
153 }
jurzua
parents:
diff changeset
154
jurzua
parents:
diff changeset
155 logger.info("Saved node\t" + node);
jurzua
parents:
diff changeset
156 }
jurzua
parents:
diff changeset
157
jurzua
parents:
diff changeset
158 public void saveNode(Node node) throws Exception {
jurzua
parents:
diff changeset
159
jurzua
parents:
diff changeset
160 logger.info("Saving node\t" + node);
jurzua
parents:
diff changeset
161
jurzua
parents:
diff changeset
162 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
163 session.getTransaction().begin();
jurzua
parents:
diff changeset
164
jurzua
parents:
diff changeset
165 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
166
jurzua
parents:
diff changeset
167 this.saveNode0(session, node, idSequence);
jurzua
parents:
diff changeset
168
jurzua
parents:
diff changeset
169 session.save(idSequence);
jurzua
parents:
diff changeset
170
jurzua
parents:
diff changeset
171 session.getTransaction().commit();
jurzua
parents:
diff changeset
172 logger.info("Node saved\t" + node);
jurzua
parents:
diff changeset
173 }
jurzua
parents:
diff changeset
174
jurzua
parents:
diff changeset
175 public void saveNodeList(List<Node> nodeList) throws Exception{
jurzua
parents:
diff changeset
176
jurzua
parents:
diff changeset
177 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
178 session.getTransaction().begin();
jurzua
parents:
diff changeset
179
jurzua
parents:
diff changeset
180 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
181 /*
jurzua
parents:
diff changeset
182 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
183 DecimalFormat df = new DecimalFormat("#.##");
jurzua
parents:
diff changeset
184 int counter = 0;
jurzua
parents:
diff changeset
185 */
jurzua
parents:
diff changeset
186 logger.info("##### Saving Node List: " + nodeList.size() + " #####");
jurzua
parents:
diff changeset
187
jurzua
parents:
diff changeset
188 for (Node node : nodeList) {
jurzua
parents:
diff changeset
189 this.saveNode0(session, node, idSequence);
jurzua
parents:
diff changeset
190 /*
jurzua
parents:
diff changeset
191 double percent = ((double) counter / (double) nodeList.size()) * 100.0;
jurzua
parents:
diff changeset
192 long diff = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
193 double min = (double) diff / (double) (60 * 1000);
jurzua
parents:
diff changeset
194
jurzua
parents:
diff changeset
195 if ((percent % 10) < 0.005) {
jurzua
parents:
diff changeset
196 logger.debug("\n[" + df.format(percent) + " %] counter: "
jurzua
parents:
diff changeset
197 + counter + " / " + nodeList.size());
jurzua
parents:
diff changeset
198
jurzua
parents:
diff changeset
199 logger.debug("Tempo: " + (double) counter / min);
jurzua
parents:
diff changeset
200 }
jurzua
parents:
diff changeset
201 counter++;
jurzua
parents:
diff changeset
202 */
jurzua
parents:
diff changeset
203 }
jurzua
parents:
diff changeset
204
jurzua
parents:
diff changeset
205 session.save(idSequence);
jurzua
parents:
diff changeset
206 session.getTransaction().commit();
jurzua
parents:
diff changeset
207 }
jurzua
parents:
diff changeset
208
jurzua
parents:
diff changeset
209 /**
jurzua
parents:
diff changeset
210 * <p>
jurzua
parents:
diff changeset
211 * This method delete the nodes and its history.
jurzua
parents:
diff changeset
212 * </p>
jurzua
parents:
diff changeset
213 *
jurzua
parents:
diff changeset
214 * @param nodeList
jurzua
parents:
diff changeset
215 */
jurzua
parents:
diff changeset
216 public void removeNode(Node node) {
jurzua
parents:
diff changeset
217 try {
jurzua
parents:
diff changeset
218 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
219 .getCurrentSession();
jurzua
parents:
diff changeset
220 session.getTransaction().begin();
jurzua
parents:
diff changeset
221
jurzua
parents:
diff changeset
222 this.removeNodesById(node.getId(), session);
jurzua
parents:
diff changeset
223
jurzua
parents:
diff changeset
224 session.getTransaction().commit();
jurzua
parents:
diff changeset
225 } catch (Exception e) {
jurzua
parents:
diff changeset
226 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
227 // e.printStackTrace();
jurzua
parents:
diff changeset
228 }
jurzua
parents:
diff changeset
229 }
jurzua
parents:
diff changeset
230
jurzua
parents:
diff changeset
231 /**
jurzua
parents:
diff changeset
232 * <p>
jurzua
parents:
diff changeset
233 * This method delete the nodes and its history.
jurzua
parents:
diff changeset
234 * </p>
jurzua
parents:
diff changeset
235 *
jurzua
parents:
diff changeset
236 * @param nodeList
jurzua
parents:
diff changeset
237 */
jurzua
parents:
diff changeset
238 public void removeNodeList(List<Node> nodeList) {
jurzua
parents:
diff changeset
239 try {
jurzua
parents:
diff changeset
240 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
241 .getCurrentSession();
jurzua
parents:
diff changeset
242 session.getTransaction().begin();
jurzua
parents:
diff changeset
243
jurzua
parents:
diff changeset
244 logger.debug("##### Deleting Node List: " + nodeList.size()
jurzua
parents:
diff changeset
245 + " #####");
jurzua
parents:
diff changeset
246
jurzua
parents:
diff changeset
247 for (Node node : nodeList) {
jurzua
parents:
diff changeset
248 this.removeNodesById(node.getId(), session);
jurzua
parents:
diff changeset
249 }
jurzua
parents:
diff changeset
250
jurzua
parents:
diff changeset
251 session.getTransaction().commit();
jurzua
parents:
diff changeset
252 } catch (Exception e) {
jurzua
parents:
diff changeset
253 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
254 // e.printStackTrace();
jurzua
parents:
diff changeset
255 }
jurzua
parents:
diff changeset
256 }
jurzua
parents:
diff changeset
257
jurzua
parents:
diff changeset
258 /**
jurzua
parents:
diff changeset
259 * Save every part of the entity but not generate new versions nor ownValue
jurzua
parents:
diff changeset
260 *
jurzua
parents:
diff changeset
261 * @param nodeList
jurzua
parents:
diff changeset
262 */
jurzua
parents:
diff changeset
263 public void saveEntityListAsNode(List<Entity> entList) {
jurzua
parents:
diff changeset
264 int entitiesSize = 0;
jurzua
parents:
diff changeset
265 int nodeSize = 0;
jurzua
parents:
diff changeset
266 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
267 try {
jurzua
parents:
diff changeset
268 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
269 .getCurrentSession();
jurzua
parents:
diff changeset
270 session.getTransaction().begin();
jurzua
parents:
diff changeset
271
jurzua
parents:
diff changeset
272 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
273
jurzua
parents:
diff changeset
274 DecimalFormat df = new DecimalFormat("#.##");
jurzua
parents:
diff changeset
275 int counter = 0;
jurzua
parents:
diff changeset
276
jurzua
parents:
diff changeset
277 List<Node> nodeList = generateNodeList(entList);
jurzua
parents:
diff changeset
278 logger.debug("##### Saving Node List #####");
jurzua
parents:
diff changeset
279 logger.debug("Entities: " + entList.size() + " #####");
jurzua
parents:
diff changeset
280 logger.debug("Nodes: " + nodeList.size() + " #####");
jurzua
parents:
diff changeset
281
jurzua
parents:
diff changeset
282 entitiesSize = entList.size();
jurzua
parents:
diff changeset
283 nodeSize = nodeList.size();
jurzua
parents:
diff changeset
284
jurzua
parents:
diff changeset
285 for (Node node : nodeList) {
jurzua
parents:
diff changeset
286
jurzua
parents:
diff changeset
287 node.autoNormalize();
jurzua
parents:
diff changeset
288
jurzua
parents:
diff changeset
289 if (node.getId() == null)
jurzua
parents:
diff changeset
290 node.setId(idSequence.generateId());
jurzua
parents:
diff changeset
291 if (node.getRowId() == null)
jurzua
parents:
diff changeset
292 session.save(node);
jurzua
parents:
diff changeset
293 else
jurzua
parents:
diff changeset
294 session.merge(node);
jurzua
parents:
diff changeset
295
jurzua
parents:
diff changeset
296 double percent = ((double) counter / (double) nodeList.size()) * 100.0;
jurzua
parents:
diff changeset
297 long diff = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
298 double min = (double) diff / (double) (60 * 1000);
jurzua
parents:
diff changeset
299
jurzua
parents:
diff changeset
300 if ((percent % 10) < 0.005) {
jurzua
parents:
diff changeset
301 logger.debug("\n[" + df.format(percent) + " %] counter: "
jurzua
parents:
diff changeset
302 + counter + " / " + nodeList.size());
jurzua
parents:
diff changeset
303
jurzua
parents:
diff changeset
304 logger.debug("Tempo: " + (double) counter / min);
jurzua
parents:
diff changeset
305 }
jurzua
parents:
diff changeset
306 counter++;
jurzua
parents:
diff changeset
307 }
jurzua
parents:
diff changeset
308
jurzua
parents:
diff changeset
309 session.save(idSequence);
jurzua
parents:
diff changeset
310 session.getTransaction().commit();
jurzua
parents:
diff changeset
311
jurzua
parents:
diff changeset
312 StringBuilder sb = new StringBuilder();
jurzua
parents:
diff changeset
313 sb.append("\n\t#### saveEntityListAsNode ####\n");
jurzua
parents:
diff changeset
314 sb.append("\tentitiesSize=\t" + entitiesSize + "\n");
jurzua
parents:
diff changeset
315 sb.append("\tnodeSize=\t" + nodeSize + "\n");
jurzua
parents:
diff changeset
316 sb.append("\ttime[ms]=\t" + (System.currentTimeMillis() - start)
jurzua
parents:
diff changeset
317 + "\n");
jurzua
parents:
diff changeset
318 logger.info(sb.toString());
jurzua
parents:
diff changeset
319
jurzua
parents:
diff changeset
320 } catch (Exception e) {
jurzua
parents:
diff changeset
321 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
322 e.printStackTrace();
jurzua
parents:
diff changeset
323 }
jurzua
parents:
diff changeset
324 }
jurzua
parents:
diff changeset
325
jurzua
parents:
diff changeset
326 private List<Node> generateNodeList(List<Entity> list) {
jurzua
parents:
diff changeset
327 List<Node> list0 = new ArrayList<Node>();
jurzua
parents:
diff changeset
328 for (Entity ent : list) {
jurzua
parents:
diff changeset
329 list0.add(ent);
jurzua
parents:
diff changeset
330 for (Attribute att : ent.getAttributes()) {
jurzua
parents:
diff changeset
331 list0.add(att);
jurzua
parents:
diff changeset
332 }
jurzua
parents:
diff changeset
333 for (Relation rel : ent.getSourceRelations()) {
jurzua
parents:
diff changeset
334 list0.add(rel);
jurzua
parents:
diff changeset
335 }
jurzua
parents:
diff changeset
336 for (Relation rel : ent.getTargetRelations()) {
jurzua
parents:
diff changeset
337 list0.add(rel);
jurzua
parents:
diff changeset
338 }
jurzua
parents:
diff changeset
339 }
jurzua
parents:
diff changeset
340 return list0;
jurzua
parents:
diff changeset
341 }
jurzua
parents:
diff changeset
342
jurzua
parents:
diff changeset
343 /**
jurzua
parents:
diff changeset
344 * @param nodeList
jurzua
parents:
diff changeset
345 */
jurzua
parents:
diff changeset
346 public void saveEntityListAsNodeWithoutContent(List<Entity> nodeList)
jurzua
parents:
diff changeset
347 throws Exception {
jurzua
parents:
diff changeset
348 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
349
jurzua
parents:
diff changeset
350 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
351 session.getTransaction().begin();
jurzua
parents:
diff changeset
352
jurzua
parents:
diff changeset
353 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
354 DecimalFormat df = new DecimalFormat("#.##");
jurzua
parents:
diff changeset
355 int counter = 0;
jurzua
parents:
diff changeset
356
jurzua
parents:
diff changeset
357 logger.debug("##### Saving Node List: " + nodeList.size() + " #####");
jurzua
parents:
diff changeset
358
jurzua
parents:
diff changeset
359 for (Entity node : nodeList) {
jurzua
parents:
diff changeset
360 node.autoNormalize();
jurzua
parents:
diff changeset
361 if (node.getId() == null)
jurzua
parents:
diff changeset
362 node.setId(idSequence.generateId());
jurzua
parents:
diff changeset
363 if (node.getRowId() == null)
jurzua
parents:
diff changeset
364 session.save(node);
jurzua
parents:
diff changeset
365 else
jurzua
parents:
diff changeset
366 session.merge(node);
jurzua
parents:
diff changeset
367 double percent = ((double) counter / (double) nodeList.size()) * 100.0;
jurzua
parents:
diff changeset
368 long diff = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
369 double min = (double) diff / (double) (60 * 1000);
jurzua
parents:
diff changeset
370
jurzua
parents:
diff changeset
371 if ((percent % 10) < 0.005) {
jurzua
parents:
diff changeset
372 logger.debug("\n[" + df.format(percent) + " %] counter: "
jurzua
parents:
diff changeset
373 + counter + " / " + nodeList.size());
jurzua
parents:
diff changeset
374
jurzua
parents:
diff changeset
375 logger.debug("Tempo: " + (double) counter / min);
jurzua
parents:
diff changeset
376 }
jurzua
parents:
diff changeset
377 counter++;
jurzua
parents:
diff changeset
378 }
jurzua
parents:
diff changeset
379
jurzua
parents:
diff changeset
380 session.save(idSequence);
jurzua
parents:
diff changeset
381 session.getTransaction().commit();
jurzua
parents:
diff changeset
382 }
jurzua
parents:
diff changeset
383
jurzua
parents:
diff changeset
384 public void deleteEntityList(List<Entity> entities) {
jurzua
parents:
diff changeset
385 try {
jurzua
parents:
diff changeset
386 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
387 .getCurrentSession();
jurzua
parents:
diff changeset
388 session.getTransaction().begin();
jurzua
parents:
diff changeset
389
jurzua
parents:
diff changeset
390 for (Entity ent : entities) {
jurzua
parents:
diff changeset
391 this.removePersistenceEntity(ent, session);
jurzua
parents:
diff changeset
392 }
jurzua
parents:
diff changeset
393
jurzua
parents:
diff changeset
394 session.getTransaction().commit();
jurzua
parents:
diff changeset
395 } catch (Exception e) {
jurzua
parents:
diff changeset
396 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
397 // e.printStackTrace();
jurzua
parents:
diff changeset
398 }
jurzua
parents:
diff changeset
399 }
jurzua
parents:
diff changeset
400
jurzua
parents:
diff changeset
401 public void saveEntityList(List<Entity> entities) throws Exception {
jurzua
parents:
diff changeset
402 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
403 session.getTransaction().begin();
jurzua
parents:
diff changeset
404
jurzua
parents:
diff changeset
405 for (Entity entity : entities) {
jurzua
parents:
diff changeset
406 saveEntity0(session, entity);
jurzua
parents:
diff changeset
407 }
jurzua
parents:
diff changeset
408
jurzua
parents:
diff changeset
409 session.getTransaction().commit();
jurzua
parents:
diff changeset
410 }
jurzua
parents:
diff changeset
411
jurzua
parents:
diff changeset
412 public Map<Long, Long> saveEntityListAsNew(List<Entity> entities,
jurzua
parents:
diff changeset
413 Map<Long, Long> idMap) throws Exception {
jurzua
parents:
diff changeset
414
jurzua
parents:
diff changeset
415 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
416 session.getTransaction().begin();
jurzua
parents:
diff changeset
417 Sequence idSequence = this.getIdSequence(session);
jurzua
parents:
diff changeset
418
jurzua
parents:
diff changeset
419 for (Entity entity : entities) {
jurzua
parents:
diff changeset
420
jurzua
parents:
diff changeset
421 Long oldId = entity.getId();
jurzua
parents:
diff changeset
422 entity.resetId();
jurzua
parents:
diff changeset
423 entity.resetRowId();
jurzua
parents:
diff changeset
424 this.saveEntity0(session, entity);
jurzua
parents:
diff changeset
425 idMap.put(oldId, entity.getId());
jurzua
parents:
diff changeset
426 }
jurzua
parents:
diff changeset
427
jurzua
parents:
diff changeset
428 session.save(idSequence);
jurzua
parents:
diff changeset
429 session.getTransaction().commit();
jurzua
parents:
diff changeset
430 return idMap;
jurzua
parents:
diff changeset
431 }
jurzua
parents:
diff changeset
432
jurzua
parents:
diff changeset
433 /**
jurzua
parents:
diff changeset
434 * <p>
jurzua
parents:
diff changeset
435 * This method deletes all entities by type (TBox/ABox), it means the method
jurzua
parents:
diff changeset
436 * deletes either all concepts or all assertions.
jurzua
parents:
diff changeset
437 * </p>
jurzua
parents:
diff changeset
438 * <p>
jurzua
parents:
diff changeset
439 * The history of every deleted entity will be removed too.
jurzua
parents:
diff changeset
440 * </p>
jurzua
parents:
diff changeset
441 *
jurzua
parents:
diff changeset
442 * @param type
jurzua
parents:
diff changeset
443 * Node.TYPE_TBOX or Node.TYPE_ABOX
jurzua
parents:
diff changeset
444 */
jurzua
parents:
diff changeset
445 @Deprecated
jurzua
parents:
diff changeset
446 public void deleteEntities(Long id, String type, Boolean deleteHistory) {
jurzua
parents:
diff changeset
447 if (!(Node.TYPE_ABOX.equals(type) || Node.TYPE_TBOX.equals(type))) {
jurzua
parents:
diff changeset
448 throw new IllegalArgumentException(
jurzua
parents:
diff changeset
449 "The parameter 'type' should be either: " + Node.TYPE_ABOX
jurzua
parents:
diff changeset
450 + " or " + Node.TYPE_TBOX + ", but was: " + type);
jurzua
parents:
diff changeset
451 }
jurzua
parents:
diff changeset
452
jurzua
parents:
diff changeset
453 List<Entity> entList = this.getEntities(id,
jurzua
parents:
diff changeset
454 Node.SYS_STATUS_CURRENT_VERSION, type, null);
jurzua
parents:
diff changeset
455
jurzua
parents:
diff changeset
456 // loading previous versions
jurzua
parents:
diff changeset
457 List<Entity> historyEntList = new ArrayList<Entity>();
jurzua
parents:
diff changeset
458 if (deleteHistory) {
jurzua
parents:
diff changeset
459 for (Entity ent : entList) {
jurzua
parents:
diff changeset
460 historyEntList.addAll(this.getEntities(ent.getId(),
jurzua
parents:
diff changeset
461 Node.SYS_STATUS_PREVIOUS_VERSION, type, null));
jurzua
parents:
diff changeset
462 }
jurzua
parents:
diff changeset
463 }
jurzua
parents:
diff changeset
464
jurzua
parents:
diff changeset
465 try {
jurzua
parents:
diff changeset
466 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
467 .getCurrentSession();
jurzua
parents:
diff changeset
468 session.getTransaction().begin();
jurzua
parents:
diff changeset
469
jurzua
parents:
diff changeset
470 for (Entity ent : entList) {
jurzua
parents:
diff changeset
471 this.removePersistenceEntity(ent, session);
jurzua
parents:
diff changeset
472 }
jurzua
parents:
diff changeset
473 if (deleteHistory) {
jurzua
parents:
diff changeset
474 for (Entity ent : historyEntList) {
jurzua
parents:
diff changeset
475 this.removePersistenceEntity(ent, session);
jurzua
parents:
diff changeset
476 }
jurzua
parents:
diff changeset
477 }
jurzua
parents:
diff changeset
478
jurzua
parents:
diff changeset
479 session.getTransaction().commit();
jurzua
parents:
diff changeset
480 } catch (Exception e) {
jurzua
parents:
diff changeset
481 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
482 // e.printStackTrace();
jurzua
parents:
diff changeset
483 }
jurzua
parents:
diff changeset
484 }
jurzua
parents:
diff changeset
485
jurzua
parents:
diff changeset
486 /**
jurzua
parents:
diff changeset
487 * This deleting is made using JDBC and not hibernate. The history is too
jurzua
parents:
diff changeset
488 * removed by this method. TODO test what could happen with the hibernate
jurzua
parents:
diff changeset
489 * cache
jurzua
parents:
diff changeset
490 *
jurzua
parents:
diff changeset
491 * @param ent
jurzua
parents:
diff changeset
492 * @param session
jurzua
parents:
diff changeset
493 */
jurzua
parents:
diff changeset
494 private void removePersistenceEntity(Entity ent, Session session) {
jurzua
parents:
diff changeset
495 for (Attribute att : ent.getAttributes()) {
jurzua
parents:
diff changeset
496 // session.delete(att);
jurzua
parents:
diff changeset
497 removeNodesById(att.getId(), session);
jurzua
parents:
diff changeset
498 for (View view : att.getViews()) {
jurzua
parents:
diff changeset
499 // session.delete(view);
jurzua
parents:
diff changeset
500 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
501 }
jurzua
parents:
diff changeset
502 }
jurzua
parents:
diff changeset
503 for (Relation rel : ent.getSourceRelations()) {
jurzua
parents:
diff changeset
504 // session.delete(rel);
jurzua
parents:
diff changeset
505 removeNodesById(rel.getId(), session);
jurzua
parents:
diff changeset
506 for (View view : rel.getViews()) {
jurzua
parents:
diff changeset
507 // session.delete(view);
jurzua
parents:
diff changeset
508 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
509 }
jurzua
parents:
diff changeset
510 }
jurzua
parents:
diff changeset
511 for (Relation rel : ent.getTargetRelations()) {
jurzua
parents:
diff changeset
512 // session.delete(rel);
jurzua
parents:
diff changeset
513 removeNodesById(rel.getId(), session);
jurzua
parents:
diff changeset
514 for (View view : rel.getViews()) {
jurzua
parents:
diff changeset
515 // session.delete(view);
jurzua
parents:
diff changeset
516 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
517 }
jurzua
parents:
diff changeset
518 }
jurzua
parents:
diff changeset
519 for (View view : ent.getViews()) {
jurzua
parents:
diff changeset
520 // session.delete(view);
jurzua
parents:
diff changeset
521 removeNodesById(view.getId(), session);
jurzua
parents:
diff changeset
522 }
jurzua
parents:
diff changeset
523 // session.delete(ent);
jurzua
parents:
diff changeset
524 removeNodesById(ent.getId(), session);
jurzua
parents:
diff changeset
525 }
jurzua
parents:
diff changeset
526
jurzua
parents:
diff changeset
527 private int removeNodesById(Long id, Session session) {
jurzua
parents:
diff changeset
528 String sql = "DELETE FROM Node WHERE id = :id";
jurzua
parents:
diff changeset
529 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
530 query.setLong("id", id);
jurzua
parents:
diff changeset
531 return query.executeUpdate();
jurzua
parents:
diff changeset
532 }
jurzua
parents:
diff changeset
533
jurzua
parents:
diff changeset
534 /**
jurzua
parents:
diff changeset
535 * <p>
jurzua
parents:
diff changeset
536 * Changes the system status of the entity from CURRENT_VERSION to
jurzua
parents:
diff changeset
537 * PREVIOUS_VERSION.
jurzua
parents:
diff changeset
538 * </p>
jurzua
parents:
diff changeset
539 *
jurzua
parents:
diff changeset
540 * <p>
jurzua
parents:
diff changeset
541 * It means, the entity will stay in the DB, but the it will not be visible
jurzua
parents:
diff changeset
542 * by the ordinary methods.
jurzua
parents:
diff changeset
543 * </p>
jurzua
parents:
diff changeset
544 *
jurzua
parents:
diff changeset
545 * @param entity
jurzua
parents:
diff changeset
546 */
jurzua
parents:
diff changeset
547 public void removeEntCurrentVersion(Long entId, String type)
jurzua
parents:
diff changeset
548 throws Exception {
jurzua
parents:
diff changeset
549 logger.info("Deleting entity [ID=" + entId + ", type=" + type
jurzua
parents:
diff changeset
550 + "]. But keeping history in DB.");
jurzua
parents:
diff changeset
551 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
552 session.getTransaction().begin();
jurzua
parents:
diff changeset
553
jurzua
parents:
diff changeset
554 if (entId != null) {
jurzua
parents:
diff changeset
555 //this method get the current version. Related to the relation, the time_modification is not consider,
jurzua
parents:
diff changeset
556 //because it it producing problems.
jurzua
parents:
diff changeset
557 List<Entity> previousEntityList =
jurzua
parents:
diff changeset
558 this.getEntities(session, entId,
jurzua
parents:
diff changeset
559 Node.SYS_STATUS_CURRENT_VERSION,
jurzua
parents:
diff changeset
560 type, null, false);
jurzua
parents:
diff changeset
561 if (previousEntityList.size() > 0) {
jurzua
parents:
diff changeset
562 if (previousEntityList.size() > 1) {
jurzua
parents:
diff changeset
563 System.err
jurzua
parents:
diff changeset
564 .println("[PersistenceService.saveEntity] found more than one current entities!");
jurzua
parents:
diff changeset
565 }
jurzua
parents:
diff changeset
566
jurzua
parents:
diff changeset
567 Entity previousEntity = previousEntityList.get(0);
jurzua
parents:
diff changeset
568 logger.info("Saving previous entity: " + previousEntity);
jurzua
parents:
diff changeset
569 this.savePreviousEntity(session, previousEntity);
jurzua
parents:
diff changeset
570 }
jurzua
parents:
diff changeset
571 }
jurzua
parents:
diff changeset
572 session.getTransaction().commit();
jurzua
parents:
diff changeset
573 }
jurzua
parents:
diff changeset
574
jurzua
parents:
diff changeset
575 /*
jurzua
parents:
diff changeset
576 * public void removeEntity(Long entId, String type) {
jurzua
parents:
diff changeset
577 * logger.info("Deleting entity [ID=" + entId + ", type=" + type +
jurzua
parents:
diff changeset
578 * "]. But keeping history in DB."); Session session =
jurzua
parents:
diff changeset
579 * HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
580 * session.getTransaction().begin();
jurzua
parents:
diff changeset
581 *
jurzua
parents:
diff changeset
582 * if (entId != null) { List<Entity> previousEntityList =
jurzua
parents:
diff changeset
583 * this.getEntities(session, entId, Node.SYS_STATUS_CURRENT_VERSION, type,
jurzua
parents:
diff changeset
584 * null); if (previousEntityList.size() > 0) { if (previousEntityList.size()
jurzua
parents:
diff changeset
585 * > 1) { System.err .println(
jurzua
parents:
diff changeset
586 * "[PersistenceService.saveEntity] found more than one current entities!");
jurzua
parents:
diff changeset
587 * }
jurzua
parents:
diff changeset
588 *
jurzua
parents:
diff changeset
589 * Entity previousEntity = previousEntityList.get(0);
jurzua
parents:
diff changeset
590 * logger.info("Saving previous entity: " + previousEntity);
jurzua
parents:
diff changeset
591 * this.savePreviousEntity(session, previousEntity); } } }
jurzua
parents:
diff changeset
592 */
jurzua
parents:
diff changeset
593
jurzua
parents:
diff changeset
594 public void savePreviousEntity(Entity entity) throws Exception {
jurzua
parents:
diff changeset
595
jurzua
parents:
diff changeset
596 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
597 session.getTransaction().begin();
jurzua
parents:
diff changeset
598
jurzua
parents:
diff changeset
599 if (entity.getId() != null) {
jurzua
parents:
diff changeset
600 List<Entity> previousEntityList = this.getEntities(session,
jurzua
parents:
diff changeset
601 entity.getId(), Node.SYS_STATUS_CURRENT_VERSION,
jurzua
parents:
diff changeset
602 entity.getType(), null, false);
jurzua
parents:
diff changeset
603 if (previousEntityList.size() > 0) {
jurzua
parents:
diff changeset
604 if (previousEntityList.size() > 1) {
jurzua
parents:
diff changeset
605 logger.error("[PersistenceService.saveEntity] found more than one current entities!");
jurzua
parents:
diff changeset
606 }
jurzua
parents:
diff changeset
607 Entity previousEntity = previousEntityList.get(0);
jurzua
parents:
diff changeset
608 logger.debug("Saving previous entity: " + previousEntity);
jurzua
parents:
diff changeset
609 this.savePreviousEntity(session, previousEntity);
jurzua
parents:
diff changeset
610 }
jurzua
parents:
diff changeset
611 }
jurzua
parents:
diff changeset
612 this.saveCurrentEntity(session, entity, null);
jurzua
parents:
diff changeset
613 session.getTransaction().commit();
jurzua
parents:
diff changeset
614 }
jurzua
parents:
diff changeset
615
jurzua
parents:
diff changeset
616 /**
jurzua
parents:
diff changeset
617 *
jurzua
parents:
diff changeset
618 * @param entity
jurzua
parents:
diff changeset
619 * @return
jurzua
parents:
diff changeset
620 */
jurzua
parents:
diff changeset
621 public void saveEntity(Entity entity) throws Exception {
jurzua
parents:
diff changeset
622
jurzua
parents:
diff changeset
623 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
624 session.getTransaction().begin();
jurzua
parents:
diff changeset
625
jurzua
parents:
diff changeset
626 saveEntity0(session, entity);
jurzua
parents:
diff changeset
627
jurzua
parents:
diff changeset
628 session.getTransaction().commit();
jurzua
parents:
diff changeset
629
jurzua
parents:
diff changeset
630 }
jurzua
parents:
diff changeset
631
jurzua
parents:
diff changeset
632 private void saveEntity0(Session session, Entity entity) throws Exception {
jurzua
parents:
diff changeset
633 if (entity.getId() != null) {
jurzua
parents:
diff changeset
634 List<Entity> previousEntityList = this.getEntities(session, entity.getId(), Node.SYS_STATUS_CURRENT_VERSION, entity.getType(), null, false);
jurzua
parents:
diff changeset
635 if (previousEntityList.size() > 0) {
jurzua
parents:
diff changeset
636 if (previousEntityList.size() > 1) {
jurzua
parents:
diff changeset
637 logger.error("[PersistenceService.saveEntity] found more than one current entities!");
jurzua
parents:
diff changeset
638 }
jurzua
parents:
diff changeset
639
jurzua
parents:
diff changeset
640 Entity previousEntity = previousEntityList.get(0);
jurzua
parents:
diff changeset
641 logger.info("Saving previous entity: " + previousEntity);
jurzua
parents:
diff changeset
642 this.savePreviousEntity(session, previousEntity);
jurzua
parents:
diff changeset
643 }
jurzua
parents:
diff changeset
644 }
jurzua
parents:
diff changeset
645 this.saveCurrentEntity(session, entity, null);
jurzua
parents:
diff changeset
646 }
jurzua
parents:
diff changeset
647
jurzua
parents:
diff changeset
648 private void saveCurrentEntity(Session session, Entity entity,
jurzua
parents:
diff changeset
649 Sequence idSequence) throws Exception {
jurzua
parents:
diff changeset
650 Long time = System.currentTimeMillis();
jurzua
parents:
diff changeset
651 entity.setSystemStatus(Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
652 entity.resetRowId();
jurzua
parents:
diff changeset
653 entity.increaseVersion();
jurzua
parents:
diff changeset
654 entity.setObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
655 entity.setModificationTime(time);
jurzua
parents:
diff changeset
656 entity.setType(entity.getType());
jurzua
parents:
diff changeset
657 entity.setUser(entity.getUser());
jurzua
parents:
diff changeset
658 entity.autoNormalize();
jurzua
parents:
diff changeset
659 // generating of id, connecting rels, atts and views to the entity
jurzua
parents:
diff changeset
660 this.prepareEntity(session, entity, idSequence);
jurzua
parents:
diff changeset
661 this.saveEntity(session, entity);
jurzua
parents:
diff changeset
662 }
jurzua
parents:
diff changeset
663
jurzua
parents:
diff changeset
664 /**
jurzua
parents:
diff changeset
665 * Here the modification time will be propagated from the entity to its
jurzua
parents:
diff changeset
666 * relations an attributes.
jurzua
parents:
diff changeset
667 *
jurzua
parents:
diff changeset
668 * @param session
jurzua
parents:
diff changeset
669 * @param entity
jurzua
parents:
diff changeset
670 * @return
jurzua
parents:
diff changeset
671 */
jurzua
parents:
diff changeset
672 private Entity prepareEntity(Session session, Entity entity,
jurzua
parents:
diff changeset
673 Sequence idSequence) {
jurzua
parents:
diff changeset
674
jurzua
parents:
diff changeset
675 if (entity.getId() == null) {
jurzua
parents:
diff changeset
676 if (idSequence == null)
jurzua
parents:
diff changeset
677 entity.setId(this.generateId(session));
jurzua
parents:
diff changeset
678 else
jurzua
parents:
diff changeset
679 entity.setId(idSequence.generateId());
jurzua
parents:
diff changeset
680 }
jurzua
parents:
diff changeset
681
jurzua
parents:
diff changeset
682 for (Attribute att : entity.getAttributes()) {
jurzua
parents:
diff changeset
683 if (att.getId() == null) {
jurzua
parents:
diff changeset
684 if (idSequence == null)
jurzua
parents:
diff changeset
685 att.setId(this.generateId(session));
jurzua
parents:
diff changeset
686 else
jurzua
parents:
diff changeset
687 att.setId(idSequence.generateId());
jurzua
parents:
diff changeset
688 }
jurzua
parents:
diff changeset
689 att.setSourceId(entity.getId());
jurzua
parents:
diff changeset
690 att.setSourceModif(entity.getModificationTime());
jurzua
parents:
diff changeset
691 att.setSourceObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
692 att.autoNormalize();
jurzua
parents:
diff changeset
693 }
jurzua
parents:
diff changeset
694
jurzua
parents:
diff changeset
695 // TODO normalize the name of the relations??
jurzua
parents:
diff changeset
696 for (Relation rel : entity.getSourceRelations()) {
jurzua
parents:
diff changeset
697 if (rel.getId() == null) {
jurzua
parents:
diff changeset
698 if (idSequence == null)
jurzua
parents:
diff changeset
699 rel.setId(this.generateId(session));
jurzua
parents:
diff changeset
700 else
jurzua
parents:
diff changeset
701 rel.setId(idSequence.generateId());
jurzua
parents:
diff changeset
702 }
jurzua
parents:
diff changeset
703 rel.setSourceId(entity.getId());
jurzua
parents:
diff changeset
704 rel.setSourceModif(entity.getModificationTime());
jurzua
parents:
diff changeset
705 rel.setSourceObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
706 rel.autoNormalize();
jurzua
parents:
diff changeset
707 if(StringUtils.equals(entity.getType(), Node.TYPE_ABOX)){
jurzua
parents:
diff changeset
708 rel.setObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
709 }else if(StringUtils.equals(entity.getType(), Node.TYPE_TBOX)){
jurzua
parents:
diff changeset
710 rel.setObjectClass(Node.TYPE_TBOX);
jurzua
parents:
diff changeset
711 }
jurzua
parents:
diff changeset
712
jurzua
parents:
diff changeset
713 // new Attributes for relations
jurzua
parents:
diff changeset
714 for (Attribute att : rel.getAttributes()) {
jurzua
parents:
diff changeset
715 if (att.getId() == null) {
jurzua
parents:
diff changeset
716 if (idSequence == null)
jurzua
parents:
diff changeset
717 att.setId(this.generateId(session));
jurzua
parents:
diff changeset
718 else
jurzua
parents:
diff changeset
719 att.setId(idSequence.generateId());
jurzua
parents:
diff changeset
720 }
jurzua
parents:
diff changeset
721 att.setSourceId(rel.getId());
jurzua
parents:
diff changeset
722 att.setSourceModif(rel.getModificationTime());
jurzua
parents:
diff changeset
723 // TODO this should be analyzed
jurzua
parents:
diff changeset
724 att.setSourceObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
725 att.autoNormalize();
jurzua
parents:
diff changeset
726 }
jurzua
parents:
diff changeset
727 }
jurzua
parents:
diff changeset
728
jurzua
parents:
diff changeset
729 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
730 if (rel.getId() == null) {
jurzua
parents:
diff changeset
731 if (idSequence == null)
jurzua
parents:
diff changeset
732 rel.setId(this.generateId(session));
jurzua
parents:
diff changeset
733 else
jurzua
parents:
diff changeset
734 rel.setId(idSequence.generateId());
jurzua
parents:
diff changeset
735 }
jurzua
parents:
diff changeset
736 rel.setTargetId(entity.getId());
jurzua
parents:
diff changeset
737 rel.setTargetModif(entity.getModificationTime());
jurzua
parents:
diff changeset
738 rel.setTargetObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
739 rel.autoNormalize();
jurzua
parents:
diff changeset
740 if(StringUtils.equals(entity.getType(), Node.TYPE_ABOX)){
jurzua
parents:
diff changeset
741 rel.setObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
742 }else if(StringUtils.equals(entity.getType(), Node.TYPE_TBOX)){
jurzua
parents:
diff changeset
743 rel.setObjectClass(Node.TYPE_TBOX);
jurzua
parents:
diff changeset
744 }
jurzua
parents:
diff changeset
745 // new Attributes for relations
jurzua
parents:
diff changeset
746 for (Attribute att : rel.getAttributes()) {
jurzua
parents:
diff changeset
747 if (att.getId() == null) {
jurzua
parents:
diff changeset
748 if (idSequence == null)
jurzua
parents:
diff changeset
749 att.setId(this.generateId(session));
jurzua
parents:
diff changeset
750 else
jurzua
parents:
diff changeset
751 att.setId(idSequence.generateId());
jurzua
parents:
diff changeset
752 }
jurzua
parents:
diff changeset
753 att.setSourceId(rel.getId());
jurzua
parents:
diff changeset
754 att.setSourceModif(rel.getModificationTime());
jurzua
parents:
diff changeset
755 // TODO this should be analyzed
jurzua
parents:
diff changeset
756 att.setSourceObjectClass(rel.getOwnValue());
jurzua
parents:
diff changeset
757 att.autoNormalize();
jurzua
parents:
diff changeset
758 }
jurzua
parents:
diff changeset
759 }
jurzua
parents:
diff changeset
760 for (View view : entity.getViews()) {
jurzua
parents:
diff changeset
761 if (view.getId() == null) {
jurzua
parents:
diff changeset
762 if (idSequence == null)
jurzua
parents:
diff changeset
763 view.setId(this.generateId(session));
jurzua
parents:
diff changeset
764 else
jurzua
parents:
diff changeset
765 view.setId(idSequence.generateId());
jurzua
parents:
diff changeset
766 }
jurzua
parents:
diff changeset
767 view.setSourceId(entity.getId());
jurzua
parents:
diff changeset
768 view.setSourceModif(entity.getModificationTime());
jurzua
parents:
diff changeset
769 view.setSourceObjectClass(entity.getObjectClass());
jurzua
parents:
diff changeset
770 view.autoNormalize();
jurzua
parents:
diff changeset
771 }
jurzua
parents:
diff changeset
772 return entity;
jurzua
parents:
diff changeset
773 }
jurzua
parents:
diff changeset
774
jurzua
parents:
diff changeset
775 /**
jurzua
parents:
diff changeset
776 * Saves an entity setting its system state as previous_version
jurzua
parents:
diff changeset
777 *
jurzua
parents:
diff changeset
778 * @param session
jurzua
parents:
diff changeset
779 * @param entity
jurzua
parents:
diff changeset
780 */
jurzua
parents:
diff changeset
781 private void savePreviousEntity(Session session, Entity entity) {
jurzua
parents:
diff changeset
782 entity.setSystemStatus(Node.SYS_STATUS_PREVIOUS_VERSION);
jurzua
parents:
diff changeset
783 session.save(entity);
jurzua
parents:
diff changeset
784 for (Attribute attribute : entity.getAttributes()) {
jurzua
parents:
diff changeset
785 session.save(attribute);
jurzua
parents:
diff changeset
786 }
jurzua
parents:
diff changeset
787 for (Relation rel : entity.getSourceRelations()) {
jurzua
parents:
diff changeset
788 session.save(rel);
jurzua
parents:
diff changeset
789 for (Attribute att : rel.getAttributes()) {
jurzua
parents:
diff changeset
790 session.save(att);
jurzua
parents:
diff changeset
791 }
jurzua
parents:
diff changeset
792 }
jurzua
parents:
diff changeset
793 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
794 session.save(rel);
jurzua
parents:
diff changeset
795 }
jurzua
parents:
diff changeset
796 for (View view : entity.getViews()) {
jurzua
parents:
diff changeset
797 session.save(view);
jurzua
parents:
diff changeset
798 }
jurzua
parents:
diff changeset
799 }
jurzua
parents:
diff changeset
800
jurzua
parents:
diff changeset
801 private void saveEntity(Session session, Entity entity) throws Exception {
jurzua
parents:
diff changeset
802 logger.info("Saving current entity: " + entity);
jurzua
parents:
diff changeset
803 session.save(entity);
jurzua
parents:
diff changeset
804 for (Attribute attribute : entity.getAttributes()) {
jurzua
parents:
diff changeset
805 session.save(attribute);
jurzua
parents:
diff changeset
806 }
jurzua
parents:
diff changeset
807 for (Relation rel : entity.getSourceRelations()) {
jurzua
parents:
diff changeset
808 rel.setSource(entity);
jurzua
parents:
diff changeset
809 if (rel.getSourceId() == null || rel.getTargetId() == null) {
jurzua
parents:
diff changeset
810 throw new IllegalStateException(
jurzua
parents:
diff changeset
811 "Either the sourceId or the targetId was not initialized to the source relation: "
jurzua
parents:
diff changeset
812 + rel.getOwnValue());
jurzua
parents:
diff changeset
813 }
jurzua
parents:
diff changeset
814 session.save(rel);
jurzua
parents:
diff changeset
815 for (Attribute att : rel.getAttributes()) {
jurzua
parents:
diff changeset
816 session.save(att);
jurzua
parents:
diff changeset
817 }
jurzua
parents:
diff changeset
818 }
jurzua
parents:
diff changeset
819 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
820 rel.setTarget(entity);
jurzua
parents:
diff changeset
821 if (rel.getSourceId() == null || rel.getTargetId() == null) {
jurzua
parents:
diff changeset
822 throw new IllegalStateException(
jurzua
parents:
diff changeset
823 "Either the sourceId or the targetId was not initialized to the source relation: "
jurzua
parents:
diff changeset
824 + rel.getOwnValue());
jurzua
parents:
diff changeset
825 }
jurzua
parents:
diff changeset
826 session.save(rel);
jurzua
parents:
diff changeset
827 }
jurzua
parents:
diff changeset
828
jurzua
parents:
diff changeset
829 // Call of ownValue Generator.
jurzua
parents:
diff changeset
830 // TODO: the method should be used always? what would happen if the
jurzua
parents:
diff changeset
831 // ownValue returns null?
jurzua
parents:
diff changeset
832 if (!isImportModus()) {
jurzua
parents:
diff changeset
833 String ownValue = this.getOwnValueGenerator().generateOwnValue(
jurzua
parents:
diff changeset
834 entity, session);
jurzua
parents:
diff changeset
835 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
836 entity.setOwnValue(ownValue);
jurzua
parents:
diff changeset
837 entity.autoNormalize();
jurzua
parents:
diff changeset
838 session.save(entity);
jurzua
parents:
diff changeset
839 }
jurzua
parents:
diff changeset
840 }
jurzua
parents:
diff changeset
841 }
jurzua
parents:
diff changeset
842
jurzua
parents:
diff changeset
843 public OwnValueGenerator getOwnValueGenerator() {
jurzua
parents:
diff changeset
844 return ownValueGenerator;
jurzua
parents:
diff changeset
845 }
jurzua
parents:
diff changeset
846
jurzua
parents:
diff changeset
847 public void setOwnValueGenerator(OwnValueGenerator ownValueGenerator) {
jurzua
parents:
diff changeset
848 this.ownValueGenerator = ownValueGenerator;
jurzua
parents:
diff changeset
849 }
jurzua
parents:
diff changeset
850
jurzua
parents:
diff changeset
851 /**
jurzua
parents:
diff changeset
852 * <p>
jurzua
parents:
diff changeset
853 * Returns entities with their corresponded contain.
jurzua
parents:
diff changeset
854 * </p>
jurzua
parents:
diff changeset
855 *
jurzua
parents:
diff changeset
856 * @param session
jurzua
parents:
diff changeset
857 * @param id
jurzua
parents:
diff changeset
858 * @param systemStatus
jurzua
parents:
diff changeset
859 * @param type
jurzua
parents:
diff changeset
860 * @param ownValue
jurzua
parents:
diff changeset
861 * @return
jurzua
parents:
diff changeset
862 */
jurzua
parents:
diff changeset
863 private List<Entity> getEntities(Session session, Long id,
jurzua
parents:
diff changeset
864 String systemStatus, String type, String ownValue, boolean considerTimeModif) {
jurzua
parents:
diff changeset
865
jurzua
parents:
diff changeset
866 if (!(systemStatus.equals(Node.SYS_STATUS_PREVIOUS_VERSION) || systemStatus
jurzua
parents:
diff changeset
867 .equals(Node.SYS_STATUS_CURRENT_VERSION))) {
jurzua
parents:
diff changeset
868 throw new IllegalArgumentException("Invalid input systemStatus: "
jurzua
parents:
diff changeset
869 + systemStatus);
jurzua
parents:
diff changeset
870 }
jurzua
parents:
diff changeset
871
jurzua
parents:
diff changeset
872 if (StringUtils.isNotEmpty(type)
jurzua
parents:
diff changeset
873 && !(type.equals(Node.TYPE_ABOX) || type.equals(Node.TYPE_TBOX))) {
jurzua
parents:
diff changeset
874 throw new IllegalArgumentException("Invalid input type: " + type);
jurzua
parents:
diff changeset
875 }
jurzua
parents:
diff changeset
876
jurzua
parents:
diff changeset
877 List<Entity> entities;
jurzua
parents:
diff changeset
878
jurzua
parents:
diff changeset
879 String hqlEntities = "from Entity where systemStatus = :systemStatus";
jurzua
parents:
diff changeset
880
jurzua
parents:
diff changeset
881 if (StringUtils.isNotEmpty(type)) {
jurzua
parents:
diff changeset
882 hqlEntities += " AND type = :type";
jurzua
parents:
diff changeset
883 }
jurzua
parents:
diff changeset
884
jurzua
parents:
diff changeset
885 if (id != null) {
jurzua
parents:
diff changeset
886 hqlEntities += " AND id = :id";
jurzua
parents:
diff changeset
887 }
jurzua
parents:
diff changeset
888
jurzua
parents:
diff changeset
889 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
890 hqlEntities += " AND ownValue = :ownValue";
jurzua
parents:
diff changeset
891 }
jurzua
parents:
diff changeset
892
jurzua
parents:
diff changeset
893 Query queryEntities = session.createQuery(hqlEntities);
jurzua
parents:
diff changeset
894 queryEntities.setString("systemStatus", systemStatus);
jurzua
parents:
diff changeset
895
jurzua
parents:
diff changeset
896 if (StringUtils.isNotEmpty(type)) {
jurzua
parents:
diff changeset
897 queryEntities.setString("type", type);
jurzua
parents:
diff changeset
898 }
jurzua
parents:
diff changeset
899
jurzua
parents:
diff changeset
900 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
901 queryEntities.setString("ownValue", ownValue);
jurzua
parents:
diff changeset
902 }
jurzua
parents:
diff changeset
903
jurzua
parents:
diff changeset
904 if (id != null) {
jurzua
parents:
diff changeset
905 queryEntities.setLong("id", id);
jurzua
parents:
diff changeset
906 }
jurzua
parents:
diff changeset
907 entities = queryEntities.list();
jurzua
parents:
diff changeset
908
jurzua
parents:
diff changeset
909 for (Entity entity : entities) {
jurzua
parents:
diff changeset
910 entity.setLightweight(true);
jurzua
parents:
diff changeset
911 entity = this.getEntityContent(session, entity, considerTimeModif);
jurzua
parents:
diff changeset
912 }
jurzua
parents:
diff changeset
913
jurzua
parents:
diff changeset
914 return entities;
jurzua
parents:
diff changeset
915 }
jurzua
parents:
diff changeset
916
jurzua
parents:
diff changeset
917 /**
jurzua
parents:
diff changeset
918 * <p>
jurzua
parents:
diff changeset
919 * Returns entities with their corresponded contain.
jurzua
parents:
diff changeset
920 * </p>
jurzua
parents:
diff changeset
921 *
jurzua
parents:
diff changeset
922 * @param id
jurzua
parents:
diff changeset
923 * @param systemStatus
jurzua
parents:
diff changeset
924 * @param type
jurzua
parents:
diff changeset
925 * @param ownValue
jurzua
parents:
diff changeset
926 * @return
jurzua
parents:
diff changeset
927 */
jurzua
parents:
diff changeset
928 public List<Entity> getEntities(Long id, String systemStatus, String type,
jurzua
parents:
diff changeset
929 String ownValue) {
jurzua
parents:
diff changeset
930 logger.debug("GET ENTITIES Entities [id=" + id + ", type=" + type
jurzua
parents:
diff changeset
931 + ", ownValue=" + ownValue + "]");
jurzua
parents:
diff changeset
932
jurzua
parents:
diff changeset
933 if (!(systemStatus.equals(Node.SYS_STATUS_PREVIOUS_VERSION) || systemStatus
jurzua
parents:
diff changeset
934 .equals(Node.SYS_STATUS_CURRENT_VERSION))) {
jurzua
parents:
diff changeset
935 throw new IllegalArgumentException("Invalid input systemStatus: "
jurzua
parents:
diff changeset
936 + systemStatus);
jurzua
parents:
diff changeset
937 }
jurzua
parents:
diff changeset
938
jurzua
parents:
diff changeset
939 if (StringUtils.isNotEmpty(type)
jurzua
parents:
diff changeset
940 && !(type.equals(Node.TYPE_ABOX) || type.equals(Node.TYPE_TBOX))) {
jurzua
parents:
diff changeset
941 throw new IllegalArgumentException("Invalid input type: " + type);
jurzua
parents:
diff changeset
942 }
jurzua
parents:
diff changeset
943
jurzua
parents:
diff changeset
944 List<Entity> entities = null;
jurzua
parents:
diff changeset
945 Session session = null;
jurzua
parents:
diff changeset
946 try {
jurzua
parents:
diff changeset
947 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
948 session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
949 session.getTransaction().begin();
jurzua
parents:
diff changeset
950
jurzua
parents:
diff changeset
951 entities = this.getEntities(session, id, systemStatus, type,
jurzua
parents:
diff changeset
952 ownValue, true);
jurzua
parents:
diff changeset
953
jurzua
parents:
diff changeset
954 long dif = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
955
jurzua
parents:
diff changeset
956 String s = "Found=\n";
jurzua
parents:
diff changeset
957 for (Entity e : entities) {
jurzua
parents:
diff changeset
958 s += e.toString() + "\n";
jurzua
parents:
diff changeset
959 }
jurzua
parents:
diff changeset
960 s += "time used= " + dif + "[ms]\n\n";
jurzua
parents:
diff changeset
961 logger.debug(s);
jurzua
parents:
diff changeset
962
jurzua
parents:
diff changeset
963 // session.getTransaction().commit();
jurzua
parents:
diff changeset
964 } catch (Exception e) {
jurzua
parents:
diff changeset
965 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
966 // e.printStackTrace();
jurzua
parents:
diff changeset
967 } finally {
jurzua
parents:
diff changeset
968 session.getTransaction().commit();
jurzua
parents:
diff changeset
969 }
jurzua
parents:
diff changeset
970 return entities;
jurzua
parents:
diff changeset
971 }
jurzua
parents:
diff changeset
972
jurzua
parents:
diff changeset
973 private String whereUpdate(String where) {
jurzua
parents:
diff changeset
974 if (StringUtils.isEmpty(where))
jurzua
parents:
diff changeset
975 where = " where ";
jurzua
parents:
diff changeset
976 else
jurzua
parents:
diff changeset
977 where += " AND ";
jurzua
parents:
diff changeset
978 return where;
jurzua
parents:
diff changeset
979 }
jurzua
parents:
diff changeset
980
jurzua
parents:
diff changeset
981 public List<Node> getNodes(Session session, Long id, String systemStatus,
jurzua
parents:
diff changeset
982 Long sourceId, Long srcModif, Long targetId, Long tarModif) {
jurzua
parents:
diff changeset
983 List<Node> nodes = null;
jurzua
parents:
diff changeset
984
jurzua
parents:
diff changeset
985 String from = "from Node ";
jurzua
parents:
diff changeset
986 String where = "";
jurzua
parents:
diff changeset
987
jurzua
parents:
diff changeset
988 if (id != null) {
jurzua
parents:
diff changeset
989 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
990 where += " id = :id ";
jurzua
parents:
diff changeset
991
jurzua
parents:
diff changeset
992 }
jurzua
parents:
diff changeset
993 if (StringUtils.isNotEmpty(systemStatus)) {
jurzua
parents:
diff changeset
994 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
995 where += " systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
996 }
jurzua
parents:
diff changeset
997
jurzua
parents:
diff changeset
998 // source's attributes
jurzua
parents:
diff changeset
999 if (sourceId != null) {
jurzua
parents:
diff changeset
1000 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1001 where += " sourceId = :sourceId ";
jurzua
parents:
diff changeset
1002 }
jurzua
parents:
diff changeset
1003 if (srcModif != null) {
jurzua
parents:
diff changeset
1004 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1005 where += " sourceModif = :sourceModif ";
jurzua
parents:
diff changeset
1006 }
jurzua
parents:
diff changeset
1007
jurzua
parents:
diff changeset
1008 if (targetId != null) {
jurzua
parents:
diff changeset
1009 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1010 where += " targetId = :targetId ";
jurzua
parents:
diff changeset
1011 }
jurzua
parents:
diff changeset
1012 if (tarModif != null) {
jurzua
parents:
diff changeset
1013 where = this.whereUpdate(where);
jurzua
parents:
diff changeset
1014 where += " targetModif = :targetModif ";
jurzua
parents:
diff changeset
1015 }
jurzua
parents:
diff changeset
1016
jurzua
parents:
diff changeset
1017 String hql = from + where;
jurzua
parents:
diff changeset
1018 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1019
jurzua
parents:
diff changeset
1020 if (id != null)
jurzua
parents:
diff changeset
1021 query.setLong("id", id);
jurzua
parents:
diff changeset
1022 if (StringUtils.isNotEmpty(systemStatus))
jurzua
parents:
diff changeset
1023 query.setString("systemStatus", systemStatus);
jurzua
parents:
diff changeset
1024
jurzua
parents:
diff changeset
1025 if (sourceId != null)
jurzua
parents:
diff changeset
1026 query.setLong("sourceId", sourceId);
jurzua
parents:
diff changeset
1027 if (srcModif != null)
jurzua
parents:
diff changeset
1028 query.setLong("sourceModif", srcModif);
jurzua
parents:
diff changeset
1029
jurzua
parents:
diff changeset
1030 if (targetId != null)
jurzua
parents:
diff changeset
1031 query.setLong("targetId", targetId);
jurzua
parents:
diff changeset
1032 if (tarModif != null)
jurzua
parents:
diff changeset
1033 query.setLong("targetModif", tarModif);
jurzua
parents:
diff changeset
1034
jurzua
parents:
diff changeset
1035 nodes = query.list();
jurzua
parents:
diff changeset
1036
jurzua
parents:
diff changeset
1037 return nodes;
jurzua
parents:
diff changeset
1038 }
jurzua
parents:
diff changeset
1039
jurzua
parents:
diff changeset
1040 private Entity getEntityContent(Session session, Entity entity, boolean considerTimeModif) {
jurzua
parents:
diff changeset
1041 if (entity != null && entity.isLightweight()) {
jurzua
parents:
diff changeset
1042 entity.setLightweight(false);
jurzua
parents:
diff changeset
1043 entity.setAttributes(new ArrayList<Attribute>());
jurzua
parents:
diff changeset
1044 entity.setSourceRelations(new ArrayList<Relation>());
jurzua
parents:
diff changeset
1045 entity.setTargetRelations(new ArrayList<Relation>());
jurzua
parents:
diff changeset
1046
jurzua
parents:
diff changeset
1047 // getting Attributes and SourceRelations
jurzua
parents:
diff changeset
1048 List<Node> nodes = null;
jurzua
parents:
diff changeset
1049
jurzua
parents:
diff changeset
1050 if(considerTimeModif){
jurzua
parents:
diff changeset
1051 nodes = this.getNodes(session, null,
jurzua
parents:
diff changeset
1052 entity.getSystemStatus(), entity.getId(),
jurzua
parents:
diff changeset
1053 entity.getModificationTime(), null, null);
jurzua
parents:
diff changeset
1054 }else{
jurzua
parents:
diff changeset
1055 nodes = this.getNodes(session, null,
jurzua
parents:
diff changeset
1056 entity.getSystemStatus(), entity.getId(),
jurzua
parents:
diff changeset
1057 null, null, null);
jurzua
parents:
diff changeset
1058 }
jurzua
parents:
diff changeset
1059
jurzua
parents:
diff changeset
1060
jurzua
parents:
diff changeset
1061 for (Node node : nodes) {
jurzua
parents:
diff changeset
1062 if (node instanceof Attribute) {
jurzua
parents:
diff changeset
1063 entity.addAttribute((Attribute) node);
jurzua
parents:
diff changeset
1064 } else if (node instanceof Relation) {
jurzua
parents:
diff changeset
1065 Relation rel = (Relation) node;
jurzua
parents:
diff changeset
1066 // new attr for relations
jurzua
parents:
diff changeset
1067 List<Node> attrs = this.getNodes(session, null,
jurzua
parents:
diff changeset
1068 rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
1069 rel.getModificationTime(), null, null);
jurzua
parents:
diff changeset
1070 for (Node attNode : attrs) {
jurzua
parents:
diff changeset
1071 if (attNode instanceof Attribute) {
jurzua
parents:
diff changeset
1072 rel.addAttribute((Attribute) attNode);
jurzua
parents:
diff changeset
1073 }
jurzua
parents:
diff changeset
1074 }
jurzua
parents:
diff changeset
1075 if(considerTimeModif){
jurzua
parents:
diff changeset
1076 entity.addSourceRelation(rel);
jurzua
parents:
diff changeset
1077 }else{
jurzua
parents:
diff changeset
1078 entity.getSourceRelations().add(rel);
jurzua
parents:
diff changeset
1079 }
jurzua
parents:
diff changeset
1080 } else if (node instanceof View) {
jurzua
parents:
diff changeset
1081 entity.getViews().add((View) node);
jurzua
parents:
diff changeset
1082 } else {
jurzua
parents:
diff changeset
1083 throw new IllegalArgumentException("Invalid node found: "
jurzua
parents:
diff changeset
1084 + node);
jurzua
parents:
diff changeset
1085 }
jurzua
parents:
diff changeset
1086 }
jurzua
parents:
diff changeset
1087
jurzua
parents:
diff changeset
1088 // getting TargetRelations
jurzua
parents:
diff changeset
1089 List<Node> tarRels = null;
jurzua
parents:
diff changeset
1090
jurzua
parents:
diff changeset
1091 if(considerTimeModif){
jurzua
parents:
diff changeset
1092 tarRels = this.getNodes(session, null,
jurzua
parents:
diff changeset
1093 entity.getSystemStatus(), null, null, entity.getId(),
jurzua
parents:
diff changeset
1094 entity.getModificationTime());
jurzua
parents:
diff changeset
1095 }else{
jurzua
parents:
diff changeset
1096 tarRels = this.getNodes(session, null,
jurzua
parents:
diff changeset
1097 entity.getSystemStatus(), null, null, entity.getId(),
jurzua
parents:
diff changeset
1098 null);
jurzua
parents:
diff changeset
1099 }
jurzua
parents:
diff changeset
1100
jurzua
parents:
diff changeset
1101 for (Node node : tarRels) {
jurzua
parents:
diff changeset
1102 if (node instanceof Relation) {
jurzua
parents:
diff changeset
1103 Relation rel = (Relation) node;
jurzua
parents:
diff changeset
1104 // new attr for relations
jurzua
parents:
diff changeset
1105 List<Node> attrs = this.getNodes(session, null,
jurzua
parents:
diff changeset
1106 rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
1107 rel.getModificationTime(), null, null);
jurzua
parents:
diff changeset
1108 for (Node attNode : attrs) {
jurzua
parents:
diff changeset
1109 if (attNode instanceof Attribute) {
jurzua
parents:
diff changeset
1110 rel.addAttribute((Attribute) attNode);
jurzua
parents:
diff changeset
1111 }
jurzua
parents:
diff changeset
1112 }
jurzua
parents:
diff changeset
1113 if(considerTimeModif){
jurzua
parents:
diff changeset
1114 entity.addTargetRelation(rel);
jurzua
parents:
diff changeset
1115 }else{
jurzua
parents:
diff changeset
1116 entity.getTargetRelations().add(rel);
jurzua
parents:
diff changeset
1117 }
jurzua
parents:
diff changeset
1118 } else {
jurzua
parents:
diff changeset
1119 throw new IllegalArgumentException("Invalid node found: "
jurzua
parents:
diff changeset
1120 + node);
jurzua
parents:
diff changeset
1121 }
jurzua
parents:
diff changeset
1122 }
jurzua
parents:
diff changeset
1123 }
jurzua
parents:
diff changeset
1124 return entity;
jurzua
parents:
diff changeset
1125 }
jurzua
parents:
diff changeset
1126
jurzua
parents:
diff changeset
1127 public Entity getEntityContent(Entity entity) {
jurzua
parents:
diff changeset
1128 if (entity != null && entity.isLightweight()) {
jurzua
parents:
diff changeset
1129 try {
jurzua
parents:
diff changeset
1130 logger.debug("GET ENTITY CONTENT [objClass="
jurzua
parents:
diff changeset
1131 + entity.getObjectClass() + ", id=" + entity.getId()
jurzua
parents:
diff changeset
1132 + ", ownValue=" + entity.getOwnValue() + "]");
jurzua
parents:
diff changeset
1133 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1134 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1135 .getCurrentSession();
jurzua
parents:
diff changeset
1136 session.getTransaction().begin();
jurzua
parents:
diff changeset
1137
jurzua
parents:
diff changeset
1138 entity = this.getEntityContent(session, entity, true);
jurzua
parents:
diff changeset
1139 long diff = System.currentTimeMillis() - start;
jurzua
parents:
diff changeset
1140 logger.debug("Time to get content=" + diff + "(s)");
jurzua
parents:
diff changeset
1141 session.getTransaction().commit();
jurzua
parents:
diff changeset
1142 } catch (Exception e) {
jurzua
parents:
diff changeset
1143 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1144 // e.printStackTrace();
jurzua
parents:
diff changeset
1145 }
jurzua
parents:
diff changeset
1146 }
jurzua
parents:
diff changeset
1147 return entity;
jurzua
parents:
diff changeset
1148 }
jurzua
parents:
diff changeset
1149
jurzua
parents:
diff changeset
1150 public List<String> getObjecClassSuggestion(String objectClass,
jurzua
parents:
diff changeset
1151 Class nodeClass, int maxResults) {
jurzua
parents:
diff changeset
1152 objectClass += "%";
jurzua
parents:
diff changeset
1153 try {
jurzua
parents:
diff changeset
1154
jurzua
parents:
diff changeset
1155 List<String> suggestions = new ArrayList<String>();
jurzua
parents:
diff changeset
1156 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1157 .getCurrentSession();
jurzua
parents:
diff changeset
1158 session.getTransaction().begin();
jurzua
parents:
diff changeset
1159 String hql = "from ";
jurzua
parents:
diff changeset
1160 if (nodeClass.equals(Entity.class)) {
jurzua
parents:
diff changeset
1161 hql += "Entity ";
jurzua
parents:
diff changeset
1162 }
jurzua
parents:
diff changeset
1163 if (nodeClass.equals(Relation.class)) {
jurzua
parents:
diff changeset
1164 hql += "Relation ";
jurzua
parents:
diff changeset
1165 }
jurzua
parents:
diff changeset
1166 if (nodeClass.equals(Attribute.class)) {
jurzua
parents:
diff changeset
1167 hql += "Attribute ";
jurzua
parents:
diff changeset
1168 }
jurzua
parents:
diff changeset
1169 if (nodeClass.equals(Node.class)) {
jurzua
parents:
diff changeset
1170 hql += "Node ";
jurzua
parents:
diff changeset
1171 }
jurzua
parents:
diff changeset
1172 if (nodeClass.equals(View.class)) {
jurzua
parents:
diff changeset
1173 hql += "View ";
jurzua
parents:
diff changeset
1174 }
jurzua
parents:
diff changeset
1175 hql += " where objectClass like :objectClass "
jurzua
parents:
diff changeset
1176 + "group by objectClass";
jurzua
parents:
diff changeset
1177
jurzua
parents:
diff changeset
1178 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1179 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1180 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1181 List<Node> list = query.list();
jurzua
parents:
diff changeset
1182 for (Node node : list) {
jurzua
parents:
diff changeset
1183 suggestions.add(node.getObjectClass());
jurzua
parents:
diff changeset
1184 }
jurzua
parents:
diff changeset
1185 return suggestions;
jurzua
parents:
diff changeset
1186
jurzua
parents:
diff changeset
1187 } catch (Exception e) {
jurzua
parents:
diff changeset
1188 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1189 // e.printStackTrace();
jurzua
parents:
diff changeset
1190 }
jurzua
parents:
diff changeset
1191 return null;
jurzua
parents:
diff changeset
1192 }
jurzua
parents:
diff changeset
1193
jurzua
parents:
diff changeset
1194 public List<String> getOwnValueSuggestion(String ownValue, Class nodeClass,
jurzua
parents:
diff changeset
1195 int maxResults) {
jurzua
parents:
diff changeset
1196 ownValue += "%";
jurzua
parents:
diff changeset
1197 try {
jurzua
parents:
diff changeset
1198
jurzua
parents:
diff changeset
1199 List<String> suggestions = new ArrayList<String>();
jurzua
parents:
diff changeset
1200 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1201 .getCurrentSession();
jurzua
parents:
diff changeset
1202 session.getTransaction().begin();
jurzua
parents:
diff changeset
1203 String hql = "from ";
jurzua
parents:
diff changeset
1204 if (nodeClass.equals(Entity.class)) {
jurzua
parents:
diff changeset
1205 hql += "Entity ";
jurzua
parents:
diff changeset
1206 }
jurzua
parents:
diff changeset
1207 if (nodeClass.equals(Relation.class)) {
jurzua
parents:
diff changeset
1208 hql += "Relation ";
jurzua
parents:
diff changeset
1209 }
jurzua
parents:
diff changeset
1210 if (nodeClass.equals(Attribute.class)) {
jurzua
parents:
diff changeset
1211 hql += "Attribute ";
jurzua
parents:
diff changeset
1212 }
jurzua
parents:
diff changeset
1213 if (nodeClass.equals(Node.class)) {
jurzua
parents:
diff changeset
1214 hql += "Node ";
jurzua
parents:
diff changeset
1215 }
jurzua
parents:
diff changeset
1216 if (nodeClass.equals(View.class)) {
jurzua
parents:
diff changeset
1217 hql += "View ";
jurzua
parents:
diff changeset
1218 }
jurzua
parents:
diff changeset
1219 hql += " where ownValue like :ownValue " + "group by ownValue";
jurzua
parents:
diff changeset
1220
jurzua
parents:
diff changeset
1221 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1222 query.setString("ownValue", ownValue);
jurzua
parents:
diff changeset
1223 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1224 List<Node> list = query.list();
jurzua
parents:
diff changeset
1225 for (Node node : list) {
jurzua
parents:
diff changeset
1226 suggestions.add(node.getOwnValue());
jurzua
parents:
diff changeset
1227 }
jurzua
parents:
diff changeset
1228 return suggestions;
jurzua
parents:
diff changeset
1229
jurzua
parents:
diff changeset
1230 } catch (Exception e) {
jurzua
parents:
diff changeset
1231 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1232 // e.printStackTrace();
jurzua
parents:
diff changeset
1233 }
jurzua
parents:
diff changeset
1234 return null;
jurzua
parents:
diff changeset
1235 }
jurzua
parents:
diff changeset
1236
jurzua
parents:
diff changeset
1237 public Entity loadEntitiesForTargetRelation(Entity entity) {
jurzua
parents:
diff changeset
1238 try {
jurzua
parents:
diff changeset
1239 // where parent_id = :parent_id AND type = :type
jurzua
parents:
diff changeset
1240 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1241 .getCurrentSession();
jurzua
parents:
diff changeset
1242 session.getTransaction().begin();
jurzua
parents:
diff changeset
1243
jurzua
parents:
diff changeset
1244 for (Relation rel : entity.getTargetRelations()) {
jurzua
parents:
diff changeset
1245 List<Entity> entities = this.getEntities(session,
jurzua
parents:
diff changeset
1246 rel.getSourceId(), Node.SYS_STATUS_CURRENT_VERSION,
jurzua
parents:
diff changeset
1247 null, null, true);
jurzua
parents:
diff changeset
1248 if (entities.size() > 0) {
jurzua
parents:
diff changeset
1249 Entity source = entities.get(0);
jurzua
parents:
diff changeset
1250 rel.setSource(source);
jurzua
parents:
diff changeset
1251 }
jurzua
parents:
diff changeset
1252 }
jurzua
parents:
diff changeset
1253
jurzua
parents:
diff changeset
1254 session.getTransaction().commit();
jurzua
parents:
diff changeset
1255 return entity;
jurzua
parents:
diff changeset
1256 } catch (Exception e) {
jurzua
parents:
diff changeset
1257 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1258 // e.printStackTrace();
jurzua
parents:
diff changeset
1259 }
jurzua
parents:
diff changeset
1260 return entity;
jurzua
parents:
diff changeset
1261 }
jurzua
parents:
diff changeset
1262
jurzua
parents:
diff changeset
1263 protected List<Entity> getLightweightEntities(Session session,
jurzua
parents:
diff changeset
1264 String systemStatus, Long id, String type, String objectClass,
jurzua
parents:
diff changeset
1265 String ownValue, boolean ownValueSubString, int maxResult) {
jurzua
parents:
diff changeset
1266
jurzua
parents:
diff changeset
1267 String hqlEntities = "from Entity where ";
jurzua
parents:
diff changeset
1268 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1269 if (ownValueSubString)
jurzua
parents:
diff changeset
1270 hqlEntities += "ownValue like :ownValue AND ";
jurzua
parents:
diff changeset
1271 else
jurzua
parents:
diff changeset
1272 hqlEntities += "ownValue = :ownValue AND ";
jurzua
parents:
diff changeset
1273 }
jurzua
parents:
diff changeset
1274 if (id != null) {
jurzua
parents:
diff changeset
1275 hqlEntities += "id = :id AND ";
jurzua
parents:
diff changeset
1276 }
jurzua
parents:
diff changeset
1277 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1278 hqlEntities += "objectClass = :objectClass AND ";
jurzua
parents:
diff changeset
1279 }
jurzua
parents:
diff changeset
1280 if (StringUtils.isNotEmpty(type)) {
jurzua
parents:
diff changeset
1281 hqlEntities += "type = :type AND ";
jurzua
parents:
diff changeset
1282 }
jurzua
parents:
diff changeset
1283
jurzua
parents:
diff changeset
1284 hqlEntities += "systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
1285
jurzua
parents:
diff changeset
1286 // it will be now sorted by openmind
jurzua
parents:
diff changeset
1287 // + "order by ownValue";
jurzua
parents:
diff changeset
1288
jurzua
parents:
diff changeset
1289 Query queryEntities = session.createQuery(hqlEntities);
jurzua
parents:
diff changeset
1290 queryEntities.setString("systemStatus", systemStatus);
jurzua
parents:
diff changeset
1291 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1292 if (ownValueSubString) {
jurzua
parents:
diff changeset
1293 queryEntities.setString("ownValue", "%" + ownValue + "%");
jurzua
parents:
diff changeset
1294 logger.info("ownValue=%" + ownValue + "%");
jurzua
parents:
diff changeset
1295 } else {
jurzua
parents:
diff changeset
1296 queryEntities.setString("ownValue", ownValue);
jurzua
parents:
diff changeset
1297 logger.info("ownValue=" + ownValue);
jurzua
parents:
diff changeset
1298 }
jurzua
parents:
diff changeset
1299 }
jurzua
parents:
diff changeset
1300 if (maxResult > 0) {
jurzua
parents:
diff changeset
1301 queryEntities.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1302 }
jurzua
parents:
diff changeset
1303
jurzua
parents:
diff changeset
1304 if (StringUtils.isNotEmpty(type)) {
jurzua
parents:
diff changeset
1305 queryEntities.setString("type", type);
jurzua
parents:
diff changeset
1306 }
jurzua
parents:
diff changeset
1307 if (id != null) {
jurzua
parents:
diff changeset
1308 queryEntities.setLong("id", id);
jurzua
parents:
diff changeset
1309 }
jurzua
parents:
diff changeset
1310 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1311 queryEntities.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1312 }
jurzua
parents:
diff changeset
1313 List<Entity> entities = queryEntities.list();
jurzua
parents:
diff changeset
1314
jurzua
parents:
diff changeset
1315 for(Entity ent : entities){
jurzua
parents:
diff changeset
1316 ent.setLightweight(true);
jurzua
parents:
diff changeset
1317 }
jurzua
parents:
diff changeset
1318
jurzua
parents:
diff changeset
1319 return entities;
jurzua
parents:
diff changeset
1320 }
jurzua
parents:
diff changeset
1321
jurzua
parents:
diff changeset
1322 /**
jurzua
parents:
diff changeset
1323 * Own value is searched as substring
jurzua
parents:
diff changeset
1324 *
jurzua
parents:
diff changeset
1325 * @param systemStatus
jurzua
parents:
diff changeset
1326 * @param id
jurzua
parents:
diff changeset
1327 * @param type
jurzua
parents:
diff changeset
1328 * @param objectClass
jurzua
parents:
diff changeset
1329 * @param ownValue
jurzua
parents:
diff changeset
1330 * @param maxResult
jurzua
parents:
diff changeset
1331 * @return
jurzua
parents:
diff changeset
1332 */
jurzua
parents:
diff changeset
1333 public List<Entity> getLightweightEntities(String systemStatus, Long id,
jurzua
parents:
diff changeset
1334 String type, String objectClass, String ownValue,
jurzua
parents:
diff changeset
1335 boolean ownValueSubString, int maxResult) {
jurzua
parents:
diff changeset
1336 logger.debug("GET LW ENTITIES [type=" + type + " id=" + id
jurzua
parents:
diff changeset
1337 + ", objectClass=" + objectClass + ", ownValue=" + ownValue
jurzua
parents:
diff changeset
1338 + "]");
jurzua
parents:
diff changeset
1339
jurzua
parents:
diff changeset
1340 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
1341 if (!(systemStatus.equals(Node.SYS_STATUS_PREVIOUS_VERSION) || systemStatus
jurzua
parents:
diff changeset
1342 .equals(Node.SYS_STATUS_CURRENT_VERSION))) {
jurzua
parents:
diff changeset
1343 throw new IllegalArgumentException("Invalid input systemStatus: "
jurzua
parents:
diff changeset
1344 + systemStatus);
jurzua
parents:
diff changeset
1345 }
jurzua
parents:
diff changeset
1346
jurzua
parents:
diff changeset
1347 if (StringUtils.isNotEmpty(type)
jurzua
parents:
diff changeset
1348 && !(type.equals(Node.TYPE_ABOX) || type.equals(Node.TYPE_TBOX))) {
jurzua
parents:
diff changeset
1349 throw new IllegalArgumentException("Invalid input type: " + type);
jurzua
parents:
diff changeset
1350 }
jurzua
parents:
diff changeset
1351
jurzua
parents:
diff changeset
1352 try {
jurzua
parents:
diff changeset
1353 // where parent_id = :parent_id AND type = :type
jurzua
parents:
diff changeset
1354 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1355 .getCurrentSession();
jurzua
parents:
diff changeset
1356 session.getTransaction().begin();
jurzua
parents:
diff changeset
1357
jurzua
parents:
diff changeset
1358 entities = this.getLightweightEntities(session, systemStatus, id,
jurzua
parents:
diff changeset
1359 type, objectClass, ownValue, ownValueSubString, maxResult);
jurzua
parents:
diff changeset
1360
jurzua
parents:
diff changeset
1361
jurzua
parents:
diff changeset
1362 session.getTransaction().commit();
jurzua
parents:
diff changeset
1363 return entities;
jurzua
parents:
diff changeset
1364 } catch (Exception e) {
jurzua
parents:
diff changeset
1365 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1366 }
jurzua
parents:
diff changeset
1367 return entities;
jurzua
parents:
diff changeset
1368 }
jurzua
parents:
diff changeset
1369
jurzua
parents:
diff changeset
1370 private Sequence getIdSequence(Session session) {
jurzua
parents:
diff changeset
1371 Sequence sequence = null;
jurzua
parents:
diff changeset
1372 String hqlJoin = "from Sequence where name = :name";
jurzua
parents:
diff changeset
1373 Query query = session.createQuery(hqlJoin);
jurzua
parents:
diff changeset
1374 query.setString("name", NODE_SEQUENCE);
jurzua
parents:
diff changeset
1375 List<Sequence> sequences = query.list();
jurzua
parents:
diff changeset
1376 if (sequences.size() > 0)
jurzua
parents:
diff changeset
1377 sequence = sequences.get(0);
jurzua
parents:
diff changeset
1378 if (sequence == null) {
jurzua
parents:
diff changeset
1379 sequence = new Sequence(NODE_SEQUENCE, new Long(0));
jurzua
parents:
diff changeset
1380 }
jurzua
parents:
diff changeset
1381 return sequence;
jurzua
parents:
diff changeset
1382 }
jurzua
parents:
diff changeset
1383
jurzua
parents:
diff changeset
1384 protected Long generateId(Session session) {
jurzua
parents:
diff changeset
1385 Long id = null;
jurzua
parents:
diff changeset
1386 Sequence sequence = null;
jurzua
parents:
diff changeset
1387 String hqlJoin = "from Sequence where name = :name";
jurzua
parents:
diff changeset
1388 Query query = session.createQuery(hqlJoin);
jurzua
parents:
diff changeset
1389 query.setString("name", NODE_SEQUENCE);
jurzua
parents:
diff changeset
1390 List<Sequence> sequences = query.list();
jurzua
parents:
diff changeset
1391 if (sequences.size() > 0) {
jurzua
parents:
diff changeset
1392 sequence = sequences.get(0);
jurzua
parents:
diff changeset
1393 } else {
jurzua
parents:
diff changeset
1394 sequence = new Sequence(NODE_SEQUENCE, new Long(0));
jurzua
parents:
diff changeset
1395 }
jurzua
parents:
diff changeset
1396 id = sequence.generateId();
jurzua
parents:
diff changeset
1397 session.save(sequence);
jurzua
parents:
diff changeset
1398 return id;
jurzua
parents:
diff changeset
1399 }
jurzua
parents:
diff changeset
1400
jurzua
parents:
diff changeset
1401 public ConfigurationService getConfigurationService() {
jurzua
parents:
diff changeset
1402 return configurationService;
jurzua
parents:
diff changeset
1403 }
jurzua
parents:
diff changeset
1404
jurzua
parents:
diff changeset
1405 public void setConfigurationService(
jurzua
parents:
diff changeset
1406 ConfigurationService configurationService) {
jurzua
parents:
diff changeset
1407 this.configurationService = configurationService;
jurzua
parents:
diff changeset
1408 }
jurzua
parents:
diff changeset
1409
jurzua
parents:
diff changeset
1410 public boolean isImportModus() {
jurzua
parents:
diff changeset
1411 return importModus;
jurzua
parents:
diff changeset
1412 }
jurzua
parents:
diff changeset
1413
jurzua
parents:
diff changeset
1414 public void setImportModus(boolean importModus) {
jurzua
parents:
diff changeset
1415 this.importModus = importModus;
jurzua
parents:
diff changeset
1416 }
jurzua
parents:
diff changeset
1417
jurzua
parents:
diff changeset
1418 // #################################################################
jurzua
parents:
diff changeset
1419 // #################################################################
jurzua
parents:
diff changeset
1420 // #################################################################
jurzua
parents:
diff changeset
1421
jurzua
parents:
diff changeset
1422 public List<Relation> getDefRelations() {
jurzua
parents:
diff changeset
1423 List<Relation> list = new ArrayList<Relation>();
jurzua
parents:
diff changeset
1424 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1425 try {
jurzua
parents:
diff changeset
1426 session.getTransaction().begin();
jurzua
parents:
diff changeset
1427
jurzua
parents:
diff changeset
1428 String hql = "from Relation where systemStatus = :systemStatus and type = :type";
jurzua
parents:
diff changeset
1429 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1430
jurzua
parents:
diff changeset
1431 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1432 query.setString("type", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1433
jurzua
parents:
diff changeset
1434 list = query.list();
jurzua
parents:
diff changeset
1435 /*
jurzua
parents:
diff changeset
1436 * for(Relation rel : list){ List<Node> attrs =
jurzua
parents:
diff changeset
1437 * this.getNodes(session, null, rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
1438 * rel.getModificationTime(), null, null); for(Node attNode :
jurzua
parents:
diff changeset
1439 * attrs){ if(attNode instanceof Attribute){
jurzua
parents:
diff changeset
1440 * rel.addAttribute((Attribute)attNode); } } }
jurzua
parents:
diff changeset
1441 */
jurzua
parents:
diff changeset
1442
jurzua
parents:
diff changeset
1443 } catch (Exception e) {
jurzua
parents:
diff changeset
1444 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1445 } finally {
jurzua
parents:
diff changeset
1446 session.getTransaction().commit();
jurzua
parents:
diff changeset
1447 }
jurzua
parents:
diff changeset
1448 return list;
jurzua
parents:
diff changeset
1449 }
jurzua
parents:
diff changeset
1450
jurzua
parents:
diff changeset
1451 public List<Attribute> getDefAttributes() {
jurzua
parents:
diff changeset
1452 List<Attribute> list = new ArrayList<Attribute>();
jurzua
parents:
diff changeset
1453 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1454 try {
jurzua
parents:
diff changeset
1455 session.getTransaction().begin();
jurzua
parents:
diff changeset
1456
jurzua
parents:
diff changeset
1457 String hql = "from Attribute where systemStatus = :systemStatus and type = :type";
jurzua
parents:
diff changeset
1458 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1459
jurzua
parents:
diff changeset
1460 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1461 query.setString("type", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1462
jurzua
parents:
diff changeset
1463 list = query.list();
jurzua
parents:
diff changeset
1464
jurzua
parents:
diff changeset
1465 } catch (Exception e) {
jurzua
parents:
diff changeset
1466 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1467 } finally {
jurzua
parents:
diff changeset
1468 session.getTransaction().commit();
jurzua
parents:
diff changeset
1469 }
jurzua
parents:
diff changeset
1470 return list;
jurzua
parents:
diff changeset
1471 }
jurzua
parents:
diff changeset
1472
jurzua
parents:
diff changeset
1473 public List<Entity> getLWDefinitions() throws Exception {
jurzua
parents:
diff changeset
1474 List<Entity> list = new ArrayList<Entity>();
jurzua
parents:
diff changeset
1475 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1476
jurzua
parents:
diff changeset
1477 session.getTransaction().begin();
jurzua
parents:
diff changeset
1478
jurzua
parents:
diff changeset
1479 String hql = "from Entity where systemStatus = :systemStatus and type = :type";
jurzua
parents:
diff changeset
1480 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1481
jurzua
parents:
diff changeset
1482 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1483 query.setString("type", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1484
jurzua
parents:
diff changeset
1485 list = query.list();
jurzua
parents:
diff changeset
1486 for (Entity def : list) {
jurzua
parents:
diff changeset
1487 def.setLightweight(true);
jurzua
parents:
diff changeset
1488 }
jurzua
parents:
diff changeset
1489 session.getTransaction().commit();
jurzua
parents:
diff changeset
1490
jurzua
parents:
diff changeset
1491 return list;
jurzua
parents:
diff changeset
1492 }
jurzua
parents:
diff changeset
1493
jurzua
parents:
diff changeset
1494 // #################################################################
jurzua
parents:
diff changeset
1495 // #################################################################
jurzua
parents:
diff changeset
1496 // #################################################################
jurzua
parents:
diff changeset
1497
jurzua
parents:
diff changeset
1498 public Long getEntityCount(String objectClass) {
jurzua
parents:
diff changeset
1499 Long count = null;
jurzua
parents:
diff changeset
1500 try {
jurzua
parents:
diff changeset
1501 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1502 .getCurrentSession();
jurzua
parents:
diff changeset
1503 session.getTransaction().begin();
jurzua
parents:
diff changeset
1504
jurzua
parents:
diff changeset
1505 String hql = "select count(*) from Entity where ";
jurzua
parents:
diff changeset
1506
jurzua
parents:
diff changeset
1507 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1508 hql += "objectClass = :objectClass AND ";
jurzua
parents:
diff changeset
1509 } else {
jurzua
parents:
diff changeset
1510 hql += "objectClass != :objectClass AND ";
jurzua
parents:
diff changeset
1511 }
jurzua
parents:
diff changeset
1512 hql += "systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
1513
jurzua
parents:
diff changeset
1514 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1515 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1516 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1517 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1518 } else {
jurzua
parents:
diff changeset
1519 query.setString("objectClass", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1520 }
jurzua
parents:
diff changeset
1521 count = (Long) query.uniqueResult();
jurzua
parents:
diff changeset
1522
jurzua
parents:
diff changeset
1523 session.getTransaction().commit();
jurzua
parents:
diff changeset
1524 } catch (Exception e) {
jurzua
parents:
diff changeset
1525 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1526 }
jurzua
parents:
diff changeset
1527 return count;
jurzua
parents:
diff changeset
1528 }
jurzua
parents:
diff changeset
1529
jurzua
parents:
diff changeset
1530 /**
jurzua
parents:
diff changeset
1531 *
jurzua
parents:
diff changeset
1532 * @param objectClass
jurzua
parents:
diff changeset
1533 * if it is null, it will be returned all entities (no
jurzua
parents:
diff changeset
1534 * definition). To get the definitions objectClass should be:
jurzua
parents:
diff changeset
1535 * Node.TYPE_TBOX
jurzua
parents:
diff changeset
1536 * @param startRecord
jurzua
parents:
diff changeset
1537 * @param endRecord
jurzua
parents:
diff changeset
1538 * @return
jurzua
parents:
diff changeset
1539 */
jurzua
parents:
diff changeset
1540 public List<Entity> getEntityPage(String objectClass,
jurzua
parents:
diff changeset
1541 final int startRecord, final int endRecord) {
jurzua
parents:
diff changeset
1542
jurzua
parents:
diff changeset
1543 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
1544 try {
jurzua
parents:
diff changeset
1545 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1546 .getCurrentSession();
jurzua
parents:
diff changeset
1547 session.getTransaction().begin();
jurzua
parents:
diff changeset
1548
jurzua
parents:
diff changeset
1549 String hql = "from Entity where ";
jurzua
parents:
diff changeset
1550
jurzua
parents:
diff changeset
1551 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1552 hql += "objectClass = :objectClass AND ";
jurzua
parents:
diff changeset
1553 } else {
jurzua
parents:
diff changeset
1554 hql += "objectClass != :objectClass AND ";
jurzua
parents:
diff changeset
1555 }
jurzua
parents:
diff changeset
1556
jurzua
parents:
diff changeset
1557 hql += "systemStatus = :systemStatus order by ownValue";
jurzua
parents:
diff changeset
1558
jurzua
parents:
diff changeset
1559 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1560 query.setFirstResult(startRecord);
jurzua
parents:
diff changeset
1561 query.setMaxResults(endRecord);
jurzua
parents:
diff changeset
1562 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1563 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
1564 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1565 } else {
jurzua
parents:
diff changeset
1566 query.setString("objectClass", Node.TYPE_TBOX);
jurzua
parents:
diff changeset
1567 }
jurzua
parents:
diff changeset
1568 entities = query.list();
jurzua
parents:
diff changeset
1569
jurzua
parents:
diff changeset
1570 session.getTransaction().commit();
jurzua
parents:
diff changeset
1571 } catch (Exception e) {
jurzua
parents:
diff changeset
1572 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1573 // e.printStackTrace();
jurzua
parents:
diff changeset
1574 }
jurzua
parents:
diff changeset
1575 return entities;
jurzua
parents:
diff changeset
1576 }
jurzua
parents:
diff changeset
1577
jurzua
parents:
diff changeset
1578 public static void main(String[] args) {
jurzua
parents:
diff changeset
1579 /*
jurzua
parents:
diff changeset
1580 * ServiceRegistry sr = new ServiceRegistry(); Long count =
jurzua
parents:
diff changeset
1581 * sr.getPersistenceService().getEntityCount("CODEX");
jurzua
parents:
diff changeset
1582 * logger.info("count codex " + count);
jurzua
parents:
diff changeset
1583 *
jurzua
parents:
diff changeset
1584 * List<Entity> list = sr.getPersistenceService().getEntityPage("CODEX",
jurzua
parents:
diff changeset
1585 * count.intValue() - 100, count.intValue() - 50); for(Entity e : list){
jurzua
parents:
diff changeset
1586 * logger.info(e.toString()); }
jurzua
parents:
diff changeset
1587 */
jurzua
parents:
diff changeset
1588 }
jurzua
parents:
diff changeset
1589
jurzua
parents:
diff changeset
1590 }