annotate src/main/java/org/mpi/openmind/repository/services/PersistenceService.java @ 22:165b1efb85cd

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