annotate src/main/java/org/mpi/openmind/scripts/TimeModification.java @ 90:4b6c0b368f46

new UpdateMpiwgDigitalizations script.
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Tue, 29 May 2018 21:15:06 +0200
parents 615d27dce9b3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
jurzua
parents:
diff changeset
1 package org.mpi.openmind.scripts;
jurzua
parents:
diff changeset
2
jurzua
parents:
diff changeset
3 import java.sql.Connection;
jurzua
parents:
diff changeset
4 import java.sql.DriverManager;
jurzua
parents:
diff changeset
5 import java.sql.ResultSet;
jurzua
parents:
diff changeset
6 import java.sql.SQLException;
jurzua
parents:
diff changeset
7 import java.sql.Statement;
jurzua
parents:
diff changeset
8 import java.util.ArrayList;
jurzua
parents:
diff changeset
9 import java.util.Arrays;
jurzua
parents:
diff changeset
10 import java.util.HashMap;
jurzua
parents:
diff changeset
11 import java.util.List;
jurzua
parents:
diff changeset
12 import java.util.Map;
jurzua
parents:
diff changeset
13
jurzua
parents:
diff changeset
14 import org.apache.commons.lang.NotImplementedException;
jurzua
parents:
diff changeset
15 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
16 import org.mpi.openmind.repository.bo.Node;
jurzua
parents:
diff changeset
17
jurzua
parents:
diff changeset
18 /**
jurzua
parents:
diff changeset
19 *
jurzua
parents:
diff changeset
20 * This script find the relation that are mark as "CURRENT_VERSION",
jurzua
parents:
diff changeset
21 * however the time_modification does not meet either the time modification of the source, of target or both.
jurzua
parents:
diff changeset
22 *
jurzua
parents:
diff changeset
23 * This script does not work well, when there is twice entities with the state "CURRENT_VERSION" and with the same id.
jurzua
parents:
diff changeset
24 * This problem should be corrected before running this script. Use before class: DoubleEntity
jurzua
parents:
diff changeset
25 *
jurzua
parents:
diff changeset
26 *
jurzua
parents:
diff changeset
27 * @author jurzua
jurzua
parents:
diff changeset
28 *
jurzua
parents:
diff changeset
29 */
jurzua
parents:
diff changeset
30 public class TimeModification {
jurzua
parents:
diff changeset
31
jurzua
parents:
diff changeset
32 //selects
jurzua
parents:
diff changeset
33 private static String queryEntListByClass = "select * from openmind.node where object_class = '##' and system_status = 'CURRENT_VERSION'";
jurzua
parents:
diff changeset
34 private static String queryAllEntList = "select * from openmind.node where node_type = 'ENTITY' and system_status = 'CURRENT_VERSION' and type = 'ABox'";
jurzua
parents:
diff changeset
35 private static String queryTarRels = "select * from openmind.node where target_id = '##' and system_status = 'CURRENT_VERSION'";
jurzua
parents:
diff changeset
36 private static String querySrcRels = "select * from openmind.node where source_id = '##' and system_status = 'CURRENT_VERSION' and node_type = 'RELATION'";
jurzua
parents:
diff changeset
37
jurzua
parents:
diff changeset
38 //updates
jurzua
parents:
diff changeset
39 private static String updateTarRel = "UPDATE openmind.node SET target_modif = '##' WHERE row_id = '**'";
jurzua
parents:
diff changeset
40 private static String updateSrcRel = "UPDATE openmind.node SET source_modif = '##' WHERE row_id = '**'";
jurzua
parents:
diff changeset
41
jurzua
parents:
diff changeset
42 private static List<ClassRelation> classRelList = new ArrayList<ClassRelation>();
jurzua
parents:
diff changeset
43
jurzua
parents:
diff changeset
44 static{
jurzua
parents:
diff changeset
45 classRelList.add(new ClassRelation("WITNESS", "src:is_part_of"));
jurzua
parents:
diff changeset
46 classRelList.add(new ClassRelation("WITNESS", "src:is_exemplar_of"));
jurzua
parents:
diff changeset
47 classRelList.add(new ClassRelation("CODEX", "src:is_part_of"));
jurzua
parents:
diff changeset
48 classRelList.add(new ClassRelation("COLLECTION", "src:is_part_of"));
jurzua
parents:
diff changeset
49 classRelList.add(new ClassRelation("REPOSITORY", "src:is_in"));
jurzua
parents:
diff changeset
50 classRelList.add(new ClassRelation("CODEX", "tar:is_part_of"));
jurzua
parents:
diff changeset
51 classRelList.add(new ClassRelation("COLLECTION", "tar:is_part_of"));
jurzua
parents:
diff changeset
52 classRelList.add(new ClassRelation("REPOSITORY", "tar:is_part_of"));
jurzua
parents:
diff changeset
53 classRelList.add(new ClassRelation("PLACE", "tar:is_in"));
jurzua
parents:
diff changeset
54 classRelList.add(new ClassRelation("TEXT", "tar:is_exemplar_of"));
jurzua
parents:
diff changeset
55 classRelList.add(new ClassRelation("TEXT", "src:was_created_by"));
jurzua
parents:
diff changeset
56 classRelList.add(new ClassRelation("TEXT", "tar:is_prime_alias_title_of"));
jurzua
parents:
diff changeset
57 classRelList.add(new ClassRelation("TEXT", "tar:is_alias_title_of"));
jurzua
parents:
diff changeset
58 classRelList.add(new ClassRelation("TEXT", "tar:is_translation_of"));
jurzua
parents:
diff changeset
59 classRelList.add(new ClassRelation("PERSON", "tar:was_created_by"));
jurzua
parents:
diff changeset
60 classRelList.add(new ClassRelation("PERSON", "src:lived_in"));
jurzua
parents:
diff changeset
61 classRelList.add(new ClassRelation("PERSON", "tar:is_reference_of"));
jurzua
parents:
diff changeset
62 classRelList.add(new ClassRelation("PERSON", "tar:is_alias_name_of"));
jurzua
parents:
diff changeset
63 classRelList.add(new ClassRelation("PERSON", "src:has_role"));
jurzua
parents:
diff changeset
64 classRelList.add(new ClassRelation("PERSON", "tar:was_copied_by"));
jurzua
parents:
diff changeset
65 classRelList.add(new ClassRelation("ALIAS", "src:is_prime_alias_title_of"));
jurzua
parents:
diff changeset
66 classRelList.add(new ClassRelation("ALIAS", "src:is_alias_title_of"));
jurzua
parents:
diff changeset
67 classRelList.add(new ClassRelation("ALIAS", "tar:has_title_written_as"));
jurzua
parents:
diff changeset
68 }
jurzua
parents:
diff changeset
69
jurzua
parents:
diff changeset
70
jurzua
parents:
diff changeset
71 /**
jurzua
parents:
diff changeset
72 *
jurzua
parents:
diff changeset
73 * @param conn
jurzua
parents:
diff changeset
74 * @param entId
jurzua
parents:
diff changeset
75 * @param entModif
jurzua
parents:
diff changeset
76 * @param entOC
jurzua
parents:
diff changeset
77 * @param action show/solve
jurzua
parents:
diff changeset
78 * @throws SQLException
jurzua
parents:
diff changeset
79 */
jurzua
parents:
diff changeset
80 public static void executeEntity(Connection conn, Long entId, Long entModif, String entOC, String relacion, String action) throws Exception{
jurzua
parents:
diff changeset
81
jurzua
parents:
diff changeset
82 if(StringUtils.isEmpty(relacion)){
jurzua
parents:
diff changeset
83 executeSources(conn, entId, entModif, entOC, null, action);
jurzua
parents:
diff changeset
84 executeTargets(conn, entId, entModif, entOC, null, action);
jurzua
parents:
diff changeset
85 }else{
jurzua
parents:
diff changeset
86 String[] array = relacion.split(":");
jurzua
parents:
diff changeset
87 String relLabel = array[1];
jurzua
parents:
diff changeset
88 if(array[0].equals("src")){
jurzua
parents:
diff changeset
89 executeSources(conn, entId, entModif, entOC, relLabel, action);
jurzua
parents:
diff changeset
90 }else if(array[0].equals("tar")){
jurzua
parents:
diff changeset
91 executeTargets(conn, entId, entModif, entOC, relLabel, action);
jurzua
parents:
diff changeset
92 }else{
jurzua
parents:
diff changeset
93 throw new Exception("The parameter relation is not valid: " + relacion);
jurzua
parents:
diff changeset
94 }
jurzua
parents:
diff changeset
95 }
jurzua
parents:
diff changeset
96 }
jurzua
parents:
diff changeset
97
jurzua
parents:
diff changeset
98 public static boolean analyseSrcRels(Connection conn, List<Relation> rels, Long entId, Long entModif, String entOC, String relLabel, String action) throws Exception{
jurzua
parents:
diff changeset
99
jurzua
parents:
diff changeset
100 boolean ok = true;
jurzua
parents:
diff changeset
101
jurzua
parents:
diff changeset
102 for(Relation rel : rels){
jurzua
parents:
diff changeset
103 if(!rel.srcModif.equals(entModif)){
jurzua
parents:
diff changeset
104 ok = false;
jurzua
parents:
diff changeset
105 break;
jurzua
parents:
diff changeset
106 }
jurzua
parents:
diff changeset
107 }
jurzua
parents:
diff changeset
108
jurzua
parents:
diff changeset
109 if(!ok){
jurzua
parents:
diff changeset
110
jurzua
parents:
diff changeset
111 printRels(entId, entOC, entModif, rels, "SRC");
jurzua
parents:
diff changeset
112
jurzua
parents:
diff changeset
113 if( StringUtils.equals(action, "solve") && (
jurzua
parents:
diff changeset
114 (StringUtils.equals(entOC, "WITNESS") && (StringUtils.equals(relLabel, "is_part_of"))) ||
jurzua
parents:
diff changeset
115 (StringUtils.equals(entOC, "WITNESS") && (StringUtils.equals(relLabel, "is_exemplar_of"))) ||
jurzua
parents:
diff changeset
116 (StringUtils.equals(entOC, "COLLECTION") && (StringUtils.equals(relLabel, "is_part_of"))) ||
jurzua
parents:
diff changeset
117 (StringUtils.equals(entOC, "TEXT") && (StringUtils.equals(relLabel, "was_created_by"))) ||
jurzua
parents:
diff changeset
118 (StringUtils.equals(entOC, "ALIAS") && (StringUtils.equals(relLabel, "is_prime_alias_title_of"))) ||
jurzua
parents:
diff changeset
119 (StringUtils.equals(entOC, "ALIAS") && (StringUtils.equals(relLabel, "is_alias_title_of")))
jurzua
parents:
diff changeset
120 )
jurzua
parents:
diff changeset
121 ){
jurzua
parents:
diff changeset
122 solveUniqueSourceRel(conn, rels, entId, entModif);
jurzua
parents:
diff changeset
123 }
jurzua
parents:
diff changeset
124
jurzua
parents:
diff changeset
125
jurzua
parents:
diff changeset
126 if( StringUtils.equals(action, "solve") && (
jurzua
parents:
diff changeset
127 (StringUtils.equals(entOC, "PERSON") && (StringUtils.equals(relLabel, "lived_in"))) ||
jurzua
parents:
diff changeset
128 (StringUtils.equals(entOC, "PERSON") && (StringUtils.equals(relLabel, "has_role")))
jurzua
parents:
diff changeset
129 )
jurzua
parents:
diff changeset
130 ){
jurzua
parents:
diff changeset
131 solveMultipleSourceRels(conn, rels, entId, entModif);
jurzua
parents:
diff changeset
132 removeDoubleRelations(conn, rels);
jurzua
parents:
diff changeset
133 }
jurzua
parents:
diff changeset
134
jurzua
parents:
diff changeset
135 }
jurzua
parents:
diff changeset
136 return ok;
jurzua
parents:
diff changeset
137 }
jurzua
parents:
diff changeset
138
jurzua
parents:
diff changeset
139 public static boolean analyseTarRels(Connection conn, List<Relation> rels, Long entId, Long entModif, String entOC, String relLabel, String action) throws Exception{
jurzua
parents:
diff changeset
140
jurzua
parents:
diff changeset
141 boolean ok = true;
jurzua
parents:
diff changeset
142
jurzua
parents:
diff changeset
143 for(Relation rel : rels){
jurzua
parents:
diff changeset
144 if(!rel.tarModif.equals(entModif)){
jurzua
parents:
diff changeset
145 ok = false;
jurzua
parents:
diff changeset
146 break;
jurzua
parents:
diff changeset
147 }
jurzua
parents:
diff changeset
148 }
jurzua
parents:
diff changeset
149
jurzua
parents:
diff changeset
150 if(!ok){
jurzua
parents:
diff changeset
151
jurzua
parents:
diff changeset
152 printRels(entId, entOC, entModif, rels, "TAR");
jurzua
parents:
diff changeset
153
jurzua
parents:
diff changeset
154
jurzua
parents:
diff changeset
155 if( StringUtils.equals(action, "solve") && (
jurzua
parents:
diff changeset
156 (StringUtils.equals(entOC, "CODEX") && (StringUtils.equals(relLabel, "is_part_of"))) ||
jurzua
parents:
diff changeset
157 (StringUtils.equals(entOC, "TEXT") && (StringUtils.equals(relLabel, "is_exemplar_of"))) ||
jurzua
parents:
diff changeset
158 (StringUtils.equals(entOC, "TEXT") && (StringUtils.equals(relLabel, "is_alias_title_of"))) ||
jurzua
parents:
diff changeset
159 (StringUtils.equals(entOC, "PERSON") && (StringUtils.equals(relLabel, "was_created_by"))) ||
jurzua
parents:
diff changeset
160 (StringUtils.equals(entOC, "PERSON") && (StringUtils.equals(relLabel, "is_reference_of"))) ||
jurzua
parents:
diff changeset
161 (StringUtils.equals(entOC, "PERSON") && (StringUtils.equals(relLabel, "is_alias_name_of"))) ||
jurzua
parents:
diff changeset
162 (StringUtils.equals(entOC, "PERSON") && (StringUtils.equals(relLabel, "was_copied_by"))) ||
jurzua
parents:
diff changeset
163 (StringUtils.equals(entOC, "COLLECTION") && (StringUtils.equals(relLabel, "is_part_of"))) ||
jurzua
parents:
diff changeset
164 (StringUtils.equals(entOC, "REPOSITORY") && (StringUtils.equals(relLabel, "is_part_of"))) ||
jurzua
parents:
diff changeset
165 (StringUtils.equals(entOC, "PLACE") && (StringUtils.equals(relLabel, "is_in")))
jurzua
parents:
diff changeset
166 )
jurzua
parents:
diff changeset
167 ){
jurzua
parents:
diff changeset
168 solveMultipleTargetRels(conn, rels, entId, entModif);
jurzua
parents:
diff changeset
169 removeDoubleRelations(conn, rels);
jurzua
parents:
diff changeset
170 }
jurzua
parents:
diff changeset
171
jurzua
parents:
diff changeset
172 if( StringUtils.equals(action, "solve") && (
jurzua
parents:
diff changeset
173 (StringUtils.equals(entOC, "TEXT") && (StringUtils.equals(relLabel, "is_prime_alias_title_of"))) ||
jurzua
parents:
diff changeset
174 (StringUtils.equals(entOC, "TEXT") && (StringUtils.equals(relLabel, "is_translation_of"))) ||
jurzua
parents:
diff changeset
175 (StringUtils.equals(entOC, "ALIAS") && (StringUtils.equals(relLabel, "has_title_written_as")))
jurzua
parents:
diff changeset
176 )
jurzua
parents:
diff changeset
177 ){
jurzua
parents:
diff changeset
178 solveUniqueTargetRel(conn, rels, entId, entModif);
jurzua
parents:
diff changeset
179 }
jurzua
parents:
diff changeset
180 }
jurzua
parents:
diff changeset
181 return ok;
jurzua
parents:
diff changeset
182 }
jurzua
parents:
diff changeset
183
jurzua
parents:
diff changeset
184 private static void printRels(Long entId, String entOC, Long entModif, List<Relation> rels, String direction){
jurzua
parents:
diff changeset
185 System.out.println("\n" + direction + ") Entity [id=" + entId + ", oc=" + entOC + ", modif=" + entModif + "] - Relation " + rels.get(0).label);
jurzua
parents:
diff changeset
186 System.out.println("\trowId\tid\tlabel\tsrcModif\ttarModif");
jurzua
parents:
diff changeset
187 for(Relation rel : rels){
jurzua
parents:
diff changeset
188 System.out.println("\t" + rel.toString());
jurzua
parents:
diff changeset
189 }
jurzua
parents:
diff changeset
190 }
jurzua
parents:
diff changeset
191
jurzua
parents:
diff changeset
192 /**
jurzua
parents:
diff changeset
193 * This method should be used only when the entity is WITNESS and from the source domain.
jurzua
parents:
diff changeset
194 * @param conn
jurzua
parents:
diff changeset
195 * @param rels
jurzua
parents:
diff changeset
196 * @param entId
jurzua
parents:
diff changeset
197 * @param entModif
jurzua
parents:
diff changeset
198 * @throws SQLException
jurzua
parents:
diff changeset
199 */
jurzua
parents:
diff changeset
200 private static void solveUniqueSourceRel(Connection conn, List<Relation> rels, Long entId, Long entModif) throws SQLException{
jurzua
parents:
diff changeset
201 System.out.println("\t-----------------------");
jurzua
parents:
diff changeset
202 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
203
jurzua
parents:
diff changeset
204
jurzua
parents:
diff changeset
205 Relation correctRel = null;
jurzua
parents:
diff changeset
206
jurzua
parents:
diff changeset
207 for(Relation rel : rels){
jurzua
parents:
diff changeset
208 if(rel.srcModif.equals(entModif)){
jurzua
parents:
diff changeset
209 correctRel = rel;
jurzua
parents:
diff changeset
210 break;
jurzua
parents:
diff changeset
211 }
jurzua
parents:
diff changeset
212 }
jurzua
parents:
diff changeset
213
jurzua
parents:
diff changeset
214 // if correctRel is not null, it means that there is at least one relation with the right modification time.
jurzua
parents:
diff changeset
215 // if correctRel is not, we will use the last modified relation
jurzua
parents:
diff changeset
216
jurzua
parents:
diff changeset
217 if(correctRel == null){
jurzua
parents:
diff changeset
218 correctRel = getLastModifiedRel(rels);
jurzua
parents:
diff changeset
219 String update = updateSrcRel.replace("##", entModif.toString()).replace("**", correctRel.rowId.toString());
jurzua
parents:
diff changeset
220 System.out.println("\t" + update);
jurzua
parents:
diff changeset
221 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
222 }
jurzua
parents:
diff changeset
223
jurzua
parents:
diff changeset
224
jurzua
parents:
diff changeset
225 // All other relations will be made Node.SYS_STATUS_PREVIOUS_VERSION
jurzua
parents:
diff changeset
226 if(correctRel != null){
jurzua
parents:
diff changeset
227 for(Relation rel : rels){
jurzua
parents:
diff changeset
228 if(!rel.equals(correctRel)){
jurzua
parents:
diff changeset
229
jurzua
parents:
diff changeset
230 String update = "UPDATE openmind.node SET system_status = '" + Node.SYS_STATUS_PREVIOUS_VERSION + "' WHERE row_id = '" + rel.rowId + "'";
jurzua
parents:
diff changeset
231 System.out.println("\t" + update);
jurzua
parents:
diff changeset
232 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
233
jurzua
parents:
diff changeset
234 }
jurzua
parents:
diff changeset
235 }
jurzua
parents:
diff changeset
236 }
jurzua
parents:
diff changeset
237
jurzua
parents:
diff changeset
238 stmt.close();
jurzua
parents:
diff changeset
239 System.out.println("\t-----------------------\n");
jurzua
parents:
diff changeset
240 }
jurzua
parents:
diff changeset
241
jurzua
parents:
diff changeset
242 private static void solveUniqueTargetRel(Connection conn, List<Relation> rels, Long entId, Long entModif) throws SQLException{
jurzua
parents:
diff changeset
243
jurzua
parents:
diff changeset
244 System.out.println("\t-----------------------");
jurzua
parents:
diff changeset
245 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
246
jurzua
parents:
diff changeset
247 Relation correctRel = null;
jurzua
parents:
diff changeset
248
jurzua
parents:
diff changeset
249 for(Relation rel : rels){
jurzua
parents:
diff changeset
250 if(rel.tarModif.equals(entModif)){
jurzua
parents:
diff changeset
251 correctRel = rel;
jurzua
parents:
diff changeset
252 break;
jurzua
parents:
diff changeset
253 }
jurzua
parents:
diff changeset
254 }
jurzua
parents:
diff changeset
255 // if correctRel is not null, it means that there is at least one relation with the right modification time.
jurzua
parents:
diff changeset
256 // if correctRel is not, we will use the last modified relation
jurzua
parents:
diff changeset
257 if(correctRel == null){
jurzua
parents:
diff changeset
258 correctRel = getLastModifiedRel(rels);
jurzua
parents:
diff changeset
259 String update = updateTarRel.replace("##", entModif.toString()).replace("**", correctRel.rowId.toString());
jurzua
parents:
diff changeset
260 System.out.println("\t" + update);
jurzua
parents:
diff changeset
261 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
262 }
jurzua
parents:
diff changeset
263
jurzua
parents:
diff changeset
264 // All other relations will be made Node.SYS_STATUS_PREVIOUS_VERSION
jurzua
parents:
diff changeset
265 if(correctRel != null){
jurzua
parents:
diff changeset
266 for(Relation rel : rels){
jurzua
parents:
diff changeset
267 if(!rel.equals(correctRel)){
jurzua
parents:
diff changeset
268
jurzua
parents:
diff changeset
269 String update = "UPDATE openmind.node SET system_status = '" + Node.SYS_STATUS_PREVIOUS_VERSION + "' WHERE row_id = '" + rel.rowId + "'";
jurzua
parents:
diff changeset
270 System.out.println("\t" + update);
jurzua
parents:
diff changeset
271 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
272
jurzua
parents:
diff changeset
273 }
jurzua
parents:
diff changeset
274 }
jurzua
parents:
diff changeset
275 }
jurzua
parents:
diff changeset
276
jurzua
parents:
diff changeset
277 stmt.close();
jurzua
parents:
diff changeset
278 System.out.println("\t-----------------------\n");
jurzua
parents:
diff changeset
279 }
jurzua
parents:
diff changeset
280
jurzua
parents:
diff changeset
281 private static void removeDoubleRelations(Connection conn, List<Relation> rels) throws Exception{
jurzua
parents:
diff changeset
282 Map<String, List<Relation>> doubleRelMal = new HashMap<String, List<Relation>>();
jurzua
parents:
diff changeset
283
jurzua
parents:
diff changeset
284 for(Relation rel : rels){
jurzua
parents:
diff changeset
285 String key = rel.srcId + "-" + rel.tarId;
jurzua
parents:
diff changeset
286 if(!doubleRelMal.containsKey(key)){
jurzua
parents:
diff changeset
287 doubleRelMal.put(key, new ArrayList<Relation>());
jurzua
parents:
diff changeset
288 }
jurzua
parents:
diff changeset
289 doubleRelMal.get(key).add(rel);
jurzua
parents:
diff changeset
290 }
jurzua
parents:
diff changeset
291
jurzua
parents:
diff changeset
292 for(String key : doubleRelMal.keySet()){
jurzua
parents:
diff changeset
293
jurzua
parents:
diff changeset
294 List<Relation> list = doubleRelMal.get(key);
jurzua
parents:
diff changeset
295
jurzua
parents:
diff changeset
296 //found double relations
jurzua
parents:
diff changeset
297
jurzua
parents:
diff changeset
298 if(list.size() > 1){
jurzua
parents:
diff changeset
299 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
300 System.out.println("\t-----------------------");
jurzua
parents:
diff changeset
301 System.out.println("\tFound double relations:");
jurzua
parents:
diff changeset
302
jurzua
parents:
diff changeset
303 Relation correctRel = getLastModifiedRel(list);
jurzua
parents:
diff changeset
304 for(Relation rel : list){
jurzua
parents:
diff changeset
305 System.out.println("\t" + rel.toString());
jurzua
parents:
diff changeset
306 if(!rel.equals(correctRel)){
jurzua
parents:
diff changeset
307 String update = "UPDATE openmind.node SET system_status = '" + Node.SYS_STATUS_PREVIOUS_VERSION + "' WHERE row_id = '" + rel.rowId + "'";
jurzua
parents:
diff changeset
308 System.out.println("\t" + update);
jurzua
parents:
diff changeset
309 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
310 }
jurzua
parents:
diff changeset
311 }
jurzua
parents:
diff changeset
312 stmt.close();
jurzua
parents:
diff changeset
313 System.out.println("\t-----------------------\n");
jurzua
parents:
diff changeset
314 }
jurzua
parents:
diff changeset
315
jurzua
parents:
diff changeset
316 }
jurzua
parents:
diff changeset
317
jurzua
parents:
diff changeset
318 }
jurzua
parents:
diff changeset
319
jurzua
parents:
diff changeset
320 private static Relation getLastModifiedRel(List<Relation> rels){
jurzua
parents:
diff changeset
321 Relation lastModified = null;
jurzua
parents:
diff changeset
322
jurzua
parents:
diff changeset
323 for(Relation rel : rels){
jurzua
parents:
diff changeset
324 if(lastModified == null || lastModified.modifTime < rel.modifTime){
jurzua
parents:
diff changeset
325 lastModified = rel;
jurzua
parents:
diff changeset
326 }
jurzua
parents:
diff changeset
327 }
jurzua
parents:
diff changeset
328 return lastModified;
jurzua
parents:
diff changeset
329 }
jurzua
parents:
diff changeset
330
jurzua
parents:
diff changeset
331 private static void solveMultipleTargetRels(Connection conn, List<Relation> rels, Long entId, Long entModif) throws SQLException{
jurzua
parents:
diff changeset
332 System.out.println("\t-----------------------");
jurzua
parents:
diff changeset
333 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
334
jurzua
parents:
diff changeset
335
jurzua
parents:
diff changeset
336 for(Relation rel : rels){
jurzua
parents:
diff changeset
337 String update = updateTarRel.replace("##", entModif.toString()).replace("**", rel.rowId.toString());
jurzua
parents:
diff changeset
338 System.out.println("\t" + update);
jurzua
parents:
diff changeset
339 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
340 }
jurzua
parents:
diff changeset
341
jurzua
parents:
diff changeset
342 stmt.close();
jurzua
parents:
diff changeset
343 System.out.println("\t-----------------------\n");
jurzua
parents:
diff changeset
344 }
jurzua
parents:
diff changeset
345
jurzua
parents:
diff changeset
346 private static void solveMultipleSourceRels(Connection conn, List<Relation> rels, Long entId, Long entModif) throws SQLException{
jurzua
parents:
diff changeset
347 System.out.println("\t-----------------------");
jurzua
parents:
diff changeset
348 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
349
jurzua
parents:
diff changeset
350
jurzua
parents:
diff changeset
351 for(Relation rel : rels){
jurzua
parents:
diff changeset
352 String update = updateSrcRel.replace("##", entModif.toString()).replace("**", rel.rowId.toString());
jurzua
parents:
diff changeset
353 System.out.println("\t" + update);
jurzua
parents:
diff changeset
354 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
355 }
jurzua
parents:
diff changeset
356
jurzua
parents:
diff changeset
357 stmt.close();
jurzua
parents:
diff changeset
358 System.out.println("\t-----------------------\n");
jurzua
parents:
diff changeset
359 }
jurzua
parents:
diff changeset
360
jurzua
parents:
diff changeset
361
jurzua
parents:
diff changeset
362 private static void executeSources(Connection conn, Long entId, Long entModif, String entOC, String relLabel, String action) throws Exception{
jurzua
parents:
diff changeset
363 Map<String, List<Relation>> srcRelMap = new HashMap<String, List<Relation>>();
jurzua
parents:
diff changeset
364
jurzua
parents:
diff changeset
365 ResultSet srcRels = getSrcRels(conn, entId);
jurzua
parents:
diff changeset
366 try {
jurzua
parents:
diff changeset
367 while (srcRels.next()) {
jurzua
parents:
diff changeset
368 Relation rel = new Relation(srcRels);
jurzua
parents:
diff changeset
369 if(!srcRelMap.containsKey(rel.label)){
jurzua
parents:
diff changeset
370 srcRelMap.put(rel.label, new ArrayList<Relation>());
jurzua
parents:
diff changeset
371 }
jurzua
parents:
diff changeset
372 srcRelMap.get(rel.label).add(rel);
jurzua
parents:
diff changeset
373 }
jurzua
parents:
diff changeset
374 } finally {
jurzua
parents:
diff changeset
375 srcRels.close();
jurzua
parents:
diff changeset
376 }
jurzua
parents:
diff changeset
377
jurzua
parents:
diff changeset
378 if(StringUtils.isEmpty(relLabel)){
jurzua
parents:
diff changeset
379 for(String rel : srcRelMap.keySet()){
jurzua
parents:
diff changeset
380 analyseSrcRels(conn, srcRelMap.get(rel), entId, entModif, entOC, rel, action);
jurzua
parents:
diff changeset
381 }
jurzua
parents:
diff changeset
382 }else if(srcRelMap.containsKey(relLabel)){
jurzua
parents:
diff changeset
383 analyseSrcRels(conn, srcRelMap.get(relLabel), entId, entModif, entOC, relLabel, action);
jurzua
parents:
diff changeset
384 }
jurzua
parents:
diff changeset
385 }
jurzua
parents:
diff changeset
386
jurzua
parents:
diff changeset
387 private static void executeTargets(Connection conn, Long entId, Long entModif, String entOC, String relLabel, String action) throws Exception{
jurzua
parents:
diff changeset
388 Map<String, List<Relation>> tarRelMap = new HashMap<String, List<Relation>>();
jurzua
parents:
diff changeset
389
jurzua
parents:
diff changeset
390 ResultSet tarRels = getTarRels(conn, entId);
jurzua
parents:
diff changeset
391 try {
jurzua
parents:
diff changeset
392 while (tarRels.next()) {
jurzua
parents:
diff changeset
393 Relation rel = new Relation(tarRels);
jurzua
parents:
diff changeset
394 if(!tarRelMap.containsKey(rel.label)){
jurzua
parents:
diff changeset
395 tarRelMap.put(rel.label, new ArrayList<Relation>());
jurzua
parents:
diff changeset
396 }
jurzua
parents:
diff changeset
397 tarRelMap.get(rel.label).add(rel);
jurzua
parents:
diff changeset
398 }
jurzua
parents:
diff changeset
399 } finally {
jurzua
parents:
diff changeset
400 tarRels.close();
jurzua
parents:
diff changeset
401 }
jurzua
parents:
diff changeset
402
jurzua
parents:
diff changeset
403 if(StringUtils.isEmpty(relLabel)){
jurzua
parents:
diff changeset
404 for(String rel : tarRelMap.keySet()){
jurzua
parents:
diff changeset
405 analyseTarRels(conn, tarRelMap.get(rel), entId, entModif, entOC, rel, action);
jurzua
parents:
diff changeset
406 }
jurzua
parents:
diff changeset
407 }else if(tarRelMap.containsKey(relLabel)){
jurzua
parents:
diff changeset
408 analyseTarRels(conn, tarRelMap.get(relLabel), entId, entModif, entOC, relLabel, action);
jurzua
parents:
diff changeset
409 }
jurzua
parents:
diff changeset
410 }
jurzua
parents:
diff changeset
411
jurzua
parents:
diff changeset
412 /*
jurzua
parents:
diff changeset
413 public static void solveTarRels(Connection conn, List<Relation> rels, Long entId, Long entModif) throws SQLException{
jurzua
parents:
diff changeset
414 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
415 for(Relation rel : rels){
jurzua
parents:
diff changeset
416 String update = updateTarRel.replace("##", entModif.toString()).replace("**", rel.rowId.toString());
jurzua
parents:
diff changeset
417 System.out.println(update);
jurzua
parents:
diff changeset
418 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
419 }
jurzua
parents:
diff changeset
420 stmt.close();
jurzua
parents:
diff changeset
421 System.out.println("Problem solved!");
jurzua
parents:
diff changeset
422 }
jurzua
parents:
diff changeset
423
jurzua
parents:
diff changeset
424 public static void solveSrcRels(Connection conn, List<Relation> rels, Long entId, Long entModif) throws SQLException{
jurzua
parents:
diff changeset
425 Statement stmt = conn.createStatement() ;
jurzua
parents:
diff changeset
426 for(Relation rel : rels){
jurzua
parents:
diff changeset
427 String update = updateSrcRel.replace("##", entModif.toString()).replace("**", rel.rowId.toString());
jurzua
parents:
diff changeset
428 System.out.println(update);
jurzua
parents:
diff changeset
429 int rows = stmt.executeUpdate( update ) ;
jurzua
parents:
diff changeset
430 }
jurzua
parents:
diff changeset
431 stmt.close();
jurzua
parents:
diff changeset
432 System.out.println("Problem solved!");
jurzua
parents:
diff changeset
433 }*/
jurzua
parents:
diff changeset
434
jurzua
parents:
diff changeset
435 public static ResultSet getTarRels(Connection conn, Long entId)
jurzua
parents:
diff changeset
436 throws SQLException {
jurzua
parents:
diff changeset
437 String query = queryTarRels.replace("##", entId.toString());
jurzua
parents:
diff changeset
438 Statement st = conn.createStatement();
jurzua
parents:
diff changeset
439 ResultSet rs = st.executeQuery(query);
jurzua
parents:
diff changeset
440 return rs;
jurzua
parents:
diff changeset
441 }
jurzua
parents:
diff changeset
442
jurzua
parents:
diff changeset
443 public static ResultSet getSrcRels(Connection conn, Long entId)
jurzua
parents:
diff changeset
444 throws SQLException {
jurzua
parents:
diff changeset
445 String query = querySrcRels.replace("##", entId.toString());
jurzua
parents:
diff changeset
446 Statement st = conn.createStatement();
jurzua
parents:
diff changeset
447 ResultSet rs = st.executeQuery(query);
jurzua
parents:
diff changeset
448 return rs;
jurzua
parents:
diff changeset
449 }
jurzua
parents:
diff changeset
450
jurzua
parents:
diff changeset
451 /**
jurzua
parents:
diff changeset
452 * TODO reduces double entities
jurzua
parents:
diff changeset
453 * @param conn
jurzua
parents:
diff changeset
454 * @param objectClass
jurzua
parents:
diff changeset
455 * @return
jurzua
parents:
diff changeset
456 * @throws SQLException
jurzua
parents:
diff changeset
457 */
jurzua
parents:
diff changeset
458 public static ResultSet getEntitiesByClass(Connection conn,
jurzua
parents:
diff changeset
459 String objectClass) throws SQLException {
jurzua
parents:
diff changeset
460
jurzua
parents:
diff changeset
461 String query = null;
jurzua
parents:
diff changeset
462
jurzua
parents:
diff changeset
463 if(StringUtils.isEmpty(objectClass)){
jurzua
parents:
diff changeset
464 query = queryAllEntList;
jurzua
parents:
diff changeset
465 }else{
jurzua
parents:
diff changeset
466 query = queryEntListByClass.replace("##", objectClass);
jurzua
parents:
diff changeset
467 }
jurzua
parents:
diff changeset
468
jurzua
parents:
diff changeset
469 Statement st = conn.createStatement();
jurzua
parents:
diff changeset
470 ResultSet rs = st.executeQuery(query);
jurzua
parents:
diff changeset
471 System.out.println("Entities had been loaded...");
jurzua
parents:
diff changeset
472 return rs;
jurzua
parents:
diff changeset
473 }
jurzua
parents:
diff changeset
474
jurzua
parents:
diff changeset
475 public static void execute(String mysqlUser,
jurzua
parents:
diff changeset
476 String mysqlPass, String action, String objectClass, String relation) {
jurzua
parents:
diff changeset
477 try {
jurzua
parents:
diff changeset
478 Connection conn;
jurzua
parents:
diff changeset
479
jurzua
parents:
diff changeset
480 Class.forName("com.mysql.jdbc.Driver").newInstance();
jurzua
parents:
diff changeset
481 String url = "jdbc:mysql://localhost/openmind?characterEncoding=UTF-8";
jurzua
parents:
diff changeset
482 conn = DriverManager.getConnection(url, mysqlUser, mysqlPass);
jurzua
parents:
diff changeset
483
jurzua
parents:
diff changeset
484 if(StringUtils.equals("solve", action) && StringUtils.isEmpty(objectClass) && StringUtils.isEmpty(relation)){
jurzua
parents:
diff changeset
485
jurzua
parents:
diff changeset
486 for(ClassRelation classRel : classRelList){
jurzua
parents:
diff changeset
487 System.out.println("#######################################");
jurzua
parents:
diff changeset
488 System.out.println(classRel.toString());
jurzua
parents:
diff changeset
489 ResultSet ents = getEntitiesByClass(conn, classRel.objectClass);
jurzua
parents:
diff changeset
490 int count = 0;
jurzua
parents:
diff changeset
491
jurzua
parents:
diff changeset
492 try {
jurzua
parents:
diff changeset
493 while (ents.next()) {
jurzua
parents:
diff changeset
494 executeEntity(conn, ents.getLong("id"), ents.getLong("modification_time"), ents.getString("object_class"), classRel.relName, action);
jurzua
parents:
diff changeset
495 count++;
jurzua
parents:
diff changeset
496
jurzua
parents:
diff changeset
497 if(count % 50 == 0){
jurzua
parents:
diff changeset
498 System.out.print("*");
jurzua
parents:
diff changeset
499 }
jurzua
parents:
diff changeset
500 if(count % 300 == 0){
jurzua
parents:
diff changeset
501 System.out.println(count);
jurzua
parents:
diff changeset
502 }
jurzua
parents:
diff changeset
503 }
jurzua
parents:
diff changeset
504 } finally {
jurzua
parents:
diff changeset
505 ents.close();
jurzua
parents:
diff changeset
506 }
jurzua
parents:
diff changeset
507 System.out.println();
jurzua
parents:
diff changeset
508 }
jurzua
parents:
diff changeset
509
jurzua
parents:
diff changeset
510
jurzua
parents:
diff changeset
511 }else{
jurzua
parents:
diff changeset
512 ResultSet ents = getEntitiesByClass(conn, objectClass);
jurzua
parents:
diff changeset
513 int count = 0;
jurzua
parents:
diff changeset
514
jurzua
parents:
diff changeset
515 try {
jurzua
parents:
diff changeset
516 while (ents.next()) {
jurzua
parents:
diff changeset
517 executeEntity(conn, ents.getLong("id"), ents.getLong("modification_time"), ents.getString("object_class"), relation, action);
jurzua
parents:
diff changeset
518 count++;
jurzua
parents:
diff changeset
519
jurzua
parents:
diff changeset
520 if(count % 50 == 0){
jurzua
parents:
diff changeset
521 System.out.print("*");
jurzua
parents:
diff changeset
522 }
jurzua
parents:
diff changeset
523 if(count % 300 == 0){
jurzua
parents:
diff changeset
524 System.out.println(count);
jurzua
parents:
diff changeset
525 }
jurzua
parents:
diff changeset
526 }
jurzua
parents:
diff changeset
527 } finally {
jurzua
parents:
diff changeset
528 ents.close();
jurzua
parents:
diff changeset
529 }
jurzua
parents:
diff changeset
530 }
jurzua
parents:
diff changeset
531
jurzua
parents:
diff changeset
532
jurzua
parents:
diff changeset
533 System.out.println("#### Finished ####");
jurzua
parents:
diff changeset
534
jurzua
parents:
diff changeset
535 conn.close();
jurzua
parents:
diff changeset
536 } catch (Exception ex) {
jurzua
parents:
diff changeset
537 ex.printStackTrace();
jurzua
parents:
diff changeset
538 }
jurzua
parents:
diff changeset
539 }
jurzua
parents:
diff changeset
540
jurzua
parents:
diff changeset
541 public static void test(){
jurzua
parents:
diff changeset
542 try {
jurzua
parents:
diff changeset
543 Connection conn;
jurzua
parents:
diff changeset
544
jurzua
parents:
diff changeset
545 Class.forName("com.mysql.jdbc.Driver").newInstance();
jurzua
parents:
diff changeset
546 String url = "jdbc:mysql://localhost/openmind?characterEncoding=UTF-8";
jurzua
parents:
diff changeset
547 conn = DriverManager.getConnection(url, "ismi", "ismipw");
jurzua
parents:
diff changeset
548
jurzua
parents:
diff changeset
549 executeEntity(conn, Long.parseLong("297238"), Long.parseLong("1405366164815"), "WITNESS", "show", null);
jurzua
parents:
diff changeset
550
jurzua
parents:
diff changeset
551 conn.close();
jurzua
parents:
diff changeset
552 } catch (Exception ex) {
jurzua
parents:
diff changeset
553 ex.printStackTrace();
jurzua
parents:
diff changeset
554 }
jurzua
parents:
diff changeset
555 }
jurzua
parents:
diff changeset
556
jurzua
parents:
diff changeset
557 /**
jurzua
parents:
diff changeset
558 *
jurzua
parents:
diff changeset
559 * @param args
jurzua
parents:
diff changeset
560 * objectClass, mysqlUser, mysqlPassword, action
jurzua
parents:
diff changeset
561 *
jurzua
parents:
diff changeset
562 * action:
jurzua
parents:
diff changeset
563 * - show: show all
jurzua
parents:
diff changeset
564 * - showExemplarOf: for witnesses, it shows the relation "is_exemplar_of" with problems
jurzua
parents:
diff changeset
565 * - solveExemplarOf: for witnesses, it solves the relation "is_exemplar_of" with problems
jurzua
parents:
diff changeset
566 * - showPartOf
jurzua
parents:
diff changeset
567 * - solvePartOf
jurzua
parents:
diff changeset
568 */
jurzua
parents:
diff changeset
569 public static void main(String[] args) {
jurzua
parents:
diff changeset
570
jurzua
parents:
diff changeset
571 //test();
jurzua
parents:
diff changeset
572 if (args.length == 3) {
jurzua
parents:
diff changeset
573 execute(args[0], args[1], args[2], null, null);
jurzua
parents:
diff changeset
574 }else if(args.length == 4){
jurzua
parents:
diff changeset
575 execute(args[0], args[1], args[2], args[3], null);
jurzua
parents:
diff changeset
576 }else if(args.length == 5){
jurzua
parents:
diff changeset
577 execute(args[0], args[1], args[2], args[3], args[4]);
jurzua
parents:
diff changeset
578 } else {
jurzua
parents:
diff changeset
579 System.out
jurzua
parents:
diff changeset
580 .println("Parameter/s no found: They should be: mode(SHOW/REDUCE), mysql_user, mysql_password");
jurzua
parents:
diff changeset
581 System.out.println("args.length= " + args.length);
jurzua
parents:
diff changeset
582 System.out.println(Arrays.toString(args));
jurzua
parents:
diff changeset
583
jurzua
parents:
diff changeset
584 }
jurzua
parents:
diff changeset
585
jurzua
parents:
diff changeset
586 System.exit(0);
jurzua
parents:
diff changeset
587 }
jurzua
parents:
diff changeset
588
jurzua
parents:
diff changeset
589 public static class ClassRelation{
jurzua
parents:
diff changeset
590 public String objectClass;
jurzua
parents:
diff changeset
591 public String relName;
jurzua
parents:
diff changeset
592
jurzua
parents:
diff changeset
593 public ClassRelation(String objectClass, String relName){
jurzua
parents:
diff changeset
594 this.objectClass = objectClass;
jurzua
parents:
diff changeset
595 this.relName = relName;
jurzua
parents:
diff changeset
596 }
jurzua
parents:
diff changeset
597
jurzua
parents:
diff changeset
598 @Override
jurzua
parents:
diff changeset
599 public String toString(){
jurzua
parents:
diff changeset
600 return this.objectClass + " [" + relName + "]";
jurzua
parents:
diff changeset
601 }
jurzua
parents:
diff changeset
602 }
jurzua
parents:
diff changeset
603
jurzua
parents:
diff changeset
604 public static class Relation{
jurzua
parents:
diff changeset
605
jurzua
parents:
diff changeset
606 public Long id;
jurzua
parents:
diff changeset
607 public Long rowId;
jurzua
parents:
diff changeset
608 public Long srcModif;
jurzua
parents:
diff changeset
609 public Long tarModif;
jurzua
parents:
diff changeset
610 public Long srcId;
jurzua
parents:
diff changeset
611 public Long tarId;
jurzua
parents:
diff changeset
612 public String label;
jurzua
parents:
diff changeset
613 public Long modifTime;
jurzua
parents:
diff changeset
614
jurzua
parents:
diff changeset
615 public Relation(ResultSet rs) throws SQLException{
jurzua
parents:
diff changeset
616 this.id = rs.getLong("id");
jurzua
parents:
diff changeset
617 this.rowId = rs.getLong("row_id");
jurzua
parents:
diff changeset
618 this.srcModif = rs.getLong("source_modif");
jurzua
parents:
diff changeset
619 this.tarModif = rs.getLong("target_modif");
jurzua
parents:
diff changeset
620 this.srcId = rs.getLong("source_id");
jurzua
parents:
diff changeset
621 this.tarId = rs.getLong("target_id");
jurzua
parents:
diff changeset
622 this.label = rs.getString("object_class");
jurzua
parents:
diff changeset
623 this.modifTime = rs.getLong("modification_time");
jurzua
parents:
diff changeset
624 }
jurzua
parents:
diff changeset
625
jurzua
parents:
diff changeset
626 @Override
jurzua
parents:
diff changeset
627 public String toString(){
jurzua
parents:
diff changeset
628 return this.rowId + "\t" + this.id + "\t" + this.label + "\t" + this.srcId + "\t" + this.tarId + "\t" + this.srcModif + "\t" + this.tarModif;
jurzua
parents:
diff changeset
629 }
jurzua
parents:
diff changeset
630 }
jurzua
parents:
diff changeset
631 }