annotate src/main/java/org/mpi/openmind/repository/services/PersistenceService.java @ 127:3e772f7f43e0 default tip

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