annotate src/main/java/org/mpi/openmind/repository/services/PersistenceService.java @ 26:5e24413d355b

Fixed bug that deleted all attributes in the system if a relation had id=null :-(
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Fri, 05 Aug 2016 22:02:18 +0200
parents 165b1efb85cd
children 1cd9d9a67cad
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.sql.Connection;
jurzua
parents:
diff changeset
4 import java.sql.ResultSet;
jurzua
parents:
diff changeset
5 import java.sql.Statement;
jurzua
parents:
diff changeset
6 import java.util.ArrayList;
jurzua
parents:
diff changeset
7 import java.util.Collections;
jurzua
parents:
diff changeset
8 import java.util.HashMap;
jurzua
parents:
diff changeset
9 import java.util.List;
jurzua
parents:
diff changeset
10 import java.util.Map;
jurzua
parents:
diff changeset
11
jurzua
parents:
diff changeset
12 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
13 import org.apache.log4j.Logger;
jurzua
parents:
diff changeset
14 import org.hibernate.Query;
jurzua
parents:
diff changeset
15 import org.hibernate.Session;
jurzua
parents:
diff changeset
16 import org.mpi.openmind.repository.bo.Attribute;
jurzua
parents:
diff changeset
17 import org.mpi.openmind.repository.bo.Entity;
jurzua
parents:
diff changeset
18 import org.mpi.openmind.repository.bo.Node;
jurzua
parents:
diff changeset
19 import org.mpi.openmind.repository.bo.Relation;
jurzua
parents:
diff changeset
20 import org.mpi.openmind.repository.bo.ViewerAttribute;
jurzua
parents:
diff changeset
21 import org.mpi.openmind.repository.bo.ViewerPage;
jurzua
parents:
diff changeset
22 import org.mpi.openmind.repository.bo.utils.RelationSortBySourceOW;
jurzua
parents:
diff changeset
23 import org.mpi.openmind.repository.bo.utils.RelationSortByTargetOW;
jurzua
parents:
diff changeset
24 import org.mpi.openmind.repository.services.utils.AttributeFilter;
jurzua
parents:
diff changeset
25 import org.mpi.openmind.repository.services.utils.RelationFilter;
jurzua
parents:
diff changeset
26 import org.mpi.openmind.repository.services.utils.RelationResultEntry;
jurzua
parents:
diff changeset
27 import org.mpi.openmind.repository.utils.HibernateUtil;
jurzua
parents:
diff changeset
28 import org.mpi.openmind.repository.utils.JDBCUtils;
jurzua
parents:
diff changeset
29
jurzua
parents:
diff changeset
30 /**
jurzua
parents:
diff changeset
31 *
jurzua
parents:
diff changeset
32 * @author jurzua
jurzua
parents:
diff changeset
33 */
jurzua
parents:
diff changeset
34 public class PersistenceService extends AbstractPersistenceService {
jurzua
parents:
diff changeset
35
jurzua
parents:
diff changeset
36 private static Logger logger = Logger.getLogger(PersistenceService.class);
jurzua
parents:
diff changeset
37 public static String GROUP_BY_SOURCE = "group_by_source";
jurzua
parents:
diff changeset
38 public static String GROUP_BY_TARGET = "group_by_target";
jurzua
parents:
diff changeset
39 public static String GROUP_BY_RELATION = "group_by_relation";
jurzua
parents:
diff changeset
40
jurzua
parents:
diff changeset
41 public Long getSourceRelationsCount(Entity entity, String relationName,
jurzua
parents:
diff changeset
42 String tarObjClass) {
jurzua
parents:
diff changeset
43 Long count = null;
jurzua
parents:
diff changeset
44 try {
jurzua
parents:
diff changeset
45 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
46 .getCurrentSession();
jurzua
parents:
diff changeset
47 session.getTransaction().begin();
jurzua
parents:
diff changeset
48
jurzua
parents:
diff changeset
49 String hql = "select count(*) from Relation rel " + "where "
jurzua
parents:
diff changeset
50 + "rel.sourceId = :id AND "
jurzua
parents:
diff changeset
51 + "rel.sourceModif = :modif AND "
jurzua
parents:
diff changeset
52 + "rel.ownValue = :relationName AND "
jurzua
parents:
diff changeset
53 + "rel.systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
54
jurzua
parents:
diff changeset
55 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
56 hql += " AND rel.targetObjectClass = :tarObjClass ";
jurzua
parents:
diff changeset
57 }
jurzua
parents:
diff changeset
58
jurzua
parents:
diff changeset
59 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
60 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
61 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
62 query.setLong("modif", entity.getModificationTime());
jurzua
parents:
diff changeset
63 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
64 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
65 query.setString("tarObjClass", tarObjClass);
jurzua
parents:
diff changeset
66 }
jurzua
parents:
diff changeset
67
jurzua
parents:
diff changeset
68 count = (Long) query.uniqueResult();
jurzua
parents:
diff changeset
69
jurzua
parents:
diff changeset
70 session.getTransaction().commit();
jurzua
parents:
diff changeset
71 } catch (Exception e) {
jurzua
parents:
diff changeset
72 logger.error(e.getMessage());
jurzua
parents:
diff changeset
73 e.printStackTrace();
jurzua
parents:
diff changeset
74 }
jurzua
parents:
diff changeset
75 return count;
jurzua
parents:
diff changeset
76 }
jurzua
parents:
diff changeset
77
jurzua
parents:
diff changeset
78 public List<Relation> getRelationBySrcOCFromDB(String srcOC, int maxResult)
jurzua
parents:
diff changeset
79 throws Exception {
jurzua
parents:
diff changeset
80 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
81 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
82
jurzua
parents:
diff changeset
83 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
84 session.getTransaction().begin();
jurzua
parents:
diff changeset
85
jurzua
parents:
diff changeset
86 String hql = "from Relation rel " + "where "
jurzua
parents:
diff changeset
87 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
88 + "rel.sourceObjectClass = :srcOC ";
jurzua
parents:
diff changeset
89
jurzua
parents:
diff changeset
90 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
91 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
92 query.setString("srcOC", srcOC);
jurzua
parents:
diff changeset
93
jurzua
parents:
diff changeset
94 if (maxResult > 0) {
jurzua
parents:
diff changeset
95 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
96 }
jurzua
parents:
diff changeset
97
jurzua
parents:
diff changeset
98 List<Relation> list = query.list();
jurzua
parents:
diff changeset
99
jurzua
parents:
diff changeset
100 // TODO loading attributes
jurzua
parents:
diff changeset
101 /*
jurzua
parents:
diff changeset
102 * for(Relation rel : relations){ List<Node> attrs =
jurzua
parents:
diff changeset
103 * this.getNodes(session, null, rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
104 * rel.getModificationTime(), null, null); for(Node attNode : attrs){
jurzua
parents:
diff changeset
105 * if(attNode instanceof Attribute){
jurzua
parents:
diff changeset
106 * rel.addAttribute((Attribute)attNode); } } }
jurzua
parents:
diff changeset
107 */
jurzua
parents:
diff changeset
108
jurzua
parents:
diff changeset
109 session.getTransaction().commit();
jurzua
parents:
diff changeset
110
jurzua
parents:
diff changeset
111 logger.info("getRelationBySrcOC [" + srcOC + "] - execution time[ms]: "
jurzua
parents:
diff changeset
112 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
113 return relations;
jurzua
parents:
diff changeset
114 }
jurzua
parents:
diff changeset
115
jurzua
parents:
diff changeset
116 public List<Relation> getRelationByTarOCFromDB(String tarOC, int maxResult) {
jurzua
parents:
diff changeset
117 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
118 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
119
jurzua
parents:
diff changeset
120 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
121 session.getTransaction().begin();
jurzua
parents:
diff changeset
122
jurzua
parents:
diff changeset
123 String hql = "from Relation rel " + "where "
jurzua
parents:
diff changeset
124 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
125 + "rel.targetObjectClass = :tarOC ";
jurzua
parents:
diff changeset
126
jurzua
parents:
diff changeset
127 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
128 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
129 query.setString("tarOC", tarOC);
jurzua
parents:
diff changeset
130
jurzua
parents:
diff changeset
131 if (maxResult > 0) {
jurzua
parents:
diff changeset
132 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
133 }
jurzua
parents:
diff changeset
134
jurzua
parents:
diff changeset
135 List<Relation> list = query.list();
jurzua
parents:
diff changeset
136
jurzua
parents:
diff changeset
137 // TODO loading attributes
jurzua
parents:
diff changeset
138 /*
jurzua
parents:
diff changeset
139 * for(Relation rel : relations){ List<Node> attrs =
jurzua
parents:
diff changeset
140 * this.getNodes(session, null, rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
141 * rel.getModificationTime(), null, null); for(Node attNode : attrs){
jurzua
parents:
diff changeset
142 * if(attNode instanceof Attribute){
jurzua
parents:
diff changeset
143 * rel.addAttribute((Attribute)attNode); } } }
jurzua
parents:
diff changeset
144 */
jurzua
parents:
diff changeset
145
jurzua
parents:
diff changeset
146 session.getTransaction().commit();
jurzua
parents:
diff changeset
147
jurzua
parents:
diff changeset
148 logger.info("getRelationByTarOC [" + tarOC + "] - execution time[ms]: "
jurzua
parents:
diff changeset
149 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
150 return relations;
jurzua
parents:
diff changeset
151 }
jurzua
parents:
diff changeset
152
jurzua
parents:
diff changeset
153 /**
jurzua
parents:
diff changeset
154 * Returns relation by name, where the parameter name is not substring.
jurzua
parents:
diff changeset
155 *
jurzua
parents:
diff changeset
156 * @param name
jurzua
parents:
diff changeset
157 * @param maxResult
jurzua
parents:
diff changeset
158 * @return
jurzua
parents:
diff changeset
159 */
jurzua
parents:
diff changeset
160 public List<Relation> getRelationByNameDB(String name, int maxResult)
jurzua
parents:
diff changeset
161 throws Exception {
jurzua
parents:
diff changeset
162 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
163 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
164
jurzua
parents:
diff changeset
165 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
166 session.getTransaction().begin();
jurzua
parents:
diff changeset
167
jurzua
parents:
diff changeset
168 String hql = "from Relation rel " + "where "
jurzua
parents:
diff changeset
169 + "rel.systemStatus = :systemStatus "
jurzua
parents:
diff changeset
170 + " AND rel.ownValue = :name ";
jurzua
parents:
diff changeset
171
jurzua
parents:
diff changeset
172 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
173 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
174 query.setString("name", name);
jurzua
parents:
diff changeset
175
jurzua
parents:
diff changeset
176 if (maxResult > 0) {
jurzua
parents:
diff changeset
177 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
178 }
jurzua
parents:
diff changeset
179
jurzua
parents:
diff changeset
180 relations = query.list();
jurzua
parents:
diff changeset
181
jurzua
parents:
diff changeset
182 // loading attributes
jurzua
parents:
diff changeset
183 /*
jurzua
parents:
diff changeset
184 * for(Relation rel : relations){ List<Node> attrs =
jurzua
parents:
diff changeset
185 * this.getNodes(session, null, rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
186 * rel.getModificationTime(), null, null); for(Node attNode : attrs){
jurzua
parents:
diff changeset
187 * if(attNode instanceof Attribute){
jurzua
parents:
diff changeset
188 * rel.addAttribute((Attribute)attNode); } } }
jurzua
parents:
diff changeset
189 */
jurzua
parents:
diff changeset
190
jurzua
parents:
diff changeset
191 session.getTransaction().commit();
jurzua
parents:
diff changeset
192
jurzua
parents:
diff changeset
193 logger.debug("getRelationByName - execution time[ms]: "
jurzua
parents:
diff changeset
194 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
195 return relations;
jurzua
parents:
diff changeset
196 }
jurzua
parents:
diff changeset
197
jurzua
parents:
diff changeset
198 public List<Relation> getSourceRelationsJDBCFromDB(Entity entity,
jurzua
parents:
diff changeset
199 String relationName, String tarObjClass, int maxResult,
jurzua
parents:
diff changeset
200 boolean includeEntities) {
jurzua
parents:
diff changeset
201
jurzua
parents:
diff changeset
202 List<Relation> relations = null;
jurzua
parents:
diff changeset
203 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
204 try {
jurzua
parents:
diff changeset
205
jurzua
parents:
diff changeset
206 Connection conn = JDBCUtils.getConn();
jurzua
parents:
diff changeset
207
jurzua
parents:
diff changeset
208 String sql = "select * from node " + "where " + "source_id = '"
jurzua
parents:
diff changeset
209 + entity.getId() + "' AND " + "source_modif = '"
jurzua
parents:
diff changeset
210 + entity.getModificationTime() + "' AND "
jurzua
parents:
diff changeset
211 + "system_status = '" + Node.SYS_STATUS_CURRENT_VERSION
jurzua
parents:
diff changeset
212 + "' ";
jurzua
parents:
diff changeset
213
jurzua
parents:
diff changeset
214 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
215 sql += " AND own_value = '" + relationName + "' ";
jurzua
parents:
diff changeset
216 }
jurzua
parents:
diff changeset
217 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
218 sql += " AND target_obj_class = '" + tarObjClass + "' ";
jurzua
parents:
diff changeset
219 }
jurzua
parents:
diff changeset
220
jurzua
parents:
diff changeset
221 // logger.info(sql);
jurzua
parents:
diff changeset
222 Statement st = conn.createStatement();
jurzua
parents:
diff changeset
223 ResultSet rs = st.executeQuery(sql);
jurzua
parents:
diff changeset
224 relations = JDBCUtils.rs2Rels(rs);
jurzua
parents:
diff changeset
225
jurzua
parents:
diff changeset
226 conn.close();
jurzua
parents:
diff changeset
227
jurzua
parents:
diff changeset
228 } catch (Exception e) {
jurzua
parents:
diff changeset
229 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
230 e.printStackTrace();
jurzua
parents:
diff changeset
231 }
jurzua
parents:
diff changeset
232
jurzua
parents:
diff changeset
233 logger.debug("getSourceRelations JDBC - execution time[ms]: "
jurzua
parents:
diff changeset
234 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
235 return relations;
jurzua
parents:
diff changeset
236 }
jurzua
parents:
diff changeset
237
jurzua
parents:
diff changeset
238 public List<Relation> getSourceRelationsFromDB(Entity entity,
jurzua
parents:
diff changeset
239 String relationName, String tarObjClass, int maxResult,
jurzua
parents:
diff changeset
240 boolean includeEntities) throws Exception {
jurzua
parents:
diff changeset
241
jurzua
parents:
diff changeset
242 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
243 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
244
jurzua
parents:
diff changeset
245 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
246 session.getTransaction().begin();
jurzua
parents:
diff changeset
247
jurzua
parents:
diff changeset
248 String hql = "from Relation rel " + "where "
jurzua
parents:
diff changeset
249 + "rel.sourceId = :id AND "
jurzua
parents:
diff changeset
250 + "rel.sourceModif = :modif AND " // TODO: previous versions are same without considering the modif
jurzua
parents:
diff changeset
251 + "rel.systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
252
jurzua
parents:
diff changeset
253 if(StringUtils.equals(entity.getSystemStatus(), Node.SYS_STATUS_PREVIOUS_VERSION)){
jurzua
parents:
diff changeset
254 hql += " AND rel.sourceModif = :modif ";
jurzua
parents:
diff changeset
255 }
jurzua
parents:
diff changeset
256 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
257 hql += " AND rel.ownValue = :relationName ";
jurzua
parents:
diff changeset
258 }
jurzua
parents:
diff changeset
259 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
260 hql += " AND rel.targetObjectClass = :tarObjClass ";
jurzua
parents:
diff changeset
261 }
jurzua
parents:
diff changeset
262
jurzua
parents:
diff changeset
263 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
264 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
265 query.setLong("modif", entity.getModificationTime());
jurzua
parents:
diff changeset
266 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
267
jurzua
parents:
diff changeset
268
jurzua
parents:
diff changeset
269 //if(StringUtils.equals(entity.getSystemStatus(), Node.SYS_STATUS_PREVIOUS_VERSION)){
jurzua
parents:
diff changeset
270 // query.setLong("modif", entity.getModificationTime());
jurzua
parents:
diff changeset
271 //}
jurzua
parents:
diff changeset
272 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
273 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
274 }
jurzua
parents:
diff changeset
275 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
276 query.setString("tarObjClass", tarObjClass);
jurzua
parents:
diff changeset
277 }
jurzua
parents:
diff changeset
278 if (maxResult > 0) {
jurzua
parents:
diff changeset
279 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
280 }
jurzua
parents:
diff changeset
281
jurzua
parents:
diff changeset
282 List<Relation> list = query.list();
jurzua
parents:
diff changeset
283 if (includeEntities) {
jurzua
parents:
diff changeset
284 for (Relation rel : list) {
jurzua
parents:
diff changeset
285 List<Entity> tarList = getLightweightEntities(session,
jurzua
parents:
diff changeset
286 Node.SYS_STATUS_CURRENT_VERSION, rel.getTargetId(),
jurzua
parents:
diff changeset
287 null, null, null, false, 1);
jurzua
parents:
diff changeset
288 if (tarList.size() > 0) {
jurzua
parents:
diff changeset
289 rel.setSource(entity);
jurzua
parents:
diff changeset
290 rel.setTarget(tarList.get(0));
jurzua
parents:
diff changeset
291 relations.add(rel);
jurzua
parents:
diff changeset
292 }
jurzua
parents:
diff changeset
293 }
jurzua
parents:
diff changeset
294
jurzua
parents:
diff changeset
295 Collections.sort(relations, new RelationSortByTargetOW());
jurzua
parents:
diff changeset
296 } else {
jurzua
parents:
diff changeset
297 relations = list;
jurzua
parents:
diff changeset
298 }
jurzua
parents:
diff changeset
299
jurzua
parents:
diff changeset
300 // loading attributes
jurzua
parents:
diff changeset
301 for (Relation rel : relations) {
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
302 // FIXME: getNodes finds all attributes if id=null!
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
303 if (rel.getId() == null) {
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
304 logger.error("Relation with id=null! Abort loading attributes.");
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
305 continue;
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
306 }
1
jurzua
parents:
diff changeset
307 List<Node> attrs = this.getNodes(session, null,
jurzua
parents:
diff changeset
308 rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
309 rel.getModificationTime(), null, null);
jurzua
parents:
diff changeset
310 for (Node attNode : attrs) {
jurzua
parents:
diff changeset
311 if (attNode instanceof Attribute) {
jurzua
parents:
diff changeset
312 rel.addAttribute((Attribute) attNode);
jurzua
parents:
diff changeset
313 }
jurzua
parents:
diff changeset
314 }
jurzua
parents:
diff changeset
315 }
jurzua
parents:
diff changeset
316
jurzua
parents:
diff changeset
317 session.getTransaction().commit();
jurzua
parents:
diff changeset
318
jurzua
parents:
diff changeset
319 logger.debug("getSourceRelations - execution time[ms]: "
jurzua
parents:
diff changeset
320 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
321 return relations;
jurzua
parents:
diff changeset
322 }
jurzua
parents:
diff changeset
323
jurzua
parents:
diff changeset
324 /**
jurzua
parents:
diff changeset
325 * <p>
jurzua
parents:
diff changeset
326 * Returns the relations directly for the given entity from the DB, which
jurzua
parents:
diff changeset
327 * conforms the given input.
jurzua
parents:
diff changeset
328 * </p>
jurzua
parents:
diff changeset
329 * <p>
jurzua
parents:
diff changeset
330 * Only the variable tarObjClass can be null.
jurzua
parents:
diff changeset
331 * </p>
jurzua
parents:
diff changeset
332 * <p>
jurzua
parents:
diff changeset
333 * If its expected all existing element from the DB, the variable maxResult
jurzua
parents:
diff changeset
334 * should be -1, otherwise this value limits the returned result-set.
jurzua
parents:
diff changeset
335 * </p>
jurzua
parents:
diff changeset
336 *
jurzua
parents:
diff changeset
337 * @param entity
jurzua
parents:
diff changeset
338 * @param relationName
jurzua
parents:
diff changeset
339 * @param tarObjClass
jurzua
parents:
diff changeset
340 * @param maxResult
jurzua
parents:
diff changeset
341 * @return
jurzua
parents:
diff changeset
342 */
jurzua
parents:
diff changeset
343 public List<Relation> getSourceRelationsError(Entity entity,
jurzua
parents:
diff changeset
344 String relationName, String tarObjClass, int maxResult)
jurzua
parents:
diff changeset
345 throws Exception {
jurzua
parents:
diff changeset
346
jurzua
parents:
diff changeset
347 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
348
jurzua
parents:
diff changeset
349 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
350 session.getTransaction().begin();
jurzua
parents:
diff changeset
351
jurzua
parents:
diff changeset
352 String hql = "from Relation rel, Entity tar " + "where "
jurzua
parents:
diff changeset
353 + "rel.sourceId = :id AND " + "rel.sourceModif = :mod AND "
jurzua
parents:
diff changeset
354 + "rel.ownValue = :relationName AND "
jurzua
parents:
diff changeset
355 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
356 + "tar.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
357 + "tar.id = rel.targetId ";
jurzua
parents:
diff changeset
358
jurzua
parents:
diff changeset
359 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
360 hql += " AND rel.targetObjectClass = :tarObjClass ";
jurzua
parents:
diff changeset
361 }
jurzua
parents:
diff changeset
362
jurzua
parents:
diff changeset
363 hql += " order by tar.ownValue ";
jurzua
parents:
diff changeset
364
jurzua
parents:
diff changeset
365 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
366 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
367 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
368 query.setLong("mod", entity.getModificationTime());
jurzua
parents:
diff changeset
369 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
370 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
371 query.setString("tarObjClass", tarObjClass);
jurzua
parents:
diff changeset
372 }
jurzua
parents:
diff changeset
373 if (maxResult > 0) {
jurzua
parents:
diff changeset
374 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
375 }
jurzua
parents:
diff changeset
376
jurzua
parents:
diff changeset
377 List<Object> list = query.list();
jurzua
parents:
diff changeset
378
jurzua
parents:
diff changeset
379 for (Object o : list) {
jurzua
parents:
diff changeset
380 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
381 if (array.length > 0) {
jurzua
parents:
diff changeset
382 Relation rel = (Relation) array[0];
jurzua
parents:
diff changeset
383 Entity tar = (Entity) array[1];
jurzua
parents:
diff changeset
384 tar.setLightweight(true);
jurzua
parents:
diff changeset
385 rel.setSource(entity);
jurzua
parents:
diff changeset
386 rel.setTarget(tar);
jurzua
parents:
diff changeset
387 relations.add(rel);
jurzua
parents:
diff changeset
388 }
jurzua
parents:
diff changeset
389 }
jurzua
parents:
diff changeset
390 session.getTransaction().commit();
jurzua
parents:
diff changeset
391
jurzua
parents:
diff changeset
392 return relations;
jurzua
parents:
diff changeset
393 }
jurzua
parents:
diff changeset
394
jurzua
parents:
diff changeset
395 public Long getTargetRelationsCount(Entity entity, String relationName,
jurzua
parents:
diff changeset
396 String srcObjClass) {
jurzua
parents:
diff changeset
397 Long count = null;
jurzua
parents:
diff changeset
398 try {
jurzua
parents:
diff changeset
399 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
400 .getCurrentSession();
jurzua
parents:
diff changeset
401 session.getTransaction().begin();
jurzua
parents:
diff changeset
402
jurzua
parents:
diff changeset
403 String hql = "select count(*) from Relation rel " + "where "
jurzua
parents:
diff changeset
404 + "rel.targetId = :id AND "
jurzua
parents:
diff changeset
405 + "rel.targetModif = :modif AND "
jurzua
parents:
diff changeset
406 + "rel.ownValue = :relationName AND "
jurzua
parents:
diff changeset
407 + "rel.systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
408
jurzua
parents:
diff changeset
409 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
410 hql += " AND rel.sourceObjectClass = :srcObjClass ";
jurzua
parents:
diff changeset
411 }
jurzua
parents:
diff changeset
412
jurzua
parents:
diff changeset
413 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
414 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
415 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
416 query.setLong("modif", entity.getModificationTime());
jurzua
parents:
diff changeset
417 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
418 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
419 }
jurzua
parents:
diff changeset
420 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
421 query.setString("srcObjClass", srcObjClass);
jurzua
parents:
diff changeset
422 }
jurzua
parents:
diff changeset
423
jurzua
parents:
diff changeset
424 count = (Long) query.uniqueResult();
jurzua
parents:
diff changeset
425
jurzua
parents:
diff changeset
426 session.getTransaction().commit();
jurzua
parents:
diff changeset
427 } catch (Exception e) {
jurzua
parents:
diff changeset
428 logger.error(e.getMessage());
jurzua
parents:
diff changeset
429 e.printStackTrace();
jurzua
parents:
diff changeset
430 }
jurzua
parents:
diff changeset
431 return count;
jurzua
parents:
diff changeset
432 }
jurzua
parents:
diff changeset
433
jurzua
parents:
diff changeset
434 public List<Relation> getTargetRelationsJDBCFromDB(Entity entity,
jurzua
parents:
diff changeset
435 String relationName, String srcObjClass, int maxResult,
jurzua
parents:
diff changeset
436 boolean includeEntities) {
jurzua
parents:
diff changeset
437
jurzua
parents:
diff changeset
438 List<Relation> relations = null;
jurzua
parents:
diff changeset
439 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
440 try {
jurzua
parents:
diff changeset
441
jurzua
parents:
diff changeset
442 Connection conn = JDBCUtils.getConn();
jurzua
parents:
diff changeset
443
jurzua
parents:
diff changeset
444 String sql = "select * from node " + "where " + "target_id = '"
jurzua
parents:
diff changeset
445 + entity.getId() + "' AND " + "target_modif = '"
jurzua
parents:
diff changeset
446 + entity.getModificationTime() + "' AND "
jurzua
parents:
diff changeset
447 + "system_status = '" + Node.SYS_STATUS_CURRENT_VERSION
jurzua
parents:
diff changeset
448 + "' ";
jurzua
parents:
diff changeset
449
jurzua
parents:
diff changeset
450 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
451 sql += " AND own_value = '" + relationName + "' ";
jurzua
parents:
diff changeset
452 }
jurzua
parents:
diff changeset
453 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
454 sql += " AND source_obj_class = '" + srcObjClass + "' ";
jurzua
parents:
diff changeset
455 }
jurzua
parents:
diff changeset
456
jurzua
parents:
diff changeset
457 // logger.info(sql);
jurzua
parents:
diff changeset
458 Statement st = conn.createStatement();
jurzua
parents:
diff changeset
459 ResultSet rs = st.executeQuery(sql);
jurzua
parents:
diff changeset
460 relations = JDBCUtils.rs2Rels(rs);
jurzua
parents:
diff changeset
461
jurzua
parents:
diff changeset
462 conn.close();
jurzua
parents:
diff changeset
463 } catch (Exception e) {
jurzua
parents:
diff changeset
464 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
465 e.printStackTrace();
jurzua
parents:
diff changeset
466 }
jurzua
parents:
diff changeset
467
jurzua
parents:
diff changeset
468 logger.debug("GetTargetRelations JDBC - execution time[ms]: "
jurzua
parents:
diff changeset
469 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
470 return relations;
jurzua
parents:
diff changeset
471 }
jurzua
parents:
diff changeset
472
jurzua
parents:
diff changeset
473 public List<Relation> getTargetRelationsFromDB(Entity entity,
jurzua
parents:
diff changeset
474 String relationName, String srcObjClass, int maxResult,
jurzua
parents:
diff changeset
475 boolean includeEntities) {
jurzua
parents:
diff changeset
476 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
477 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
478 try {
jurzua
parents:
diff changeset
479
jurzua
parents:
diff changeset
480 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
481 .getCurrentSession();
jurzua
parents:
diff changeset
482 session.getTransaction().begin();
jurzua
parents:
diff changeset
483
jurzua
parents:
diff changeset
484 String hql = "from Relation rel " + "where "
jurzua
parents:
diff changeset
485 + "rel.targetId = :id AND "
jurzua
parents:
diff changeset
486 + "rel.targetModif = :modif AND "
jurzua
parents:
diff changeset
487 + "rel.systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
488
jurzua
parents:
diff changeset
489 if(StringUtils.equals(entity.getSystemStatus(), Node.SYS_STATUS_PREVIOUS_VERSION)){
jurzua
parents:
diff changeset
490 hql += " AND rel.targetModif = :modif ";
jurzua
parents:
diff changeset
491 }
jurzua
parents:
diff changeset
492 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
493 hql += " AND rel.ownValue = :relationName ";
jurzua
parents:
diff changeset
494 }
jurzua
parents:
diff changeset
495 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
496 hql += " AND rel.sourceObjectClass = :srcObjClass ";
jurzua
parents:
diff changeset
497 }
jurzua
parents:
diff changeset
498
jurzua
parents:
diff changeset
499 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
500 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
501 query.setLong("modif", entity.getModificationTime());
jurzua
parents:
diff changeset
502 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
503
jurzua
parents:
diff changeset
504 //if(StringUtils.equals(entity.getSystemStatus(), Node.SYS_STATUS_PREVIOUS_VERSION)){
jurzua
parents:
diff changeset
505 // query.setLong("modif", entity.getModificationTime());
jurzua
parents:
diff changeset
506 //}
jurzua
parents:
diff changeset
507 if (StringUtils.isNotEmpty(relationName)) {
jurzua
parents:
diff changeset
508 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
509 }
jurzua
parents:
diff changeset
510 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
511 query.setString("srcObjClass", srcObjClass);
jurzua
parents:
diff changeset
512 }
jurzua
parents:
diff changeset
513 if (maxResult > 0) {
jurzua
parents:
diff changeset
514 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
515 }
jurzua
parents:
diff changeset
516
jurzua
parents:
diff changeset
517 List<Relation> list = query.list();
jurzua
parents:
diff changeset
518 if (includeEntities) {
jurzua
parents:
diff changeset
519 for (Relation rel : list) {
jurzua
parents:
diff changeset
520 List<Entity> srcList = getLightweightEntities(session,
jurzua
parents:
diff changeset
521 Node.SYS_STATUS_CURRENT_VERSION, rel.getSourceId(),
jurzua
parents:
diff changeset
522 null, null, null, false, 1);
jurzua
parents:
diff changeset
523 if (srcList.size() > 0) {
jurzua
parents:
diff changeset
524 rel.setSource(srcList.get(0));
jurzua
parents:
diff changeset
525 rel.setTarget(entity);
jurzua
parents:
diff changeset
526 relations.add(rel);
jurzua
parents:
diff changeset
527 }
jurzua
parents:
diff changeset
528 }
jurzua
parents:
diff changeset
529
jurzua
parents:
diff changeset
530 Collections.sort(relations, new RelationSortBySourceOW());
jurzua
parents:
diff changeset
531 } else {
jurzua
parents:
diff changeset
532 relations = list;
jurzua
parents:
diff changeset
533 }
jurzua
parents:
diff changeset
534 // loading attributes
jurzua
parents:
diff changeset
535 for (Relation rel : relations) {
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
536 // FIXME: getNodes finds all attributes if id=null!
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
537 if (rel.getId() == null) {
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
538 logger.error("Relation with id=null! Abort loading attributes.");
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
539 continue;
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
540 }
1
jurzua
parents:
diff changeset
541 List<Node> attrs = this.getNodes(session, null,
jurzua
parents:
diff changeset
542 rel.getSystemStatus(), rel.getId(),
jurzua
parents:
diff changeset
543 rel.getModificationTime(), null, null);
jurzua
parents:
diff changeset
544 for (Node attNode : attrs) {
jurzua
parents:
diff changeset
545 if (attNode instanceof Attribute) {
jurzua
parents:
diff changeset
546 rel.addAttribute((Attribute) attNode);
jurzua
parents:
diff changeset
547 }
jurzua
parents:
diff changeset
548 }
jurzua
parents:
diff changeset
549 }
jurzua
parents:
diff changeset
550
jurzua
parents:
diff changeset
551 session.getTransaction().commit();
jurzua
parents:
diff changeset
552
jurzua
parents:
diff changeset
553 } catch (Exception e) {
jurzua
parents:
diff changeset
554 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
555 e.printStackTrace();
jurzua
parents:
diff changeset
556 }
jurzua
parents:
diff changeset
557 long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
558 if (end - start > 500) {
jurzua
parents:
diff changeset
559 logger.debug("GetTargetRelations - execution time[ms]: "
jurzua
parents:
diff changeset
560 + (end - start));
jurzua
parents:
diff changeset
561 }
jurzua
parents:
diff changeset
562 return relations;
jurzua
parents:
diff changeset
563 }
jurzua
parents:
diff changeset
564
jurzua
parents:
diff changeset
565 /**
jurzua
parents:
diff changeset
566 * <p>
jurzua
parents:
diff changeset
567 * Returns the relations directly for the given entity from the DB, which
jurzua
parents:
diff changeset
568 * conforms the given input.
jurzua
parents:
diff changeset
569 * </p>
jurzua
parents:
diff changeset
570 * <p>
jurzua
parents:
diff changeset
571 * Only the variable srcObjClass can be null.
jurzua
parents:
diff changeset
572 * </p>
jurzua
parents:
diff changeset
573 * <p>
jurzua
parents:
diff changeset
574 * If every existing element from the DB is expected, the variable maxResult
jurzua
parents:
diff changeset
575 * should be -1, otherwise this value limits the returned result-set.
jurzua
parents:
diff changeset
576 * </p>
jurzua
parents:
diff changeset
577 *
jurzua
parents:
diff changeset
578 * @param entity
jurzua
parents:
diff changeset
579 * @param relationName
jurzua
parents:
diff changeset
580 * @param tarObjClass
jurzua
parents:
diff changeset
581 * @param maxResult
jurzua
parents:
diff changeset
582 * @return
jurzua
parents:
diff changeset
583 */
jurzua
parents:
diff changeset
584 public List<Relation> getTargetRelationsError(Entity entity,
jurzua
parents:
diff changeset
585 String relationName, String srcObjClass, int maxResult) {
jurzua
parents:
diff changeset
586 List<Relation> relations = new ArrayList<Relation>();
jurzua
parents:
diff changeset
587 try {
jurzua
parents:
diff changeset
588 logger.debug("### get Target Relations ###");
jurzua
parents:
diff changeset
589
jurzua
parents:
diff changeset
590 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
591 .getCurrentSession();
jurzua
parents:
diff changeset
592 session.getTransaction().begin();
jurzua
parents:
diff changeset
593
jurzua
parents:
diff changeset
594 String hql = "from Relation rel, Entity src " + "where "
jurzua
parents:
diff changeset
595 + "rel.targetId = :id AND " + "rel.targetModif = :mod AND "
jurzua
parents:
diff changeset
596 + "rel.ownValue = :relationName AND "
jurzua
parents:
diff changeset
597 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
598 + "src.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
599 + "src.id = rel.sourceId ";
jurzua
parents:
diff changeset
600
jurzua
parents:
diff changeset
601 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
602 hql += " AND rel.sourceObjectClass = :srcObjClass ";
jurzua
parents:
diff changeset
603 }
jurzua
parents:
diff changeset
604
jurzua
parents:
diff changeset
605 hql += " order by src.ownValue ";
jurzua
parents:
diff changeset
606
jurzua
parents:
diff changeset
607 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
608 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
609 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
610 query.setLong("mod", entity.getModificationTime());
jurzua
parents:
diff changeset
611 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
612 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
613 query.setString("srcObjClass", srcObjClass);
jurzua
parents:
diff changeset
614 }
jurzua
parents:
diff changeset
615 if (maxResult > 0) {
jurzua
parents:
diff changeset
616 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
617 }
jurzua
parents:
diff changeset
618
jurzua
parents:
diff changeset
619 List<Object> list = query.list();
jurzua
parents:
diff changeset
620
jurzua
parents:
diff changeset
621 for (Object o : list) {
jurzua
parents:
diff changeset
622 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
623 if (array.length > 0) {
jurzua
parents:
diff changeset
624 Relation rel = (Relation) array[0];
jurzua
parents:
diff changeset
625 Entity src = (Entity) array[1];
jurzua
parents:
diff changeset
626 src.setLightweight(true);
jurzua
parents:
diff changeset
627 rel.setSource(src);
jurzua
parents:
diff changeset
628 rel.setTarget(entity);
jurzua
parents:
diff changeset
629 relations.add(rel);
jurzua
parents:
diff changeset
630 }
jurzua
parents:
diff changeset
631 }
jurzua
parents:
diff changeset
632
jurzua
parents:
diff changeset
633 session.getTransaction().commit();
jurzua
parents:
diff changeset
634
jurzua
parents:
diff changeset
635 } catch (Exception e) {
jurzua
parents:
diff changeset
636 logger.error(e.getMessage());
jurzua
parents:
diff changeset
637 e.printStackTrace();
jurzua
parents:
diff changeset
638 }
jurzua
parents:
diff changeset
639 return relations;
jurzua
parents:
diff changeset
640 }
jurzua
parents:
diff changeset
641
jurzua
parents:
diff changeset
642 /**
jurzua
parents:
diff changeset
643 * <p>
jurzua
parents:
diff changeset
644 * Returns the entities of class "tarObjClass" directly from the DB, which
jurzua
parents:
diff changeset
645 * are connected to the given entity by a relation of name "relationName".
jurzua
parents:
diff changeset
646 * </p>
jurzua
parents:
diff changeset
647 * <p>
jurzua
parents:
diff changeset
648 * Only the variable tarObjClass can be null.
jurzua
parents:
diff changeset
649 * </p>
jurzua
parents:
diff changeset
650 * <p>
jurzua
parents:
diff changeset
651 * If its expected all existing element from the DB, the variable maxResult
jurzua
parents:
diff changeset
652 * should be -1, otherwise this value limits the returned result-set.
jurzua
parents:
diff changeset
653 * </p>
jurzua
parents:
diff changeset
654 *
jurzua
parents:
diff changeset
655 * @param entity
jurzua
parents:
diff changeset
656 * @param relationName
jurzua
parents:
diff changeset
657 * @param tarObjClass
jurzua
parents:
diff changeset
658 * @param maxResult
jurzua
parents:
diff changeset
659 * @return
jurzua
parents:
diff changeset
660 */
jurzua
parents:
diff changeset
661 public List<Entity> getTargetsForSourceRelation(Entity entity,
jurzua
parents:
diff changeset
662 String relationName, String tarObjClass, int maxResult) {
jurzua
parents:
diff changeset
663 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
664 try {
jurzua
parents:
diff changeset
665 logger.debug("### get Targets For Source Relation ###");
jurzua
parents:
diff changeset
666
jurzua
parents:
diff changeset
667 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
668 .getCurrentSession();
jurzua
parents:
diff changeset
669 session.getTransaction().begin();
jurzua
parents:
diff changeset
670 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
671
jurzua
parents:
diff changeset
672 String hql = "from Relation rel, Entity tar " + "where "
jurzua
parents:
diff changeset
673 + "rel.sourceId = :id AND " + "rel.sourceModif = :mod AND "
jurzua
parents:
diff changeset
674 + "rel.ownValue = :relationName AND "
jurzua
parents:
diff changeset
675 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
676 + "tar.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
677 + "tar.id = rel.targetId ";
jurzua
parents:
diff changeset
678
jurzua
parents:
diff changeset
679 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
680 hql += " AND rel.targetObjectClass = :tarObjClass ";
jurzua
parents:
diff changeset
681 }
jurzua
parents:
diff changeset
682
jurzua
parents:
diff changeset
683 hql += " order by tar.ownValue ";
jurzua
parents:
diff changeset
684
jurzua
parents:
diff changeset
685 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
686 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
687 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
688 query.setLong("mod", entity.getModificationTime());
jurzua
parents:
diff changeset
689 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
690 if (StringUtils.isNotEmpty(tarObjClass)) {
jurzua
parents:
diff changeset
691 query.setString("tarObjClass", tarObjClass);
jurzua
parents:
diff changeset
692 }
jurzua
parents:
diff changeset
693 if (maxResult > 0) {
jurzua
parents:
diff changeset
694 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
695 }
jurzua
parents:
diff changeset
696
jurzua
parents:
diff changeset
697 List<Object> list = query.list();
jurzua
parents:
diff changeset
698
jurzua
parents:
diff changeset
699 for (Object o : list) {
jurzua
parents:
diff changeset
700 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
701 if (array.length > 0) {
jurzua
parents:
diff changeset
702 Entity ent = (Entity) array[1];
jurzua
parents:
diff changeset
703 ent.setLightweight(true);
jurzua
parents:
diff changeset
704 entities.add(ent);
jurzua
parents:
diff changeset
705 }
jurzua
parents:
diff changeset
706 }
jurzua
parents:
diff changeset
707
jurzua
parents:
diff changeset
708 session.getTransaction().commit();
jurzua
parents:
diff changeset
709 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
710 Long diff = end - start;
jurzua
parents:
diff changeset
711 logger.debug("Target For SourceRelation - Time execution: " + diff
jurzua
parents:
diff changeset
712 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
713 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
714
jurzua
parents:
diff changeset
715 } catch (Exception e) {
jurzua
parents:
diff changeset
716 logger.error(e.getMessage());
jurzua
parents:
diff changeset
717 e.printStackTrace();
jurzua
parents:
diff changeset
718 }
jurzua
parents:
diff changeset
719 return entities;
jurzua
parents:
diff changeset
720 }
jurzua
parents:
diff changeset
721
jurzua
parents:
diff changeset
722 /**
jurzua
parents:
diff changeset
723 * <p>
jurzua
parents:
diff changeset
724 * Returns the entities of class "srcObjClass" directly from the DB, which
jurzua
parents:
diff changeset
725 * are connected to the given entity by a relation of name "relationName".
jurzua
parents:
diff changeset
726 * </p>
jurzua
parents:
diff changeset
727 * <p>
jurzua
parents:
diff changeset
728 * Only the variable srcObjClass can be null.
jurzua
parents:
diff changeset
729 * </p>
jurzua
parents:
diff changeset
730 * <p>
jurzua
parents:
diff changeset
731 * If its expected all existing element from the DB, the variable maxResult
jurzua
parents:
diff changeset
732 * should be -1, otherwise this value limits the returned result-set.
jurzua
parents:
diff changeset
733 * </p>
jurzua
parents:
diff changeset
734 *
jurzua
parents:
diff changeset
735 * @param entity
jurzua
parents:
diff changeset
736 * @param relationName
jurzua
parents:
diff changeset
737 * @param tarObjClass
jurzua
parents:
diff changeset
738 * @param maxResult
jurzua
parents:
diff changeset
739 * @return
jurzua
parents:
diff changeset
740 */
jurzua
parents:
diff changeset
741 public List<Entity> getSourcesForTargetRelation(Entity entity,
jurzua
parents:
diff changeset
742 String relationName, String srcObjClass, int maxResult) {
jurzua
parents:
diff changeset
743 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
744 try {
jurzua
parents:
diff changeset
745 logger.debug("### get Sources For TargetRelation ###");
jurzua
parents:
diff changeset
746
jurzua
parents:
diff changeset
747 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
748 .getCurrentSession();
jurzua
parents:
diff changeset
749 session.getTransaction().begin();
jurzua
parents:
diff changeset
750 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
751
jurzua
parents:
diff changeset
752 String hql = "from Relation rel, Entity src " + "where "
jurzua
parents:
diff changeset
753 + "rel.targetId = :id AND " + "rel.targetModif = :mod AND "
jurzua
parents:
diff changeset
754 + "rel.ownValue = :relationName AND "
jurzua
parents:
diff changeset
755 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
756 + "src.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
757 + "src.id = rel.sourceId ";
jurzua
parents:
diff changeset
758
jurzua
parents:
diff changeset
759 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
760 hql += " AND rel.sourceObjectClass = :srcObjClass ";
jurzua
parents:
diff changeset
761 }
jurzua
parents:
diff changeset
762
jurzua
parents:
diff changeset
763 hql += " order by src.ownValue ";
jurzua
parents:
diff changeset
764
jurzua
parents:
diff changeset
765 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
766 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
767 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
768 query.setLong("mod", entity.getModificationTime());
jurzua
parents:
diff changeset
769 query.setString("relationName", relationName);
jurzua
parents:
diff changeset
770 if (StringUtils.isNotEmpty(srcObjClass)) {
jurzua
parents:
diff changeset
771 query.setString("srcObjClass", srcObjClass);
jurzua
parents:
diff changeset
772 }
jurzua
parents:
diff changeset
773 if (maxResult > 0) {
jurzua
parents:
diff changeset
774 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
775 }
jurzua
parents:
diff changeset
776
jurzua
parents:
diff changeset
777 List<Object> list = query.list();
jurzua
parents:
diff changeset
778
jurzua
parents:
diff changeset
779 for (Object o : list) {
jurzua
parents:
diff changeset
780 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
781 if (array.length > 0) {
jurzua
parents:
diff changeset
782 Entity ent = (Entity) array[1];
jurzua
parents:
diff changeset
783 ent.setLightweight(true);
jurzua
parents:
diff changeset
784 entities.add(ent);
jurzua
parents:
diff changeset
785 }
jurzua
parents:
diff changeset
786 }
jurzua
parents:
diff changeset
787
jurzua
parents:
diff changeset
788 session.getTransaction().commit();
jurzua
parents:
diff changeset
789 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
790 Long diff = end - start;
jurzua
parents:
diff changeset
791 logger.debug("Sources For TargetRelation - Time execution: " + diff
jurzua
parents:
diff changeset
792 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
793 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
794
jurzua
parents:
diff changeset
795 } catch (Exception e) {
jurzua
parents:
diff changeset
796 logger.error(e.getMessage());
jurzua
parents:
diff changeset
797 e.printStackTrace();
jurzua
parents:
diff changeset
798 }
jurzua
parents:
diff changeset
799 return entities;
jurzua
parents:
diff changeset
800 }
jurzua
parents:
diff changeset
801
jurzua
parents:
diff changeset
802 public ViewerAttribute saveViewerAttribute(ViewerAttribute att){
jurzua
parents:
diff changeset
803 try {
jurzua
parents:
diff changeset
804 logger.debug("### saveViewerAttribute ###");
jurzua
parents:
diff changeset
805
jurzua
parents:
diff changeset
806 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
807 .getCurrentSession();
jurzua
parents:
diff changeset
808 session.getTransaction().begin();
jurzua
parents:
diff changeset
809 session.saveOrUpdate(att);
jurzua
parents:
diff changeset
810 session.getTransaction().commit();
jurzua
parents:
diff changeset
811
jurzua
parents:
diff changeset
812 } catch (Exception e) {
jurzua
parents:
diff changeset
813 logger.error(e.getMessage());
jurzua
parents:
diff changeset
814 e.printStackTrace();
jurzua
parents:
diff changeset
815 }
jurzua
parents:
diff changeset
816 return att;
jurzua
parents:
diff changeset
817 }
jurzua
parents:
diff changeset
818
jurzua
parents:
diff changeset
819 public ViewerPage saveViewerPage(ViewerPage page){
jurzua
parents:
diff changeset
820 try {
jurzua
parents:
diff changeset
821 logger.debug("### saveViewerPage ###");
jurzua
parents:
diff changeset
822
jurzua
parents:
diff changeset
823 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
824 .getCurrentSession();
jurzua
parents:
diff changeset
825 session.getTransaction().begin();
jurzua
parents:
diff changeset
826 session.saveOrUpdate(page);
jurzua
parents:
diff changeset
827 session.getTransaction().commit();
jurzua
parents:
diff changeset
828
jurzua
parents:
diff changeset
829 } catch (Exception e) {
jurzua
parents:
diff changeset
830 logger.error(e.getMessage());
jurzua
parents:
diff changeset
831 e.printStackTrace();
jurzua
parents:
diff changeset
832 }
jurzua
parents:
diff changeset
833 return page;
jurzua
parents:
diff changeset
834 }
jurzua
parents:
diff changeset
835
jurzua
parents:
diff changeset
836 public int removeViewerAttribute(Long id){
jurzua
parents:
diff changeset
837 int rows = 0;
jurzua
parents:
diff changeset
838 try {
jurzua
parents:
diff changeset
839 logger.debug("$$$ removeViewerAttribute [ID=" + id + "]");
jurzua
parents:
diff changeset
840
jurzua
parents:
diff changeset
841 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
842 .getCurrentSession();
jurzua
parents:
diff changeset
843 session.beginTransaction();
jurzua
parents:
diff changeset
844 String sql = "DELETE FROM ViewerAttribute WHERE id = :id";
jurzua
parents:
diff changeset
845 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
846 query.setLong("id", id);
jurzua
parents:
diff changeset
847
jurzua
parents:
diff changeset
848 rows = query.executeUpdate();
jurzua
parents:
diff changeset
849 session.getTransaction().commit();
jurzua
parents:
diff changeset
850
jurzua
parents:
diff changeset
851 } catch (Exception e) {
jurzua
parents:
diff changeset
852 logger.error(e.getMessage());
jurzua
parents:
diff changeset
853 e.printStackTrace();
jurzua
parents:
diff changeset
854 }
jurzua
parents:
diff changeset
855 return rows;
jurzua
parents:
diff changeset
856 }
jurzua
parents:
diff changeset
857
jurzua
parents:
diff changeset
858 public int removeViewerPage(Long id){
jurzua
parents:
diff changeset
859 int rows = 0;
jurzua
parents:
diff changeset
860 try {
jurzua
parents:
diff changeset
861 logger.debug("$$$ removeViewerPage [ID=" + id + "]");
jurzua
parents:
diff changeset
862
jurzua
parents:
diff changeset
863 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
864 .getCurrentSession();
jurzua
parents:
diff changeset
865 session.beginTransaction();
jurzua
parents:
diff changeset
866 String sql = "DELETE FROM ViewerPage WHERE id = :id";
jurzua
parents:
diff changeset
867 Query query = session.createQuery(sql);
jurzua
parents:
diff changeset
868 query.setLong("id", id);
jurzua
parents:
diff changeset
869
jurzua
parents:
diff changeset
870 rows = query.executeUpdate();
jurzua
parents:
diff changeset
871 session.getTransaction().commit();
jurzua
parents:
diff changeset
872
jurzua
parents:
diff changeset
873 } catch (Exception e) {
jurzua
parents:
diff changeset
874 logger.error(e.getMessage());
jurzua
parents:
diff changeset
875 e.printStackTrace();
jurzua
parents:
diff changeset
876 }
jurzua
parents:
diff changeset
877 return rows;
jurzua
parents:
diff changeset
878 }
jurzua
parents:
diff changeset
879
jurzua
parents:
diff changeset
880 public List<ViewerAttribute> getViewerAttributes(){
jurzua
parents:
diff changeset
881 List<ViewerAttribute> list = new ArrayList<ViewerAttribute>();
jurzua
parents:
diff changeset
882 try {
jurzua
parents:
diff changeset
883 logger.debug("$$$ getViewerAttributes");
jurzua
parents:
diff changeset
884
jurzua
parents:
diff changeset
885 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
886 .getCurrentSession();
jurzua
parents:
diff changeset
887 session.getTransaction().begin();
jurzua
parents:
diff changeset
888 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
889
jurzua
parents:
diff changeset
890 String hql = "from ViewerAttribute";
jurzua
parents:
diff changeset
891 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
892 list = query.list();
jurzua
parents:
diff changeset
893
jurzua
parents:
diff changeset
894 session.getTransaction().commit();
jurzua
parents:
diff changeset
895 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
896 Long diff = end - start;
jurzua
parents:
diff changeset
897 logger.debug("getViewerAttributes - Time execution: " + diff
jurzua
parents:
diff changeset
898 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
899 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
900 } catch (Exception e) {
jurzua
parents:
diff changeset
901 logger.error(e.getMessage());
jurzua
parents:
diff changeset
902 e.printStackTrace();
jurzua
parents:
diff changeset
903 }
jurzua
parents:
diff changeset
904
jurzua
parents:
diff changeset
905 return list;
jurzua
parents:
diff changeset
906 }
jurzua
parents:
diff changeset
907
jurzua
parents:
diff changeset
908 public List<ViewerPage> getViewerPages(){
jurzua
parents:
diff changeset
909 List<ViewerPage> list = new ArrayList<ViewerPage>();
jurzua
parents:
diff changeset
910 try {
jurzua
parents:
diff changeset
911 logger.info("$$$$ getViewerPages");
jurzua
parents:
diff changeset
912
jurzua
parents:
diff changeset
913 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
914 .getCurrentSession();
jurzua
parents:
diff changeset
915 session.getTransaction().begin();
jurzua
parents:
diff changeset
916 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
917
jurzua
parents:
diff changeset
918 String hql = "from ViewerPage";
jurzua
parents:
diff changeset
919 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
920 list = query.list();
jurzua
parents:
diff changeset
921
jurzua
parents:
diff changeset
922 session.getTransaction().commit();
jurzua
parents:
diff changeset
923 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
924 Long diff = end - start;
jurzua
parents:
diff changeset
925 logger.info("getViewerPages - Time execution: " + diff
jurzua
parents:
diff changeset
926 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
927 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
928 } catch (Exception e) {
jurzua
parents:
diff changeset
929 logger.error(e.getMessage());
jurzua
parents:
diff changeset
930 e.printStackTrace();
jurzua
parents:
diff changeset
931 }
jurzua
parents:
diff changeset
932
jurzua
parents:
diff changeset
933 return list;
jurzua
parents:
diff changeset
934 }
jurzua
parents:
diff changeset
935
jurzua
parents:
diff changeset
936 /*
jurzua
parents:
diff changeset
937 * public List<Entity> searchEntityStartingBy(String objectClass,
jurzua
parents:
diff changeset
938 * List<String> ownValueList , int maxResult){ List<Entity> entities = new
jurzua
parents:
diff changeset
939 * ArrayList<Entity>(); try {
jurzua
parents:
diff changeset
940 * logger.debug("### Starting Search Entity Starting by " + ownValueList +
jurzua
parents:
diff changeset
941 * " ###"); Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
942 *
jurzua
parents:
diff changeset
943 * Session session = HibernateUtil.getSessionFactory() .getCurrentSession();
jurzua
parents:
diff changeset
944 * session.getTransaction().begin();
jurzua
parents:
diff changeset
945 *
jurzua
parents:
diff changeset
946 * String hql = "from Entity " + "where " +
jurzua
parents:
diff changeset
947 * "objectClass = :objectClass AND " + "ownValue REGEXP '^[0-9]' AND " +
jurzua
parents:
diff changeset
948 * "systemStatus = :systemStatus ";
jurzua
parents:
diff changeset
949 *
jurzua
parents:
diff changeset
950 *
jurzua
parents:
diff changeset
951 * if(ownValueList.size() > 0){ hql += " AND ( "; } for(int i=0; i <
jurzua
parents:
diff changeset
952 * ownValueList.size(); i++){ if( i > 0) hql += " OR "; hql +=
jurzua
parents:
diff changeset
953 * "ownValue like :ownValue" + i + " "; } if(ownValueList.size() > 0){ hql
jurzua
parents:
diff changeset
954 * += " ) "; } hql += "GROUP by id " + "ORDER by ownValue ";
jurzua
parents:
diff changeset
955 *
jurzua
parents:
diff changeset
956 * Query query = session.createQuery(hql); if(maxResult > 0){
jurzua
parents:
diff changeset
957 * query.setMaxResults(maxResult); } query.setString("systemStatus",
jurzua
parents:
diff changeset
958 * Node.SYS_STATUS_CURRENT_VERSION); query.setString("objectClass",
jurzua
parents:
diff changeset
959 * objectClass);
jurzua
parents:
diff changeset
960 *
jurzua
parents:
diff changeset
961 * for(int i=0; i < ownValueList.size(); i++){ query.setString("ownValue" +
jurzua
parents:
diff changeset
962 * i, ownValueList.get(i)); }
jurzua
parents:
diff changeset
963 *
jurzua
parents:
diff changeset
964 * entities = query.list();
jurzua
parents:
diff changeset
965 *
jurzua
parents:
diff changeset
966 * Long end = System.currentTimeMillis(); Long diff = end - start;
jurzua
parents:
diff changeset
967 * logger.info("Search Entity Starting By - Time execution: " + diff
jurzua
parents:
diff changeset
968 * / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000) + "[min] " + diff /
jurzua
parents:
diff changeset
969 * 1000 + "[sec]");
jurzua
parents:
diff changeset
970 *
jurzua
parents:
diff changeset
971 * session.getTransaction().commit(); } catch (Exception e) {
jurzua
parents:
diff changeset
972 * logger.error(e.getMessage()); e.printStackTrace(); } return entities; }
jurzua
parents:
diff changeset
973 */
jurzua
parents:
diff changeset
974
jurzua
parents:
diff changeset
975 /**
jurzua
parents:
diff changeset
976 * <p>
jurzua
parents:
diff changeset
977 * This method returns a list of entities with same attributes and same own
jurzua
parents:
diff changeset
978 * value than the given entity
jurzua
parents:
diff changeset
979 * </p>
jurzua
parents:
diff changeset
980 *
jurzua
parents:
diff changeset
981 * @param entity
jurzua
parents:
diff changeset
982 * @param substring
jurzua
parents:
diff changeset
983 * @param maxResults
jurzua
parents:
diff changeset
984 * @return
jurzua
parents:
diff changeset
985 */
jurzua
parents:
diff changeset
986 public List<Entity> searchEntity(Entity entity, boolean substring,
jurzua
parents:
diff changeset
987 int maxResult) {
jurzua
parents:
diff changeset
988 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
989 try {
jurzua
parents:
diff changeset
990 logger.debug("### Starting Search Entity ###");
jurzua
parents:
diff changeset
991 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
992 .getCurrentSession();
jurzua
parents:
diff changeset
993 session.getTransaction().begin();
jurzua
parents:
diff changeset
994 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
995
jurzua
parents:
diff changeset
996 String div = (substring) ? " like " : " = ";
jurzua
parents:
diff changeset
997
jurzua
parents:
diff changeset
998 String hql = "from Entity ent ";
jurzua
parents:
diff changeset
999
jurzua
parents:
diff changeset
1000 for (int i = 0; i < entity.getAttributes().size(); i++) {
jurzua
parents:
diff changeset
1001 hql += ", Attribute att" + i + " ";
jurzua
parents:
diff changeset
1002 }
jurzua
parents:
diff changeset
1003
jurzua
parents:
diff changeset
1004 hql += " where " + "ent.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1005 + "ent.objectClass = :objectClass AND " + "ent.ownValue "
jurzua
parents:
diff changeset
1006 + div + " :ownValue ";
jurzua
parents:
diff changeset
1007
jurzua
parents:
diff changeset
1008 if (entity.getAttributes().size() > 0)
jurzua
parents:
diff changeset
1009 hql += "AND ";
jurzua
parents:
diff changeset
1010
jurzua
parents:
diff changeset
1011 for (int i = 0; i < entity.getAttributes().size(); i++) {
jurzua
parents:
diff changeset
1012 hql += "att" + i + ".systemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
1013 hql += "att" + i + ".sourceId = ent.id AND ";
jurzua
parents:
diff changeset
1014 hql += "att" + i + ".objectClass = :objectClass" + i + " AND ";
jurzua
parents:
diff changeset
1015 hql += "att" + i + ".ownValue " + div + " :ownValue" + i + " ";
jurzua
parents:
diff changeset
1016 if (i < (entity.getAttributes().size() - 1))
jurzua
parents:
diff changeset
1017 hql += "AND ";
jurzua
parents:
diff changeset
1018 }
jurzua
parents:
diff changeset
1019 hql += " GROUP by ent.id";
jurzua
parents:
diff changeset
1020
jurzua
parents:
diff changeset
1021 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1022 if (maxResult > 0) {
jurzua
parents:
diff changeset
1023 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1024 }
jurzua
parents:
diff changeset
1025 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1026 query.setString("objectClass", entity.getObjectClass());
jurzua
parents:
diff changeset
1027 query.setString(
jurzua
parents:
diff changeset
1028 "ownValue",
jurzua
parents:
diff changeset
1029 (substring) ? "%" + entity.getOwnValue() + "%" : entity
jurzua
parents:
diff changeset
1030 .getOwnValue());
jurzua
parents:
diff changeset
1031
jurzua
parents:
diff changeset
1032 int i = 0;
jurzua
parents:
diff changeset
1033 for (Attribute att : entity.getAttributes()) {
jurzua
parents:
diff changeset
1034 query.setString("objectClass" + i, att.getObjectClass());
jurzua
parents:
diff changeset
1035 query.setString(
jurzua
parents:
diff changeset
1036 "ownValue" + i,
jurzua
parents:
diff changeset
1037 (substring) ? "%" + att.getOwnValue() + "%" : att
jurzua
parents:
diff changeset
1038 .getOwnValue());
jurzua
parents:
diff changeset
1039 i++;
jurzua
parents:
diff changeset
1040 }
jurzua
parents:
diff changeset
1041
jurzua
parents:
diff changeset
1042 List<Object> list = query.list();
jurzua
parents:
diff changeset
1043
jurzua
parents:
diff changeset
1044 for (Object o : list) {
jurzua
parents:
diff changeset
1045 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1046 if (array.length > 0) {
jurzua
parents:
diff changeset
1047 Entity ent = (Entity) array[0];
jurzua
parents:
diff changeset
1048 ent.setLightweight(true);
jurzua
parents:
diff changeset
1049 entities.add(ent);
jurzua
parents:
diff changeset
1050 }
jurzua
parents:
diff changeset
1051 }
jurzua
parents:
diff changeset
1052
jurzua
parents:
diff changeset
1053 session.getTransaction().commit();
jurzua
parents:
diff changeset
1054 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
1055 Long diff = end - start;
jurzua
parents:
diff changeset
1056 logger.info("Search Entity - Time execution: " + diff
jurzua
parents:
diff changeset
1057 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
1058 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
1059
jurzua
parents:
diff changeset
1060 } catch (Exception e) {
jurzua
parents:
diff changeset
1061 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1062 e.printStackTrace();
jurzua
parents:
diff changeset
1063 }
jurzua
parents:
diff changeset
1064 return entities;
jurzua
parents:
diff changeset
1065 }
jurzua
parents:
diff changeset
1066
jurzua
parents:
diff changeset
1067 public List<Entity> searchEntity(String objectClass, String ownValue,
jurzua
parents:
diff changeset
1068 int maxResult) {
jurzua
parents:
diff changeset
1069 try {
jurzua
parents:
diff changeset
1070 logger.info("### Starting Search Entity ###");
jurzua
parents:
diff changeset
1071 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1072 .getCurrentSession();
jurzua
parents:
diff changeset
1073 session.getTransaction().begin();
jurzua
parents:
diff changeset
1074 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1075
jurzua
parents:
diff changeset
1076 String hql = "from Entity " + "where "
jurzua
parents:
diff changeset
1077 + "systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1078 + "objectClass like :objectClass ";
jurzua
parents:
diff changeset
1079
jurzua
parents:
diff changeset
1080 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1081 hql += "AND ownValue like :ownValue ";
jurzua
parents:
diff changeset
1082 }
jurzua
parents:
diff changeset
1083
jurzua
parents:
diff changeset
1084 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1085 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1086 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1087 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1088 query.setString("ownValue", "%" + ownValue + "%");
jurzua
parents:
diff changeset
1089 }
jurzua
parents:
diff changeset
1090
jurzua
parents:
diff changeset
1091 if (maxResult > 0) {
jurzua
parents:
diff changeset
1092 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1093 }
jurzua
parents:
diff changeset
1094
jurzua
parents:
diff changeset
1095 List<Entity> list = query.list();
jurzua
parents:
diff changeset
1096
jurzua
parents:
diff changeset
1097 session.getTransaction().commit();
jurzua
parents:
diff changeset
1098 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
1099 Long diff = end - start;
jurzua
parents:
diff changeset
1100 logger.info("Search Entity - Time execution: " + diff
jurzua
parents:
diff changeset
1101 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
1102 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
1103 return list;
jurzua
parents:
diff changeset
1104 } catch (Exception e) {
jurzua
parents:
diff changeset
1105 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1106 e.printStackTrace();
jurzua
parents:
diff changeset
1107 }
jurzua
parents:
diff changeset
1108 return null;
jurzua
parents:
diff changeset
1109 }
jurzua
parents:
diff changeset
1110
jurzua
parents:
diff changeset
1111 public List<Attribute> getAttributeByDefByName(String def, String name,
jurzua
parents:
diff changeset
1112 int maxResults) {
jurzua
parents:
diff changeset
1113 List<Attribute> list = null;
jurzua
parents:
diff changeset
1114 try {
jurzua
parents:
diff changeset
1115 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1116 .getCurrentSession();
jurzua
parents:
diff changeset
1117 session.getTransaction().begin();
jurzua
parents:
diff changeset
1118
jurzua
parents:
diff changeset
1119 String hql = "from Attribute " + "where "
jurzua
parents:
diff changeset
1120 + "objectClass = :name AND "
jurzua
parents:
diff changeset
1121 + "systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1122 + "sourceObjectClass = :sourceObjectClass ";
jurzua
parents:
diff changeset
1123
jurzua
parents:
diff changeset
1124 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1125 query.setString("name", name);
jurzua
parents:
diff changeset
1126 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1127 query.setString("sourceObjectClass", def);
jurzua
parents:
diff changeset
1128 if (maxResults > 0) {
jurzua
parents:
diff changeset
1129 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1130 }
jurzua
parents:
diff changeset
1131
jurzua
parents:
diff changeset
1132 list = query.list();
jurzua
parents:
diff changeset
1133
jurzua
parents:
diff changeset
1134 session.getTransaction().commit();
jurzua
parents:
diff changeset
1135 } catch (Exception e) {
jurzua
parents:
diff changeset
1136 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1137 e.printStackTrace();
jurzua
parents:
diff changeset
1138 }
jurzua
parents:
diff changeset
1139 return list;
jurzua
parents:
diff changeset
1140 }
jurzua
parents:
diff changeset
1141
jurzua
parents:
diff changeset
1142 /**
jurzua
parents:
diff changeset
1143 * Returns an attribute directly from the DB no implemented yet!
jurzua
parents:
diff changeset
1144 *
jurzua
parents:
diff changeset
1145 * @param entity
jurzua
parents:
diff changeset
1146 * @param name
jurzua
parents:
diff changeset
1147 * @return
jurzua
parents:
diff changeset
1148 */
jurzua
parents:
diff changeset
1149 public Attribute getAttributeByName(Entity entity, String name) {
jurzua
parents:
diff changeset
1150 Attribute att = null;
jurzua
parents:
diff changeset
1151 try {
jurzua
parents:
diff changeset
1152 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1153 .getCurrentSession();
jurzua
parents:
diff changeset
1154 session.getTransaction().begin();
jurzua
parents:
diff changeset
1155
jurzua
parents:
diff changeset
1156 String hql = "from Attribute " + "where "
jurzua
parents:
diff changeset
1157 + "objectClass = :name AND "
jurzua
parents:
diff changeset
1158 + "systemStatus = :systemStatus AND " + "sourceId = :id ";
jurzua
parents:
diff changeset
1159
jurzua
parents:
diff changeset
1160 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1161 query.setMaxResults(1);
jurzua
parents:
diff changeset
1162 query.setString("name", name);
jurzua
parents:
diff changeset
1163 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1164 query.setLong("id", entity.getId());
jurzua
parents:
diff changeset
1165
jurzua
parents:
diff changeset
1166 List<Attribute> list = query.list();
jurzua
parents:
diff changeset
1167 if (list.size() > 0) {
jurzua
parents:
diff changeset
1168 att = (Attribute) list.get(0);
jurzua
parents:
diff changeset
1169 }
jurzua
parents:
diff changeset
1170
jurzua
parents:
diff changeset
1171 session.getTransaction().commit();
jurzua
parents:
diff changeset
1172 } catch (Exception e) {
jurzua
parents:
diff changeset
1173 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1174 e.printStackTrace();
jurzua
parents:
diff changeset
1175 }
jurzua
parents:
diff changeset
1176 return att;
jurzua
parents:
diff changeset
1177 }
jurzua
parents:
diff changeset
1178
jurzua
parents:
diff changeset
1179 public List<Attribute> getAllAttributesJDBC(Long entId, int maxResult) {
jurzua
parents:
diff changeset
1180 List<Attribute> atts = null;
jurzua
parents:
diff changeset
1181 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1182 try {
jurzua
parents:
diff changeset
1183 Connection conn = JDBCUtils.getConn();
jurzua
parents:
diff changeset
1184
jurzua
parents:
diff changeset
1185 String sql = "select * from node " + "where "
jurzua
parents:
diff changeset
1186 + "system_status = '" + Node.SYS_STATUS_CURRENT_VERSION
jurzua
parents:
diff changeset
1187 + "' AND " + "source_id = '" + entId + "' "
jurzua
parents:
diff changeset
1188 + "order by object_class";
jurzua
parents:
diff changeset
1189
jurzua
parents:
diff changeset
1190 if (maxResult > 0) {
jurzua
parents:
diff changeset
1191 // query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1192 }
jurzua
parents:
diff changeset
1193
jurzua
parents:
diff changeset
1194 Statement st = conn.createStatement();
jurzua
parents:
diff changeset
1195 ResultSet rs = st.executeQuery(sql);
jurzua
parents:
diff changeset
1196 atts = JDBCUtils.rs2Atts(rs);
jurzua
parents:
diff changeset
1197
jurzua
parents:
diff changeset
1198 conn.close();
jurzua
parents:
diff changeset
1199 } catch (Exception e) {
jurzua
parents:
diff changeset
1200 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1201 e.printStackTrace();
jurzua
parents:
diff changeset
1202 }
jurzua
parents:
diff changeset
1203
jurzua
parents:
diff changeset
1204 logger.debug("getAllAttributes JDBC - execution time[ms]: "
jurzua
parents:
diff changeset
1205 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
1206 return atts;
jurzua
parents:
diff changeset
1207 }
jurzua
parents:
diff changeset
1208
jurzua
parents:
diff changeset
1209 /**
jurzua
parents:
diff changeset
1210 * Returns a list of all attribute for an entity directly from the DB no
jurzua
parents:
diff changeset
1211 * implemented yet!
jurzua
parents:
diff changeset
1212 *
jurzua
parents:
diff changeset
1213 * @param entity
jurzua
parents:
diff changeset
1214 * @param name
jurzua
parents:
diff changeset
1215 * @return
jurzua
parents:
diff changeset
1216 */
jurzua
parents:
diff changeset
1217 public List<Attribute> getAllAttributes(Long entId, int maxResult) {
jurzua
parents:
diff changeset
1218 List<Attribute> atts = null;
jurzua
parents:
diff changeset
1219 long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1220 try {
jurzua
parents:
diff changeset
1221 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1222 .getCurrentSession();
jurzua
parents:
diff changeset
1223 session.getTransaction().begin();
jurzua
parents:
diff changeset
1224
jurzua
parents:
diff changeset
1225 String hql = "from Attribute " + "where "
jurzua
parents:
diff changeset
1226 + "systemStatus = :systemStatus AND " + "sourceId = :id "
jurzua
parents:
diff changeset
1227 + "order by objectClass";
jurzua
parents:
diff changeset
1228
jurzua
parents:
diff changeset
1229 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1230 if (maxResult > 0) {
jurzua
parents:
diff changeset
1231 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1232 }
jurzua
parents:
diff changeset
1233 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1234 query.setLong("id", entId);
jurzua
parents:
diff changeset
1235
jurzua
parents:
diff changeset
1236 atts = query.list();
jurzua
parents:
diff changeset
1237
jurzua
parents:
diff changeset
1238 session.getTransaction().commit();
jurzua
parents:
diff changeset
1239
jurzua
parents:
diff changeset
1240 } catch (Exception e) {
jurzua
parents:
diff changeset
1241 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
1242 e.printStackTrace();
jurzua
parents:
diff changeset
1243 }
jurzua
parents:
diff changeset
1244 logger.debug("getAllAttributes - execution time[ms]: "
jurzua
parents:
diff changeset
1245 + (System.currentTimeMillis() - start));
jurzua
parents:
diff changeset
1246 return atts;
jurzua
parents:
diff changeset
1247 }
jurzua
parents:
diff changeset
1248
jurzua
parents:
diff changeset
1249 /**
jurzua
parents:
diff changeset
1250 * Here the entities can more than one time in the result set.
jurzua
parents:
diff changeset
1251 *
jurzua
parents:
diff changeset
1252 * @param filters
jurzua
parents:
diff changeset
1253 * @param maxResult
jurzua
parents:
diff changeset
1254 * @return
jurzua
parents:
diff changeset
1255 */
jurzua
parents:
diff changeset
1256 public Map<Attribute, Entity> searchAttEntityByAttributeFilter(
jurzua
parents:
diff changeset
1257 List<AttributeFilter> filters, int maxResult) {
jurzua
parents:
diff changeset
1258 Map<Attribute, Entity> result = new HashMap<Attribute, Entity>();
jurzua
parents:
diff changeset
1259 try {
jurzua
parents:
diff changeset
1260 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1261 .getCurrentSession();
jurzua
parents:
diff changeset
1262 session.getTransaction().begin();
jurzua
parents:
diff changeset
1263
jurzua
parents:
diff changeset
1264 String hql = "from Entity as ent, Attribute as att " + "where "
jurzua
parents:
diff changeset
1265 + "att.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1266 + "ent.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1267 + "ent.id = att.sourceId AND (";
jurzua
parents:
diff changeset
1268
jurzua
parents:
diff changeset
1269 int count = 0;
jurzua
parents:
diff changeset
1270 for (AttributeFilter filter : filters) {
jurzua
parents:
diff changeset
1271 hql += " ( ";
jurzua
parents:
diff changeset
1272 if (StringUtils.isNotEmpty(filter.getEntObjectClass())) {
jurzua
parents:
diff changeset
1273 hql += "att.sourceObjectClass = :sourceObjectClass" + count
jurzua
parents:
diff changeset
1274 + " ";
jurzua
parents:
diff changeset
1275 if (StringUtils.isNotEmpty(filter.getName())
jurzua
parents:
diff changeset
1276 || StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1277 hql += " AND ";
jurzua
parents:
diff changeset
1278 }
jurzua
parents:
diff changeset
1279 if (StringUtils.isNotEmpty(filter.getName())) {
jurzua
parents:
diff changeset
1280 hql += "att.objectClass = :name" + count + " ";
jurzua
parents:
diff changeset
1281 if (StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1282 hql += " AND ";
jurzua
parents:
diff changeset
1283 }
jurzua
parents:
diff changeset
1284 if (StringUtils.isNotEmpty(filter.getOwnValue())) {
jurzua
parents:
diff changeset
1285 if (filter.isNormalize()) {
jurzua
parents:
diff changeset
1286 hql += "att.normalizedOwnValue like :ownValue" + count
jurzua
parents:
diff changeset
1287 + " ";
jurzua
parents:
diff changeset
1288 } else {
jurzua
parents:
diff changeset
1289 hql += "att.ownValue like :ownValue" + count + " ";
jurzua
parents:
diff changeset
1290 }
jurzua
parents:
diff changeset
1291 }
jurzua
parents:
diff changeset
1292
jurzua
parents:
diff changeset
1293 hql += " ) ";
jurzua
parents:
diff changeset
1294 count++;
jurzua
parents:
diff changeset
1295 if (filters.size() > count)
jurzua
parents:
diff changeset
1296 hql += " OR ";
jurzua
parents:
diff changeset
1297 }
jurzua
parents:
diff changeset
1298
jurzua
parents:
diff changeset
1299 hql += " ) group by att.id ";
jurzua
parents:
diff changeset
1300 // I removed this line because the buffer of MyISAM is to
jurzua
parents:
diff changeset
1301 // small and it could be a reason to return lesser rows. I hope so!
jurzua
parents:
diff changeset
1302 // order by ent.ownValue
jurzua
parents:
diff changeset
1303
jurzua
parents:
diff changeset
1304 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1305 if (maxResult > 0)
jurzua
parents:
diff changeset
1306 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1307 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1308
jurzua
parents:
diff changeset
1309 count = 0;
jurzua
parents:
diff changeset
1310 for (AttributeFilter filter : filters) {
jurzua
parents:
diff changeset
1311 if (StringUtils.isNotEmpty(filter.getName()))
jurzua
parents:
diff changeset
1312 query.setString("name" + count, filter.getName());
jurzua
parents:
diff changeset
1313 if (StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1314 query.setString("ownValue" + count,
jurzua
parents:
diff changeset
1315 "%" + filter.getOwnValue() + "%");
jurzua
parents:
diff changeset
1316 if (StringUtils.isNotEmpty(filter.getEntObjectClass()))
jurzua
parents:
diff changeset
1317 query.setString("sourceObjectClass" + count,
jurzua
parents:
diff changeset
1318 filter.getEntObjectClass());
jurzua
parents:
diff changeset
1319 count++;
jurzua
parents:
diff changeset
1320 }
jurzua
parents:
diff changeset
1321
jurzua
parents:
diff changeset
1322 List<Object> listO = query.list();
jurzua
parents:
diff changeset
1323 for (Object o : listO) {
jurzua
parents:
diff changeset
1324 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1325 if (array.length > 1) {
jurzua
parents:
diff changeset
1326 Entity ent = (Entity) array[0];
jurzua
parents:
diff changeset
1327 ent.setLightweight(true);
jurzua
parents:
diff changeset
1328 Attribute att = (Attribute) array[1];
jurzua
parents:
diff changeset
1329 result.put(att, ent);
jurzua
parents:
diff changeset
1330 }
jurzua
parents:
diff changeset
1331 }
jurzua
parents:
diff changeset
1332
jurzua
parents:
diff changeset
1333 session.getTransaction().commit();
jurzua
parents:
diff changeset
1334 } catch (Exception e) {
jurzua
parents:
diff changeset
1335 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1336 e.printStackTrace();
jurzua
parents:
diff changeset
1337 }
jurzua
parents:
diff changeset
1338 return result;
jurzua
parents:
diff changeset
1339 }
jurzua
parents:
diff changeset
1340
jurzua
parents:
diff changeset
1341 /**
jurzua
parents:
diff changeset
1342 * here the entities not repeated
jurzua
parents:
diff changeset
1343 *
jurzua
parents:
diff changeset
1344 * @param filters
jurzua
parents:
diff changeset
1345 * @param maxResult
jurzua
parents:
diff changeset
1346 * @return
jurzua
parents:
diff changeset
1347 */
jurzua
parents:
diff changeset
1348 public Map<Entity, Attribute> searchEntityByAttributeFilter(
jurzua
parents:
diff changeset
1349 List<AttributeFilter> filters, int maxResult) {
jurzua
parents:
diff changeset
1350 Map<Entity, Attribute> result = new HashMap<Entity, Attribute>();
jurzua
parents:
diff changeset
1351 try {
jurzua
parents:
diff changeset
1352 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1353 .getCurrentSession();
jurzua
parents:
diff changeset
1354 session.getTransaction().begin();
jurzua
parents:
diff changeset
1355
22
165b1efb85cd remove group-by clause for attribute search filter because it gave hibernate errors :-(
casties
parents: 1
diff changeset
1356 String hql = "FROM Entity AS ent, Attribute AS att "
165b1efb85cd remove group-by clause for attribute search filter because it gave hibernate errors :-(
casties
parents: 1
diff changeset
1357 + "WHERE "
1
jurzua
parents:
diff changeset
1358 + "att.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1359 + "ent.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1360 + "ent.id = att.sourceId AND (";
jurzua
parents:
diff changeset
1361
jurzua
parents:
diff changeset
1362 int count = 0;
jurzua
parents:
diff changeset
1363 for (AttributeFilter filter : filters) {
jurzua
parents:
diff changeset
1364 hql += " ( ";
jurzua
parents:
diff changeset
1365 if (StringUtils.isNotEmpty(filter.getEntObjectClass())) {
jurzua
parents:
diff changeset
1366 hql += "att.sourceObjectClass = :sourceObjectClass" + count
jurzua
parents:
diff changeset
1367 + " ";
jurzua
parents:
diff changeset
1368 if (StringUtils.isNotEmpty(filter.getName())
jurzua
parents:
diff changeset
1369 || StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1370 hql += " AND ";
jurzua
parents:
diff changeset
1371 }
jurzua
parents:
diff changeset
1372 if (StringUtils.isNotEmpty(filter.getName())) {
jurzua
parents:
diff changeset
1373 hql += "att.objectClass = :name" + count + " ";
jurzua
parents:
diff changeset
1374 if (StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1375 hql += " AND ";
jurzua
parents:
diff changeset
1376 }
jurzua
parents:
diff changeset
1377 if (StringUtils.isNotEmpty(filter.getOwnValue())) {
jurzua
parents:
diff changeset
1378 if (filter.isNormalize()) {
jurzua
parents:
diff changeset
1379 hql += "att.normalizedOwnValue like :ownValue" + count
jurzua
parents:
diff changeset
1380 + " ";
jurzua
parents:
diff changeset
1381 } else {
jurzua
parents:
diff changeset
1382 hql += "att.ownValue like :ownValue" + count + " ";
jurzua
parents:
diff changeset
1383 }
jurzua
parents:
diff changeset
1384 }
jurzua
parents:
diff changeset
1385
jurzua
parents:
diff changeset
1386 hql += " ) ";
jurzua
parents:
diff changeset
1387 count++;
jurzua
parents:
diff changeset
1388 if (filters.size() > count)
jurzua
parents:
diff changeset
1389 hql += " OR ";
jurzua
parents:
diff changeset
1390 }
jurzua
parents:
diff changeset
1391
26
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
1392 /* ROC: led to hibernate errors */
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
1393 hql += " ) group by att.sourceId order by ent.ownValue";
5e24413d355b Fixed bug that deleted all attributes in the system if a relation had id=null :-(
Robert Casties <casties@mpiwg-berlin.mpg.de>
parents: 22
diff changeset
1394 // hql += " ) order by ent.ownValue";
1
jurzua
parents:
diff changeset
1395
jurzua
parents:
diff changeset
1396 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1397 if (maxResult > 0)
jurzua
parents:
diff changeset
1398 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1399 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1400
jurzua
parents:
diff changeset
1401 count = 0;
jurzua
parents:
diff changeset
1402 for (AttributeFilter filter : filters) {
jurzua
parents:
diff changeset
1403 if (StringUtils.isNotEmpty(filter.getName()))
jurzua
parents:
diff changeset
1404 query.setString("name" + count, filter.getName());
jurzua
parents:
diff changeset
1405 if (StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1406 query.setString("ownValue" + count,
jurzua
parents:
diff changeset
1407 "%" + filter.getOwnValue() + "%");
jurzua
parents:
diff changeset
1408 if (StringUtils.isNotEmpty(filter.getEntObjectClass()))
jurzua
parents:
diff changeset
1409 query.setString("sourceObjectClass" + count,
jurzua
parents:
diff changeset
1410 filter.getEntObjectClass());
jurzua
parents:
diff changeset
1411 count++;
jurzua
parents:
diff changeset
1412 }
jurzua
parents:
diff changeset
1413
jurzua
parents:
diff changeset
1414 List<Object> listO = query.list();
jurzua
parents:
diff changeset
1415 for (Object o : listO) {
jurzua
parents:
diff changeset
1416 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1417 if (array.length > 1) {
jurzua
parents:
diff changeset
1418 Entity ent = (Entity) array[0];
jurzua
parents:
diff changeset
1419 ent.setLightweight(true);
jurzua
parents:
diff changeset
1420 Attribute att = (Attribute) array[1];
jurzua
parents:
diff changeset
1421 result.put(ent, att);
jurzua
parents:
diff changeset
1422 }
jurzua
parents:
diff changeset
1423 }
jurzua
parents:
diff changeset
1424
jurzua
parents:
diff changeset
1425 session.getTransaction().commit();
jurzua
parents:
diff changeset
1426 } catch (Exception e) {
jurzua
parents:
diff changeset
1427 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1428 e.printStackTrace();
jurzua
parents:
diff changeset
1429 }
jurzua
parents:
diff changeset
1430 return result;
jurzua
parents:
diff changeset
1431 }
jurzua
parents:
diff changeset
1432
jurzua
parents:
diff changeset
1433 /**
jurzua
parents:
diff changeset
1434 *
jurzua
parents:
diff changeset
1435 * @param filters
jurzua
parents:
diff changeset
1436 * @param maxResults
jurzua
parents:
diff changeset
1437 * @return
jurzua
parents:
diff changeset
1438 */
jurzua
parents:
diff changeset
1439 public List<Attribute> searchAttribute(List<AttributeFilter> filters,
jurzua
parents:
diff changeset
1440 int maxResult) {
jurzua
parents:
diff changeset
1441 try {
jurzua
parents:
diff changeset
1442 // logger.info("");
jurzua
parents:
diff changeset
1443 // logger.info("### Starting Search Attribute [entObjClass="+entObjClass+", name="+name+", ownValue="+ownValue+", contentType="+contentType+"]###");
jurzua
parents:
diff changeset
1444 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1445 .getCurrentSession();
jurzua
parents:
diff changeset
1446 session.getTransaction().begin();
jurzua
parents:
diff changeset
1447 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1448
jurzua
parents:
diff changeset
1449 String hql = "from Attribute " + "where "
jurzua
parents:
diff changeset
1450 + "systemStatus = :systemStatus AND (";
jurzua
parents:
diff changeset
1451
jurzua
parents:
diff changeset
1452 int count = 0;
jurzua
parents:
diff changeset
1453 for (AttributeFilter filter : filters) {
jurzua
parents:
diff changeset
1454 hql += " ( ";
jurzua
parents:
diff changeset
1455 if (StringUtils.isNotEmpty(filter.getEntObjectClass())) {
jurzua
parents:
diff changeset
1456 hql += "sourceObjectClass = :sourceObjectClass" + count
jurzua
parents:
diff changeset
1457 + " ";
jurzua
parents:
diff changeset
1458 if (StringUtils.isNotEmpty(filter.getName())
jurzua
parents:
diff changeset
1459 || StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1460 hql += " AND ";
jurzua
parents:
diff changeset
1461 }
jurzua
parents:
diff changeset
1462 if (StringUtils.isNotEmpty(filter.getName())) {
jurzua
parents:
diff changeset
1463 hql += "objectClass like :name" + count + " ";
jurzua
parents:
diff changeset
1464 if (StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1465 hql += " AND ";
jurzua
parents:
diff changeset
1466 }
jurzua
parents:
diff changeset
1467 if (StringUtils.isNotEmpty(filter.getOwnValue())) {
jurzua
parents:
diff changeset
1468 if (filter.isNormalize()) {
jurzua
parents:
diff changeset
1469 hql += "normalizedOwnValue like :ownValue" + count
jurzua
parents:
diff changeset
1470 + " ";
jurzua
parents:
diff changeset
1471 } else {
jurzua
parents:
diff changeset
1472 hql += "ownValue like :ownValue" + count + " ";
jurzua
parents:
diff changeset
1473 }
jurzua
parents:
diff changeset
1474 }
jurzua
parents:
diff changeset
1475
jurzua
parents:
diff changeset
1476 hql += " ) ";
jurzua
parents:
diff changeset
1477 count++;
jurzua
parents:
diff changeset
1478 if (filters.size() > count)
jurzua
parents:
diff changeset
1479 hql += " OR ";
jurzua
parents:
diff changeset
1480 }
jurzua
parents:
diff changeset
1481
jurzua
parents:
diff changeset
1482 hql += " ) group by sourceId";
jurzua
parents:
diff changeset
1483
jurzua
parents:
diff changeset
1484 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1485 if (maxResult > 0)
jurzua
parents:
diff changeset
1486 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1487 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1488
jurzua
parents:
diff changeset
1489 count = 0;
jurzua
parents:
diff changeset
1490 for (AttributeFilter filter : filters) {
jurzua
parents:
diff changeset
1491 if (StringUtils.isNotEmpty(filter.getName()))
jurzua
parents:
diff changeset
1492 query.setString("name" + count, filter.getName() + "%");
jurzua
parents:
diff changeset
1493 if (StringUtils.isNotEmpty(filter.getOwnValue()))
jurzua
parents:
diff changeset
1494 query.setString("ownValue" + count,
jurzua
parents:
diff changeset
1495 "%" + filter.getOwnValue() + "%");
jurzua
parents:
diff changeset
1496 if (StringUtils.isNotEmpty(filter.getEntObjectClass()))
jurzua
parents:
diff changeset
1497 query.setString("sourceObjectClass" + count,
jurzua
parents:
diff changeset
1498 filter.getEntObjectClass());
jurzua
parents:
diff changeset
1499 count++;
jurzua
parents:
diff changeset
1500 }
jurzua
parents:
diff changeset
1501
jurzua
parents:
diff changeset
1502 List<Attribute> list = query.list();
jurzua
parents:
diff changeset
1503
jurzua
parents:
diff changeset
1504 session.getTransaction().commit();
jurzua
parents:
diff changeset
1505 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
1506 Long diff = end - start;
jurzua
parents:
diff changeset
1507 logger.info("Found " + list.size() + " elements");
jurzua
parents:
diff changeset
1508 logger.info("Search Attribute - Time execution: " + diff
jurzua
parents:
diff changeset
1509 / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
1510 + "[min] " + diff / 1000 + "[sec]\n");
jurzua
parents:
diff changeset
1511 return list;
jurzua
parents:
diff changeset
1512 } catch (Exception e) {
jurzua
parents:
diff changeset
1513 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1514 e.printStackTrace();
jurzua
parents:
diff changeset
1515 }
jurzua
parents:
diff changeset
1516 return null;
jurzua
parents:
diff changeset
1517 }
jurzua
parents:
diff changeset
1518
jurzua
parents:
diff changeset
1519 /**
jurzua
parents:
diff changeset
1520 * <p>
jurzua
parents:
diff changeset
1521 * Returns only an attribute searched by its name, its value and by an
jurzua
parents:
diff changeset
1522 * attribute which belong to the same entity
jurzua
parents:
diff changeset
1523 * </p>
jurzua
parents:
diff changeset
1524 * <p>
jurzua
parents:
diff changeset
1525 * For example to find all Country by which contains in its value "Germa"
jurzua
parents:
diff changeset
1526 * the input should be so:
jurzua
parents:
diff changeset
1527 * </p>
jurzua
parents:
diff changeset
1528 * <p>
jurzua
parents:
diff changeset
1529 * firstName = "name" firstValue = "Germ" secondName = "type" secondValue =
jurzua
parents:
diff changeset
1530 * "country" internally both attributes are binding by the unique entity of
jurzua
parents:
diff changeset
1531 * type "PLACE". Only the attribute of the first-name and -value will be
jurzua
parents:
diff changeset
1532 * returned.
jurzua
parents:
diff changeset
1533 * </p>
jurzua
parents:
diff changeset
1534 *
jurzua
parents:
diff changeset
1535 * @param name
jurzua
parents:
diff changeset
1536 * @param ownValue
jurzua
parents:
diff changeset
1537 * @param entObjClass
jurzua
parents:
diff changeset
1538 * @param maxResults
jurzua
parents:
diff changeset
1539 * @return
jurzua
parents:
diff changeset
1540 */
jurzua
parents:
diff changeset
1541 public List<Attribute> searchAttribute(String firstName, String firstValue,
jurzua
parents:
diff changeset
1542 String secondName, String secondValue, String entObjClass,
jurzua
parents:
diff changeset
1543 int maxResults) {
jurzua
parents:
diff changeset
1544 List<Attribute> list = new ArrayList<Attribute>();
jurzua
parents:
diff changeset
1545 Session session = null;
jurzua
parents:
diff changeset
1546 try {
jurzua
parents:
diff changeset
1547 logger.info("Starting Search Attribute " + "[entObjClass="
jurzua
parents:
diff changeset
1548 + entObjClass + ", firstName=" + firstName
jurzua
parents:
diff changeset
1549 + ", firstValue=" + firstValue + ", secondName="
jurzua
parents:
diff changeset
1550 + secondName + ", secondValue=" + secondValue + "]");
jurzua
parents:
diff changeset
1551
jurzua
parents:
diff changeset
1552 session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1553 session.getTransaction().begin();
jurzua
parents:
diff changeset
1554 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1555
jurzua
parents:
diff changeset
1556 String hql = "from Attribute as a1, Attribute as a2 " + "where "
jurzua
parents:
diff changeset
1557
jurzua
parents:
diff changeset
1558 + "a1.sourceId = a2.sourceId AND "
jurzua
parents:
diff changeset
1559
jurzua
parents:
diff changeset
1560 + "a1.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1561 + "a2.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1562
jurzua
parents:
diff changeset
1563 + "a1.objectClass like :firstName AND "
jurzua
parents:
diff changeset
1564 + "a2.objectClass like :secondName AND "
jurzua
parents:
diff changeset
1565
jurzua
parents:
diff changeset
1566 + "a1.ownValue like :firstValue AND "
jurzua
parents:
diff changeset
1567 + "a2.ownValue like :secondValue AND "
jurzua
parents:
diff changeset
1568
jurzua
parents:
diff changeset
1569 + "a1.sourceObjectClass = :entObjClass AND "
jurzua
parents:
diff changeset
1570 + "a2.sourceObjectClass = :entObjClass ";
jurzua
parents:
diff changeset
1571
jurzua
parents:
diff changeset
1572 hql += "group by a1.sourceId ";
jurzua
parents:
diff changeset
1573
jurzua
parents:
diff changeset
1574 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1575 query.setString("firstName", "%" + firstName + "%");
jurzua
parents:
diff changeset
1576 query.setString("firstValue", "%" + firstValue + "%");
jurzua
parents:
diff changeset
1577 query.setString("secondName", "%" + secondName + "%");
jurzua
parents:
diff changeset
1578 query.setString("secondValue", "%" + secondValue + "%");
jurzua
parents:
diff changeset
1579 query.setString("entObjClass", entObjClass);
jurzua
parents:
diff changeset
1580 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1581 if (maxResults > 0) {
jurzua
parents:
diff changeset
1582 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1583 }
jurzua
parents:
diff changeset
1584
jurzua
parents:
diff changeset
1585 List<Object> listO = query.list();
jurzua
parents:
diff changeset
1586
jurzua
parents:
diff changeset
1587 for (Object o : listO) {
jurzua
parents:
diff changeset
1588 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1589 if (array.length > 0) {
jurzua
parents:
diff changeset
1590 Attribute firstAtt = (Attribute) array[0];
jurzua
parents:
diff changeset
1591 list.add(firstAtt);
jurzua
parents:
diff changeset
1592 }
jurzua
parents:
diff changeset
1593 }
jurzua
parents:
diff changeset
1594
jurzua
parents:
diff changeset
1595 } catch (Exception e) {
jurzua
parents:
diff changeset
1596 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1597 e.printStackTrace();
jurzua
parents:
diff changeset
1598 } finally {
jurzua
parents:
diff changeset
1599 session.getTransaction().commit();
jurzua
parents:
diff changeset
1600 }
jurzua
parents:
diff changeset
1601 return list;
jurzua
parents:
diff changeset
1602 }
jurzua
parents:
diff changeset
1603
jurzua
parents:
diff changeset
1604 /**
jurzua
parents:
diff changeset
1605 * <p>
jurzua
parents:
diff changeset
1606 * only the ownValue of the attribute and of the entity can be null
jurzua
parents:
diff changeset
1607 * </p>
jurzua
parents:
diff changeset
1608 * <p>
jurzua
parents:
diff changeset
1609 * The ownValue, the attName and the attOwnValue are searched as substring.
jurzua
parents:
diff changeset
1610 * </p>
jurzua
parents:
diff changeset
1611 *
jurzua
parents:
diff changeset
1612 * @param objectClass
jurzua
parents:
diff changeset
1613 * @param ownValue
jurzua
parents:
diff changeset
1614 * @param attName
jurzua
parents:
diff changeset
1615 * @param attOwnValue
jurzua
parents:
diff changeset
1616 * @param maxResult
jurzua
parents:
diff changeset
1617 * @return
jurzua
parents:
diff changeset
1618 */
jurzua
parents:
diff changeset
1619 public List<Entity> searchEntityByAttribute(String objectClass,
jurzua
parents:
diff changeset
1620 String ownValue, String attName, String attOwnValue, int maxResult) {
jurzua
parents:
diff changeset
1621 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
1622 try {
jurzua
parents:
diff changeset
1623
jurzua
parents:
diff changeset
1624 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1625 .getCurrentSession();
jurzua
parents:
diff changeset
1626 session.getTransaction().begin();
jurzua
parents:
diff changeset
1627 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1628
jurzua
parents:
diff changeset
1629 String hql = "from Entity as ent, Attribute as att " + "where "
jurzua
parents:
diff changeset
1630 + "ent.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1631 + "att.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1632 + "ent.objectClass = :objectClass AND ";
jurzua
parents:
diff changeset
1633
jurzua
parents:
diff changeset
1634 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1635 hql += "ent.ownValue like :ownValue AND ";
jurzua
parents:
diff changeset
1636 }
jurzua
parents:
diff changeset
1637
jurzua
parents:
diff changeset
1638 if (StringUtils.isNotEmpty(attOwnValue)) {
jurzua
parents:
diff changeset
1639 hql += "att.ownValue like :attOwnValue AND ";
jurzua
parents:
diff changeset
1640 }
jurzua
parents:
diff changeset
1641
jurzua
parents:
diff changeset
1642 hql += "att.objectClass like :attName AND "
jurzua
parents:
diff changeset
1643 + "ent.id = att.sourceId " + "group by ent.id ";
jurzua
parents:
diff changeset
1644
jurzua
parents:
diff changeset
1645 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1646 if (maxResult > 0) {
jurzua
parents:
diff changeset
1647 query.setMaxResults(maxResult);
jurzua
parents:
diff changeset
1648 }
jurzua
parents:
diff changeset
1649 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1650 query.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
1651 if (StringUtils.isNotEmpty(ownValue))
jurzua
parents:
diff changeset
1652 query.setString("ownValue", "%" + ownValue + "%");
jurzua
parents:
diff changeset
1653 query.setString("attName", "%" + attName + "%");
jurzua
parents:
diff changeset
1654 if (StringUtils.isNotEmpty(attOwnValue))
jurzua
parents:
diff changeset
1655 query.setString("attOwnValue", "%" + attOwnValue + "%");
jurzua
parents:
diff changeset
1656
jurzua
parents:
diff changeset
1657 List<Object> listO = query.list();
jurzua
parents:
diff changeset
1658
jurzua
parents:
diff changeset
1659 for (Object o : listO) {
jurzua
parents:
diff changeset
1660 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1661 if (array.length > 0) {
jurzua
parents:
diff changeset
1662 Entity ent = (Entity) array[0];
jurzua
parents:
diff changeset
1663 ent.setLightweight(true);
jurzua
parents:
diff changeset
1664 entities.add(ent);
jurzua
parents:
diff changeset
1665 }
jurzua
parents:
diff changeset
1666 }
jurzua
parents:
diff changeset
1667
jurzua
parents:
diff changeset
1668 session.getTransaction().commit();
jurzua
parents:
diff changeset
1669
jurzua
parents:
diff changeset
1670 return entities;
jurzua
parents:
diff changeset
1671 } catch (Exception e) {
jurzua
parents:
diff changeset
1672 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1673 e.printStackTrace();
jurzua
parents:
diff changeset
1674 }
jurzua
parents:
diff changeset
1675 return null;
jurzua
parents:
diff changeset
1676 }
jurzua
parents:
diff changeset
1677
jurzua
parents:
diff changeset
1678 /**
jurzua
parents:
diff changeset
1679 * <p>
jurzua
parents:
diff changeset
1680 * This method searches attributes, which match the input's parameters.
jurzua
parents:
diff changeset
1681 * </p>
jurzua
parents:
diff changeset
1682 * <p>
jurzua
parents:
diff changeset
1683 * Any parameter must be empty, excepted contentType.
jurzua
parents:
diff changeset
1684 * </p>
jurzua
parents:
diff changeset
1685 *
jurzua
parents:
diff changeset
1686 * @param name
jurzua
parents:
diff changeset
1687 * @param ownValue
jurzua
parents:
diff changeset
1688 * @param entObjClass
jurzua
parents:
diff changeset
1689 * @param maxResults
jurzua
parents:
diff changeset
1690 * @return list of attributes filtered by input's parameters
jurzua
parents:
diff changeset
1691 */
jurzua
parents:
diff changeset
1692 public List<Attribute> searchAttribute(String name, String ownValue,
jurzua
parents:
diff changeset
1693 String entObjClass, String contentType, int maxResults) {
jurzua
parents:
diff changeset
1694 List<Attribute> list = new ArrayList<Attribute>();
jurzua
parents:
diff changeset
1695 Session session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1696 try {
jurzua
parents:
diff changeset
1697 // logger.info("");
jurzua
parents:
diff changeset
1698 // logger.info("### Starting Search Attribute [entObjClass="
jurzua
parents:
diff changeset
1699 // + entObjClass + ", name=" + name + ", ownValue=" + ownValue
jurzua
parents:
diff changeset
1700 // + ", contentType=" + contentType + "]###");
jurzua
parents:
diff changeset
1701
jurzua
parents:
diff changeset
1702 session.getTransaction().begin();
jurzua
parents:
diff changeset
1703 // Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1704
jurzua
parents:
diff changeset
1705 String hql = "from Attribute " + "where "
jurzua
parents:
diff changeset
1706 + "systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1707 + "objectClass like :name AND ";
jurzua
parents:
diff changeset
1708 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1709 hql += "ownValue like :ownValue AND ";
jurzua
parents:
diff changeset
1710 }
jurzua
parents:
diff changeset
1711 if (StringUtils.isNotEmpty(contentType)) {
jurzua
parents:
diff changeset
1712 hql += "contentType like :contentType AND ";
jurzua
parents:
diff changeset
1713 }
jurzua
parents:
diff changeset
1714 hql += "sourceObjectClass = :sourceObjectClass ";
jurzua
parents:
diff changeset
1715 hql += "group by id order by ownValue";
jurzua
parents:
diff changeset
1716
jurzua
parents:
diff changeset
1717 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1718 if (maxResults > 0) {
jurzua
parents:
diff changeset
1719 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1720 }
jurzua
parents:
diff changeset
1721 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1722 query.setString("name", name + "%");
jurzua
parents:
diff changeset
1723 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
1724 query.setString("ownValue", "%" + ownValue + "%");
jurzua
parents:
diff changeset
1725 }
jurzua
parents:
diff changeset
1726 query.setString("sourceObjectClass", entObjClass);
jurzua
parents:
diff changeset
1727 if (StringUtils.isNotEmpty(contentType)) {
jurzua
parents:
diff changeset
1728 query.setString("contentType", contentType);
jurzua
parents:
diff changeset
1729 }
jurzua
parents:
diff changeset
1730
jurzua
parents:
diff changeset
1731 list = query.list();
jurzua
parents:
diff changeset
1732
jurzua
parents:
diff changeset
1733 // Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
1734 // Long diff = end - start;
jurzua
parents:
diff changeset
1735 // logger.info("Found " + list.size() + " elements");
jurzua
parents:
diff changeset
1736 // logger.info("Search Attribute - Time execution: " + diff
jurzua
parents:
diff changeset
1737 // / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
1738 // + "[min] " + diff / 1000 + "[sec]\n");
jurzua
parents:
diff changeset
1739
jurzua
parents:
diff changeset
1740 } catch (Exception e) {
jurzua
parents:
diff changeset
1741 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1742 e.printStackTrace();
jurzua
parents:
diff changeset
1743 } finally {
jurzua
parents:
diff changeset
1744 session.getTransaction().commit();
jurzua
parents:
diff changeset
1745 }
jurzua
parents:
diff changeset
1746 return list;
jurzua
parents:
diff changeset
1747 }
jurzua
parents:
diff changeset
1748
jurzua
parents:
diff changeset
1749 /**
jurzua
parents:
diff changeset
1750 *
jurzua
parents:
diff changeset
1751 * @param objClass
jurzua
parents:
diff changeset
1752 * @param relName
jurzua
parents:
diff changeset
1753 * @param objClassSrc
jurzua
parents:
diff changeset
1754 * @param attName
jurzua
parents:
diff changeset
1755 * @param attValue
jurzua
parents:
diff changeset
1756 * @param maxResults
jurzua
parents:
diff changeset
1757 * @return
jurzua
parents:
diff changeset
1758 */
jurzua
parents:
diff changeset
1759 public List<Entity> searchEntityByAttributeOfTarRelation(String objClass,
jurzua
parents:
diff changeset
1760 String relName, String objClassSrc, String attName,
jurzua
parents:
diff changeset
1761 String attValue, int maxResults) {
jurzua
parents:
diff changeset
1762 List<Entity> entityList = new ArrayList<Entity>();
jurzua
parents:
diff changeset
1763 Session session = null;
jurzua
parents:
diff changeset
1764 try {
jurzua
parents:
diff changeset
1765
jurzua
parents:
diff changeset
1766 if (StringUtils.isEmpty(objClass) || StringUtils.isEmpty(relName)
jurzua
parents:
diff changeset
1767 || StringUtils.isEmpty(objClassSrc)
jurzua
parents:
diff changeset
1768 || StringUtils.isEmpty(attName)
jurzua
parents:
diff changeset
1769 || StringUtils.isEmpty(attValue)) {
jurzua
parents:
diff changeset
1770 throw new Exception(
jurzua
parents:
diff changeset
1771 "At least one of these parameters was empty: objClass, relName, objClassSrc, attName, attValue.");
jurzua
parents:
diff changeset
1772 }
jurzua
parents:
diff changeset
1773
jurzua
parents:
diff changeset
1774 session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1775 session.getTransaction().begin();
jurzua
parents:
diff changeset
1776 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1777
jurzua
parents:
diff changeset
1778 String hql = "from Relation as rel, Attribute as att "
jurzua
parents:
diff changeset
1779 + "where "
jurzua
parents:
diff changeset
1780 + "att.sourceObjectClass = :objClassSrc AND "
jurzua
parents:
diff changeset
1781 +
jurzua
parents:
diff changeset
1782 // "att.sourceObjectClass = rel.sourceObjectClass AND " +
jurzua
parents:
diff changeset
1783 "rel.targetObjectClass = :objClass AND "
jurzua
parents:
diff changeset
1784 + "rel.ownValue = :relName AND "
jurzua
parents:
diff changeset
1785 + "att.ownValue like :attValue AND "
jurzua
parents:
diff changeset
1786 + "att.objectClass = :attName AND "
jurzua
parents:
diff changeset
1787 + "att.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1788 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1789 + "rel.sourceId = att.sourceId " + "group by att.sourceId";
jurzua
parents:
diff changeset
1790
jurzua
parents:
diff changeset
1791 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1792 if (maxResults > 0) {
jurzua
parents:
diff changeset
1793 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1794 }
jurzua
parents:
diff changeset
1795
jurzua
parents:
diff changeset
1796 query.setString("objClass", objClass);
jurzua
parents:
diff changeset
1797 query.setString("relName", relName);
jurzua
parents:
diff changeset
1798 query.setString("objClassSrc", objClassSrc);
jurzua
parents:
diff changeset
1799 query.setString("attName", attName);
jurzua
parents:
diff changeset
1800 query.setString("attValue", "%" + attValue + "%");
jurzua
parents:
diff changeset
1801 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1802
jurzua
parents:
diff changeset
1803 List<Object> list = query.list();
jurzua
parents:
diff changeset
1804 List<Long> idList = new ArrayList<Long>();
jurzua
parents:
diff changeset
1805 for (Object o : list) {
jurzua
parents:
diff changeset
1806 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1807 Relation rel = (Relation) array[0];
jurzua
parents:
diff changeset
1808 idList.add(rel.getTargetId());
jurzua
parents:
diff changeset
1809 }
jurzua
parents:
diff changeset
1810
jurzua
parents:
diff changeset
1811 for (Long id : idList) {
jurzua
parents:
diff changeset
1812 List<Entity> l = getLightweightEntities(session,
jurzua
parents:
diff changeset
1813 Node.SYS_STATUS_CURRENT_VERSION, id, null, null, null,
jurzua
parents:
diff changeset
1814 true, -1);
jurzua
parents:
diff changeset
1815 if (l.size() > 0) {
jurzua
parents:
diff changeset
1816 entityList.add(l.get(0));
jurzua
parents:
diff changeset
1817 }
jurzua
parents:
diff changeset
1818 }
jurzua
parents:
diff changeset
1819
jurzua
parents:
diff changeset
1820 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
1821 Long diff = end - start;
jurzua
parents:
diff changeset
1822 logger.info("searchEntityByAttributeOfTarRelation - Time execution: "
jurzua
parents:
diff changeset
1823 + diff
jurzua
parents:
diff changeset
1824 / (60 * 60 * 1000)
jurzua
parents:
diff changeset
1825 + "[hours] "
jurzua
parents:
diff changeset
1826 + diff
jurzua
parents:
diff changeset
1827 / (60 * 1000) + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
1828 } catch (Exception e) {
jurzua
parents:
diff changeset
1829 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1830 } finally {
jurzua
parents:
diff changeset
1831 session.getTransaction().commit();
jurzua
parents:
diff changeset
1832 }
jurzua
parents:
diff changeset
1833 return entityList;
jurzua
parents:
diff changeset
1834 }
jurzua
parents:
diff changeset
1835
jurzua
parents:
diff changeset
1836 /**
jurzua
parents:
diff changeset
1837 * returns the attribute found and the corresponding entity
jurzua
parents:
diff changeset
1838 *
jurzua
parents:
diff changeset
1839 * @param objClass
jurzua
parents:
diff changeset
1840 * @param relName
jurzua
parents:
diff changeset
1841 * @param objClassSrc
jurzua
parents:
diff changeset
1842 * @param attName
jurzua
parents:
diff changeset
1843 * @param attValue
jurzua
parents:
diff changeset
1844 * @param maxResults
jurzua
parents:
diff changeset
1845 * @return
jurzua
parents:
diff changeset
1846 */
jurzua
parents:
diff changeset
1847 public Map<Entity, Attribute> searchEntityByAttributeOfTarRelation2(
jurzua
parents:
diff changeset
1848 String objClass, String relName, String objClassSrc,
jurzua
parents:
diff changeset
1849 String attName, String attValue, int maxResults) {
jurzua
parents:
diff changeset
1850 Map<Entity, Attribute> entityMap = new HashMap<Entity, Attribute>();
jurzua
parents:
diff changeset
1851 Session session = null;
jurzua
parents:
diff changeset
1852 try {
jurzua
parents:
diff changeset
1853
jurzua
parents:
diff changeset
1854 if (StringUtils.isEmpty(objClass) || StringUtils.isEmpty(relName)
jurzua
parents:
diff changeset
1855 || StringUtils.isEmpty(objClassSrc)
jurzua
parents:
diff changeset
1856 || StringUtils.isEmpty(attName)
jurzua
parents:
diff changeset
1857 || StringUtils.isEmpty(attValue)) {
jurzua
parents:
diff changeset
1858 throw new Exception(
jurzua
parents:
diff changeset
1859 "At least one of these parameters was empty: objClass, relName, objClassSrc, attName, attValue.");
jurzua
parents:
diff changeset
1860 }
jurzua
parents:
diff changeset
1861
jurzua
parents:
diff changeset
1862 session = HibernateUtil.getSessionFactory().getCurrentSession();
jurzua
parents:
diff changeset
1863 session.getTransaction().begin();
jurzua
parents:
diff changeset
1864 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1865
jurzua
parents:
diff changeset
1866 String hql = "from Relation as rel, Attribute as att "
jurzua
parents:
diff changeset
1867 + "where "
jurzua
parents:
diff changeset
1868 + "att.sourceObjectClass = :objClassSrc AND "
jurzua
parents:
diff changeset
1869 +
jurzua
parents:
diff changeset
1870 // "att.sourceObjectClass = rel.sourceObjectClass AND " +
jurzua
parents:
diff changeset
1871 "rel.targetObjectClass = :objClass AND "
jurzua
parents:
diff changeset
1872 + "rel.ownValue = :relName AND "
jurzua
parents:
diff changeset
1873 + "att.ownValue like :attValue AND "
jurzua
parents:
diff changeset
1874 + "att.objectClass = :attName AND "
jurzua
parents:
diff changeset
1875 + "att.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1876 + "rel.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
1877 + "rel.sourceId = att.sourceId " + "group by att.sourceId";
jurzua
parents:
diff changeset
1878
jurzua
parents:
diff changeset
1879 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
1880 if (maxResults > 0) {
jurzua
parents:
diff changeset
1881 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
1882 }
jurzua
parents:
diff changeset
1883
jurzua
parents:
diff changeset
1884 query.setString("objClass", objClass);
jurzua
parents:
diff changeset
1885 query.setString("relName", relName);
jurzua
parents:
diff changeset
1886 query.setString("objClassSrc", objClassSrc);
jurzua
parents:
diff changeset
1887 query.setString("attName", attName);
jurzua
parents:
diff changeset
1888 query.setString("attValue", "%" + attValue + "%");
jurzua
parents:
diff changeset
1889 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
1890
jurzua
parents:
diff changeset
1891 List<Object> list = query.list();
jurzua
parents:
diff changeset
1892 Map<Long, Attribute> map = new HashMap<Long, Attribute>();
jurzua
parents:
diff changeset
1893 for (Object o : list) {
jurzua
parents:
diff changeset
1894 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
1895 Relation rel = (Relation) array[0];
jurzua
parents:
diff changeset
1896 Attribute att = (Attribute) array[1];
jurzua
parents:
diff changeset
1897 map.put(rel.getTargetId(), att);
jurzua
parents:
diff changeset
1898 }
jurzua
parents:
diff changeset
1899
jurzua
parents:
diff changeset
1900 for (Long id : map.keySet()) {
jurzua
parents:
diff changeset
1901 List<Entity> l = getLightweightEntities(session,
jurzua
parents:
diff changeset
1902 Node.SYS_STATUS_CURRENT_VERSION, id, null, null, null,
jurzua
parents:
diff changeset
1903 true, -1);
jurzua
parents:
diff changeset
1904 if (l.size() > 0) {
jurzua
parents:
diff changeset
1905 entityMap.put(l.get(0), map.get(id));
jurzua
parents:
diff changeset
1906 }
jurzua
parents:
diff changeset
1907 }
jurzua
parents:
diff changeset
1908
jurzua
parents:
diff changeset
1909 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
1910 Long diff = end - start;
jurzua
parents:
diff changeset
1911 logger.info("searchEntityByAttributeOfTarRelation - Time execution: "
jurzua
parents:
diff changeset
1912 + diff
jurzua
parents:
diff changeset
1913 / (60 * 60 * 1000)
jurzua
parents:
diff changeset
1914 + "[hours] "
jurzua
parents:
diff changeset
1915 + diff
jurzua
parents:
diff changeset
1916 / (60 * 1000) + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
1917 } catch (Exception e) {
jurzua
parents:
diff changeset
1918 logger.error(e.getMessage());
jurzua
parents:
diff changeset
1919 } finally {
jurzua
parents:
diff changeset
1920 session.getTransaction().commit();
jurzua
parents:
diff changeset
1921 }
jurzua
parents:
diff changeset
1922 return entityMap;
jurzua
parents:
diff changeset
1923 }
jurzua
parents:
diff changeset
1924
jurzua
parents:
diff changeset
1925 /**
jurzua
parents:
diff changeset
1926 * TODO
jurzua
parents:
diff changeset
1927 *
jurzua
parents:
diff changeset
1928 * @param objClass
jurzua
parents:
diff changeset
1929 * @param relName
jurzua
parents:
diff changeset
1930 * @param objClassTar
jurzua
parents:
diff changeset
1931 * @param attName
jurzua
parents:
diff changeset
1932 * @param attValue
jurzua
parents:
diff changeset
1933 * @param maxResults
jurzua
parents:
diff changeset
1934 * @return
jurzua
parents:
diff changeset
1935 */
jurzua
parents:
diff changeset
1936 public List<Entity> searchEntityByAttributeOfSrcRelation(String objClass,
jurzua
parents:
diff changeset
1937 String relName, String objClassTar, String attName,
jurzua
parents:
diff changeset
1938 String attValue, int maxResults) {
jurzua
parents:
diff changeset
1939 try {
jurzua
parents:
diff changeset
1940
jurzua
parents:
diff changeset
1941 } catch (Exception e) {
jurzua
parents:
diff changeset
1942 e.printStackTrace();
jurzua
parents:
diff changeset
1943 }
jurzua
parents:
diff changeset
1944 return null;
jurzua
parents:
diff changeset
1945 }
jurzua
parents:
diff changeset
1946
jurzua
parents:
diff changeset
1947 /**
jurzua
parents:
diff changeset
1948 * This method search a
jurzua
parents:
diff changeset
1949 *
jurzua
parents:
diff changeset
1950 * @param filter
jurzua
parents:
diff changeset
1951 * RelationFilter
jurzua
parents:
diff changeset
1952 * @param maxResults
jurzua
parents:
diff changeset
1953 * @return
jurzua
parents:
diff changeset
1954 */
jurzua
parents:
diff changeset
1955 public List<RelationResultEntry> searchByRelation(RelationFilter filter,
jurzua
parents:
diff changeset
1956 String grouping, int maxResults) {
jurzua
parents:
diff changeset
1957 try {
jurzua
parents:
diff changeset
1958 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
1959 .getCurrentSession();
jurzua
parents:
diff changeset
1960 session.getTransaction().begin();
jurzua
parents:
diff changeset
1961 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
1962
jurzua
parents:
diff changeset
1963 String hql = "from ";
jurzua
parents:
diff changeset
1964 if (filter.srcInclude) {
jurzua
parents:
diff changeset
1965 if (filter.srcAttInclude) {
jurzua
parents:
diff changeset
1966 hql += "Attribute as srcAtt, ";
jurzua
parents:
diff changeset
1967 hql += "NodeJoin as joinSrcAtt, ";
jurzua
parents:
diff changeset
1968 }
jurzua
parents:
diff changeset
1969 hql += "Entity as src, ";
jurzua
parents:
diff changeset
1970 }
jurzua
parents:
diff changeset
1971 hql += "Relation as rel ";
jurzua
parents:
diff changeset
1972 if (filter.tarInclude) {
jurzua
parents:
diff changeset
1973 hql += ", ";
jurzua
parents:
diff changeset
1974 hql += "Entity as tar ";
jurzua
parents:
diff changeset
1975 if (filter.tarAttInclude) {
jurzua
parents:
diff changeset
1976 hql += ", ";
jurzua
parents:
diff changeset
1977 hql += "NodeJoin as joinTarAtt, ";
jurzua
parents:
diff changeset
1978 hql += "Attribute as tarAtt ";
jurzua
parents:
diff changeset
1979 }
jurzua
parents:
diff changeset
1980 }
jurzua
parents:
diff changeset
1981
jurzua
parents:
diff changeset
1982 hql += "where ";
jurzua
parents:
diff changeset
1983 if (filter.srcInclude) {
jurzua
parents:
diff changeset
1984 if (filter.srcAttInclude) {
jurzua
parents:
diff changeset
1985 hql += "srcAtt.systemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
1986 hql += "joinSrcAtt.sourceSystemStatus = :systemStatus AND joinSrcAtt.targetSystemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
1987 hql += "joinSrcAtt.sourceId = src.id AND joinSrcAtt.targetId = srcAtt.id AND ";
jurzua
parents:
diff changeset
1988 hql += "srcAtt.ownValue like :srcAttOwnValue AND ";
jurzua
parents:
diff changeset
1989 hql += "srcAtt.objectClass like :srcAttName AND ";
jurzua
parents:
diff changeset
1990 }
jurzua
parents:
diff changeset
1991 hql += "src.systemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
1992 hql += "rel.sourceId = src.id AND ";
jurzua
parents:
diff changeset
1993 hql += "src.ownValue like :srcOwnValue AND ";
jurzua
parents:
diff changeset
1994 hql += "src.objectClass like :srcObjectClass AND ";
jurzua
parents:
diff changeset
1995 }
jurzua
parents:
diff changeset
1996 if (filter.tarInclude) {
jurzua
parents:
diff changeset
1997 if (filter.tarAttInclude) {
jurzua
parents:
diff changeset
1998 hql += "tarAtt.systemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
1999 hql += "joinTarAtt.sourceSystemStatus = :systemStatus AND joinTarAtt.targetSystemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
2000 hql += "joinTarAtt.sourceId = tar.id AND joinTarAtt.targetId = tarAtt.id AND ";
jurzua
parents:
diff changeset
2001 hql += "tarAtt.ownValue like :tarAttOwnValue AND ";
jurzua
parents:
diff changeset
2002 hql += "tarAtt.objectClass like :tarAttName AND ";
jurzua
parents:
diff changeset
2003 }
jurzua
parents:
diff changeset
2004 hql += "tar.systemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
2005 hql += "rel.targetId = tar.id AND ";
jurzua
parents:
diff changeset
2006 hql += "tar.ownValue like :tarOwnValue AND ";
jurzua
parents:
diff changeset
2007 hql += "tar.objectClass like :tarObjectClass AND ";
jurzua
parents:
diff changeset
2008 }
jurzua
parents:
diff changeset
2009 hql += "rel.systemStatus = :systemStatus AND ";
jurzua
parents:
diff changeset
2010 hql += "rel.ownValue like :relOwnValue AND ";
jurzua
parents:
diff changeset
2011 hql += "rel.objectClass like :relObjectClass ";
jurzua
parents:
diff changeset
2012
jurzua
parents:
diff changeset
2013 hql += ") ";
jurzua
parents:
diff changeset
2014
jurzua
parents:
diff changeset
2015 // setup of the field, which is used to group the result entries.
jurzua
parents:
diff changeset
2016 if (GROUP_BY_SOURCE.equals(grouping) && filter.srcInclude) {
jurzua
parents:
diff changeset
2017 hql += " group by src.id";
jurzua
parents:
diff changeset
2018 } else {
jurzua
parents:
diff changeset
2019 if (GROUP_BY_TARGET.equals(grouping) && filter.tarInclude) {
jurzua
parents:
diff changeset
2020 hql += " group by tar.id";
jurzua
parents:
diff changeset
2021 } else {
jurzua
parents:
diff changeset
2022 hql += " group by rel.id";
jurzua
parents:
diff changeset
2023 }
jurzua
parents:
diff changeset
2024 }
jurzua
parents:
diff changeset
2025
jurzua
parents:
diff changeset
2026 Query query = session.createQuery(hql);
jurzua
parents:
diff changeset
2027 if (maxResults > 0) {
jurzua
parents:
diff changeset
2028 query.setMaxResults(maxResults);
jurzua
parents:
diff changeset
2029 }
jurzua
parents:
diff changeset
2030
jurzua
parents:
diff changeset
2031 // setting the values of the filter in the query.
jurzua
parents:
diff changeset
2032 query.setString("systemStatus", Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
2033 if (filter.srcInclude) {
jurzua
parents:
diff changeset
2034 if (filter.srcAttInclude) {
jurzua
parents:
diff changeset
2035 if (StringUtils.isNotEmpty(filter.srcAttOwnValue)) {
jurzua
parents:
diff changeset
2036 query.setString("srcAttOwnValue", "%"
jurzua
parents:
diff changeset
2037 + filter.srcAttOwnValue);
jurzua
parents:
diff changeset
2038 }
jurzua
parents:
diff changeset
2039 if (StringUtils.isNotEmpty(filter.srcAttName)) {
jurzua
parents:
diff changeset
2040 query.setString("srcAttName", "%" + filter.srcAttName);
jurzua
parents:
diff changeset
2041 }
jurzua
parents:
diff changeset
2042 }
jurzua
parents:
diff changeset
2043 if (StringUtils.isNotEmpty(filter.srcOwnValue)) {
jurzua
parents:
diff changeset
2044 query.setString("srcOwnValue", "%" + filter.srcOwnValue);
jurzua
parents:
diff changeset
2045 }
jurzua
parents:
diff changeset
2046 if (StringUtils.isNotEmpty(filter.srcObjectClass)) {
jurzua
parents:
diff changeset
2047 query.setString("srcObjectClass", "%"
jurzua
parents:
diff changeset
2048 + filter.srcObjectClass);
jurzua
parents:
diff changeset
2049 }
jurzua
parents:
diff changeset
2050 }
jurzua
parents:
diff changeset
2051 if (filter.tarInclude) {
jurzua
parents:
diff changeset
2052 if (filter.tarAttInclude) {
jurzua
parents:
diff changeset
2053 if (StringUtils.isNotEmpty(filter.tarAttOwnValue)) {
jurzua
parents:
diff changeset
2054 query.setString("tarAttOwnValue", filter.tarAttOwnValue);
jurzua
parents:
diff changeset
2055 }
jurzua
parents:
diff changeset
2056 if (StringUtils.isNotEmpty(filter.tarAttName)) {
jurzua
parents:
diff changeset
2057 query.setString("tarAttName", filter.tarAttName);
jurzua
parents:
diff changeset
2058 }
jurzua
parents:
diff changeset
2059 }
jurzua
parents:
diff changeset
2060 if (StringUtils.isNotEmpty(filter.tarObjectClass)) {
jurzua
parents:
diff changeset
2061 query.setString("tarObjectClass", filter.tarObjectClass);
jurzua
parents:
diff changeset
2062 }
jurzua
parents:
diff changeset
2063 if (StringUtils.isNotEmpty(filter.tarOwnValue)) {
jurzua
parents:
diff changeset
2064 query.setString("tarOwnValue", filter.tarOwnValue);
jurzua
parents:
diff changeset
2065 }
jurzua
parents:
diff changeset
2066 }
jurzua
parents:
diff changeset
2067 if (StringUtils.isNotEmpty(filter.relOwnValue)) {
jurzua
parents:
diff changeset
2068 query.setString("relOwnValue", filter.relOwnValue);
jurzua
parents:
diff changeset
2069 }
jurzua
parents:
diff changeset
2070 if (StringUtils.isNotEmpty(filter.relObjectClass)) {
jurzua
parents:
diff changeset
2071 query.setString("relObjectClass", filter.relObjectClass);
jurzua
parents:
diff changeset
2072 }
jurzua
parents:
diff changeset
2073
jurzua
parents:
diff changeset
2074 List<Object> list = query.list();
jurzua
parents:
diff changeset
2075 List<RelationResultEntry> resultSet = new ArrayList<RelationResultEntry>();
jurzua
parents:
diff changeset
2076 RelationResultEntry entry;
jurzua
parents:
diff changeset
2077 for (Object o : list) {
jurzua
parents:
diff changeset
2078 entry = new RelationResultEntry();
jurzua
parents:
diff changeset
2079 int index = 0;
jurzua
parents:
diff changeset
2080 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
2081 // Object item = (Object) array[0];
jurzua
parents:
diff changeset
2082 if (filter.srcInclude) {
jurzua
parents:
diff changeset
2083 if (filter.srcAttInclude) {
jurzua
parents:
diff changeset
2084 entry.srcAttribute = (Attribute) array[index];
jurzua
parents:
diff changeset
2085 index++;
jurzua
parents:
diff changeset
2086 index++;
jurzua
parents:
diff changeset
2087 // hql += "Attribute as srcAtt, ";
jurzua
parents:
diff changeset
2088 // hql += "NodeJoin as joinSrcAtt, ";
jurzua
parents:
diff changeset
2089 }
jurzua
parents:
diff changeset
2090 entry.source = (Entity) array[index];
jurzua
parents:
diff changeset
2091 index++;
jurzua
parents:
diff changeset
2092 // hql += "Entity as src, ";
jurzua
parents:
diff changeset
2093 }
jurzua
parents:
diff changeset
2094 // hql += "Relation as rel ";
jurzua
parents:
diff changeset
2095 entry.relation = (Relation) array[index];
jurzua
parents:
diff changeset
2096 index++;
jurzua
parents:
diff changeset
2097 if (filter.tarInclude) {
jurzua
parents:
diff changeset
2098 // hql += "Entity as tar ";
jurzua
parents:
diff changeset
2099 entry.target = (Entity) array[index];
jurzua
parents:
diff changeset
2100 index++;
jurzua
parents:
diff changeset
2101 if (filter.tarAttInclude) {
jurzua
parents:
diff changeset
2102 index++;
jurzua
parents:
diff changeset
2103 entry.tarAttribute = (Attribute) array[index];
jurzua
parents:
diff changeset
2104 // hql += "NodeJoin as joinTarAtt, ";
jurzua
parents:
diff changeset
2105 // hql += "Attribute as tarAtt ";
jurzua
parents:
diff changeset
2106 }
jurzua
parents:
diff changeset
2107 }
jurzua
parents:
diff changeset
2108 resultSet.add(entry);
jurzua
parents:
diff changeset
2109 }
jurzua
parents:
diff changeset
2110 // //////////////////////////////////////////
jurzua
parents:
diff changeset
2111 // //////////////////////////////////////////
jurzua
parents:
diff changeset
2112 // //////////////////////////////////////////
jurzua
parents:
diff changeset
2113 session.getTransaction().commit();
jurzua
parents:
diff changeset
2114 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
2115 Long diff = end - start;
jurzua
parents:
diff changeset
2116 logger.info("GetLightweightEntities BY RELATION - Time execution: "
jurzua
parents:
diff changeset
2117 + diff
jurzua
parents:
diff changeset
2118 / (60 * 60 * 1000)
jurzua
parents:
diff changeset
2119 + "[hours] "
jurzua
parents:
diff changeset
2120 + diff
jurzua
parents:
diff changeset
2121 / (60 * 1000) + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
2122 return resultSet;
jurzua
parents:
diff changeset
2123 } catch (Exception e) {
jurzua
parents:
diff changeset
2124 logger.error(e.getMessage());
jurzua
parents:
diff changeset
2125 e.printStackTrace();
jurzua
parents:
diff changeset
2126 }
jurzua
parents:
diff changeset
2127 return null;
jurzua
parents:
diff changeset
2128 }
jurzua
parents:
diff changeset
2129
jurzua
parents:
diff changeset
2130 /**
jurzua
parents:
diff changeset
2131 * <p>
jurzua
parents:
diff changeset
2132 * Returns a list of entities filtered by the following rules:
jurzua
parents:
diff changeset
2133 * </p>
jurzua
parents:
diff changeset
2134 * if <b>ownValue</b> is no empty, the entities returned have into ownValue
jurzua
parents:
diff changeset
2135 * the given substring.
jurzua
parents:
diff changeset
2136 *
jurzua
parents:
diff changeset
2137 * @param ownValue
jurzua
parents:
diff changeset
2138 * @param objectClass
jurzua
parents:
diff changeset
2139 * @param filters
jurzua
parents:
diff changeset
2140 * @return
jurzua
parents:
diff changeset
2141 */
jurzua
parents:
diff changeset
2142
jurzua
parents:
diff changeset
2143 /**
jurzua
parents:
diff changeset
2144 * TODO: what will be returned if it is searching a null value eg:
jurzua
parents:
diff changeset
2145 * identifier=null?
jurzua
parents:
diff changeset
2146 *
jurzua
parents:
diff changeset
2147 * @param ownValue
jurzua
parents:
diff changeset
2148 * @param objectClass
jurzua
parents:
diff changeset
2149 * @param attObjClass
jurzua
parents:
diff changeset
2150 * @param attOwnValue
jurzua
parents:
diff changeset
2151 * @param assertions
jurzua
parents:
diff changeset
2152 * @param maxResults
jurzua
parents:
diff changeset
2153 * @return
jurzua
parents:
diff changeset
2154 */
jurzua
parents:
diff changeset
2155 public List<Entity> getLightweightEntitiesByAttribute(String ownValue,
jurzua
parents:
diff changeset
2156 String objectClass, String attObjClass, String attOwnValue,
jurzua
parents:
diff changeset
2157 Boolean assertions, int maxResults, boolean substring) {
jurzua
parents:
diff changeset
2158 logger.debug("Get LW Entities By Attribute [maxResults: " + maxResults
jurzua
parents:
diff changeset
2159 + "]");
jurzua
parents:
diff changeset
2160
jurzua
parents:
diff changeset
2161 List<Entity> entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
2162
jurzua
parents:
diff changeset
2163 if (substring) {
jurzua
parents:
diff changeset
2164 ownValue = (StringUtils.isEmpty(ownValue)) ? "" : "%" + ownValue
jurzua
parents:
diff changeset
2165 + "%";
jurzua
parents:
diff changeset
2166 objectClass = (StringUtils.isEmpty(objectClass)) ? "" : "%"
jurzua
parents:
diff changeset
2167 + objectClass + "%";
jurzua
parents:
diff changeset
2168 attOwnValue = (StringUtils.isEmpty(attOwnValue)) ? "" : "%"
jurzua
parents:
diff changeset
2169 + attOwnValue + "%";
jurzua
parents:
diff changeset
2170 attObjClass = (StringUtils.isEmpty(attObjClass)) ? "" : "%"
jurzua
parents:
diff changeset
2171 + attObjClass + "%";
jurzua
parents:
diff changeset
2172 }
jurzua
parents:
diff changeset
2173
jurzua
parents:
diff changeset
2174 String type = (assertions) ? Node.TYPE_ABOX : Node.TYPE_TBOX;
jurzua
parents:
diff changeset
2175 String equalityOperator = (substring) ? " like " : " = ";
jurzua
parents:
diff changeset
2176
jurzua
parents:
diff changeset
2177 try {
jurzua
parents:
diff changeset
2178 Session session = HibernateUtil.getSessionFactory()
jurzua
parents:
diff changeset
2179 .getCurrentSession();
jurzua
parents:
diff changeset
2180 session.getTransaction().begin();
jurzua
parents:
diff changeset
2181 Long start = System.currentTimeMillis();
jurzua
parents:
diff changeset
2182
jurzua
parents:
diff changeset
2183 String hqlEntities = "from Entity as ent, Attribute as att "
jurzua
parents:
diff changeset
2184 + "where ent.systemStatus = :systemStatus AND att.systemStatus = :systemStatus AND "
jurzua
parents:
diff changeset
2185 + "att.sourceId = ent.id AND ";
jurzua
parents:
diff changeset
2186
jurzua
parents:
diff changeset
2187 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
2188 hqlEntities += "ent.ownValue " + equalityOperator
jurzua
parents:
diff changeset
2189 + " :ownValue AND ";
jurzua
parents:
diff changeset
2190 }
jurzua
parents:
diff changeset
2191 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
2192 hqlEntities += "ent.objectClass " + equalityOperator
jurzua
parents:
diff changeset
2193 + " :objectClass AND ";
jurzua
parents:
diff changeset
2194 }
jurzua
parents:
diff changeset
2195 if (StringUtils.isNotEmpty(attOwnValue)) {
jurzua
parents:
diff changeset
2196 hqlEntities += "att.ownValue " + equalityOperator
jurzua
parents:
diff changeset
2197 + " :attOwnValue AND ";
jurzua
parents:
diff changeset
2198 }
jurzua
parents:
diff changeset
2199 if (StringUtils.isNotEmpty(attObjClass)) {
jurzua
parents:
diff changeset
2200 hqlEntities += "att.objectClass " + equalityOperator
jurzua
parents:
diff changeset
2201 + " :attObjClass AND ";
jurzua
parents:
diff changeset
2202 }
jurzua
parents:
diff changeset
2203 hqlEntities += "ent.type = :type "
jurzua
parents:
diff changeset
2204 + "group by ent.id order by ent.ownValue";
jurzua
parents:
diff changeset
2205
jurzua
parents:
diff changeset
2206 Query queryEntities = session.createQuery(hqlEntities);
jurzua
parents:
diff changeset
2207 queryEntities.setString("systemStatus",
jurzua
parents:
diff changeset
2208 Node.SYS_STATUS_CURRENT_VERSION);
jurzua
parents:
diff changeset
2209 queryEntities.setString("type", type);
jurzua
parents:
diff changeset
2210 if (StringUtils.isNotEmpty(ownValue)) {
jurzua
parents:
diff changeset
2211 queryEntities.setString("ownValue", ownValue);
jurzua
parents:
diff changeset
2212 }
jurzua
parents:
diff changeset
2213 if (StringUtils.isNotEmpty(objectClass)) {
jurzua
parents:
diff changeset
2214 queryEntities.setString("objectClass", objectClass);
jurzua
parents:
diff changeset
2215 }
jurzua
parents:
diff changeset
2216 if (StringUtils.isNotEmpty(attOwnValue)) {
jurzua
parents:
diff changeset
2217 queryEntities.setString("attOwnValue", attOwnValue);
jurzua
parents:
diff changeset
2218 }
jurzua
parents:
diff changeset
2219 if (StringUtils.isNotEmpty(attObjClass)) {
jurzua
parents:
diff changeset
2220 queryEntities.setString("attObjClass", attObjClass);
jurzua
parents:
diff changeset
2221 }
jurzua
parents:
diff changeset
2222 if (maxResults > 0) {
jurzua
parents:
diff changeset
2223 queryEntities.setMaxResults(maxResults);
jurzua
parents:
diff changeset
2224 }
jurzua
parents:
diff changeset
2225
jurzua
parents:
diff changeset
2226 entities = new ArrayList<Entity>();
jurzua
parents:
diff changeset
2227 List<Object> list = queryEntities.list();
jurzua
parents:
diff changeset
2228 for (Object o : list) {
jurzua
parents:
diff changeset
2229 Object[] array = (Object[]) o;
jurzua
parents:
diff changeset
2230 Object item = (Object) array[0];
jurzua
parents:
diff changeset
2231 if (item instanceof Entity) {
jurzua
parents:
diff changeset
2232 // logger.info("Entity= " + item);
jurzua
parents:
diff changeset
2233 Entity ent = (Entity) item;
jurzua
parents:
diff changeset
2234 ent.setLightweight(true);
jurzua
parents:
diff changeset
2235 entities.add(ent);
jurzua
parents:
diff changeset
2236 }
jurzua
parents:
diff changeset
2237 }
jurzua
parents:
diff changeset
2238
jurzua
parents:
diff changeset
2239 session.getTransaction().commit();
jurzua
parents:
diff changeset
2240 Long end = System.currentTimeMillis();
jurzua
parents:
diff changeset
2241 Long diff = end - start;
jurzua
parents:
diff changeset
2242 logger.debug("GetLightweightEntitiesByAttribute - Time execution: "
jurzua
parents:
diff changeset
2243 + diff / (60 * 60 * 1000) + "[hours] " + diff / (60 * 1000)
jurzua
parents:
diff changeset
2244 + "[min] " + diff / 1000 + "[sec]");
jurzua
parents:
diff changeset
2245 } catch (Exception e) {
jurzua
parents:
diff changeset
2246 logger.error(e.getMessage());
jurzua
parents:
diff changeset
2247 e.printStackTrace();
jurzua
parents:
diff changeset
2248 }
jurzua
parents:
diff changeset
2249 return entities;
jurzua
parents:
diff changeset
2250 }
jurzua
parents:
diff changeset
2251
jurzua
parents:
diff changeset
2252 }