1
|
/**
|
2
|
* Copyright (C) 2021 EDIT
|
3
|
* European Distributed Institute of Taxonomy
|
4
|
* http://www.e-taxonomy.eu
|
5
|
*
|
6
|
* The contents of this file are subject to the Mozilla Public License Version 1.1
|
7
|
* See LICENSE.TXT at the top of this package for the full license terms.
|
8
|
*/
|
9
|
package eu.etaxonomy.cdm.database.update.v523_525;
|
10
|
|
11
|
import java.sql.ResultSet;
|
12
|
import java.sql.SQLException;
|
13
|
import java.util.ArrayList;
|
14
|
import java.util.List;
|
15
|
|
16
|
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
|
17
|
import eu.etaxonomy.cdm.database.ICdmDataSource;
|
18
|
import eu.etaxonomy.cdm.database.update.CaseType;
|
19
|
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
|
20
|
import eu.etaxonomy.cdm.database.update.SchemaUpdateResult;
|
21
|
import eu.etaxonomy.cdm.database.update.SchemaUpdaterStepBase;
|
22
|
import eu.etaxonomy.cdm.model.agent.Person;
|
23
|
import eu.etaxonomy.cdm.model.agent.Team;
|
24
|
import eu.etaxonomy.cdm.strategy.cache.agent.PersonDefaultCacheStrategy;
|
25
|
import eu.etaxonomy.cdm.strategy.cache.agent.TeamDefaultCacheStrategy;
|
26
|
|
27
|
/**
|
28
|
* #4311
|
29
|
* @author a.mueller
|
30
|
* @since 22.04.2021
|
31
|
*/
|
32
|
public class CollectorTitleUpdater extends SchemaUpdaterStepBase {
|
33
|
|
34
|
private static final String step = "Update collector title";
|
35
|
|
36
|
public static CollectorTitleUpdater NewInstance (List<ISchemaUpdaterStep> stepList){
|
37
|
return new CollectorTitleUpdater(stepList);
|
38
|
}
|
39
|
|
40
|
protected CollectorTitleUpdater(List<ISchemaUpdaterStep> stepList) {
|
41
|
super(stepList, step);
|
42
|
}
|
43
|
@Override
|
44
|
public List<ISchemaUpdaterStep> getInnerSteps() {
|
45
|
List<ISchemaUpdaterStep> result = new ArrayList<>();
|
46
|
|
47
|
return result;
|
48
|
}
|
49
|
|
50
|
@Override
|
51
|
public void invoke(ICdmDataSource datasource, IProgressMonitor monitor, CaseType caseType,
|
52
|
SchemaUpdateResult result) throws SQLException {
|
53
|
|
54
|
//set collectorCache = titleCache for all persons and teams
|
55
|
String sql = "UPDATE @@AgentBase@@ SET collectorTitleCache = titleCache WHERE DTYPE = 'Person' OR DTYPE = 'Team'";
|
56
|
datasource.executeUpdate(caseType.replaceTableNames(sql));
|
57
|
|
58
|
//for teams being part of gathering event
|
59
|
sql = " SELECT ab.* FROM @@AgentBase@@ ab WHERE id IN (SELECT actor_id FROM @@GatheringEvent@@) ";
|
60
|
ResultSet rs = datasource.executeQuery(caseType.replaceTableNames(sql));
|
61
|
while (rs.next()){
|
62
|
String dtype = rs.getString("DTYPE");
|
63
|
int id = rs.getInt("id");
|
64
|
if ("Team".equalsIgnoreCase(dtype)){
|
65
|
boolean protectedTitleCache = rs.getBoolean("protectedTitleCache");
|
66
|
if (protectedTitleCache){
|
67
|
//set protectedCollector = true if protectedTitleCache = true
|
68
|
sql = "UPDATE @@AgentBase@@ SET protectedCollectorTitleCache = "+getBoolean(true, datasource)+" WHERE id = " + id;
|
69
|
datasource.executeUpdate(caseType.replaceTableNames(sql));
|
70
|
}else{
|
71
|
//for each team member handle like persons below
|
72
|
sql = "SELECT p.* FROM @@AgentBase_AgentBase@@ MN INNER JOIN @@AgentBase@@ p ON p.id = MN.teamMembers_id WHERE MN.team_ID = " + id + " ORDER BY sortIndex ";
|
73
|
ResultSet rs2 = datasource.executeQuery(caseType.replaceTableNames(sql));
|
74
|
Team team = Team.NewInstance();
|
75
|
while (rs2.next()){
|
76
|
Person member = handlePerson(rs2, datasource, caseType);
|
77
|
team.addTeamMember(member);
|
78
|
}
|
79
|
rs2.close();
|
80
|
String collectorTitleCache = TeamDefaultCacheStrategy.INSTANCE().getCollectorTitleCache(team);
|
81
|
sql = " UPDATE @@AgentBase@@ SET collectorTitleCache = '" + collectorTitleCache + "' WHERE id = " + id;
|
82
|
datasource.executeUpdate(caseType.replaceTableNames(sql));
|
83
|
}
|
84
|
}else if ("Person".equalsIgnoreCase(dtype)){
|
85
|
//for each person in gathering event
|
86
|
handlePerson(rs, datasource, caseType);
|
87
|
}
|
88
|
}
|
89
|
}
|
90
|
|
91
|
private Person handlePerson(ResultSet rs, ICdmDataSource datasource, CaseType caseType) throws SQLException {
|
92
|
//set collectorTitle
|
93
|
int id = rs.getInt("id");
|
94
|
String familyName = rs.getString("familyName");
|
95
|
String initials = rs.getString("initials");
|
96
|
String givenName = rs.getString("givenName");
|
97
|
String titleCache = rs.getString("titleCache");
|
98
|
String nomenclaturalTitle = rs.getString("nomenclaturalTitle");
|
99
|
boolean protectedTitleCache = rs.getBoolean("protectedTitleCache");
|
100
|
|
101
|
Person person = Person.NewInstance(nomenclaturalTitle, familyName, initials, givenName);
|
102
|
person.setTitleCache(titleCache, protectedTitleCache);
|
103
|
String collectorTitle = PersonDefaultCacheStrategy.INSTANCE().getCollectorTitleCache(person);
|
104
|
|
105
|
String sql = "UPDATE @@AgentBase@@ SET collectorTitleCache = '"+collectorTitle+"', collectorTitle = '"+collectorTitle+"' WHERE id = " + id;
|
106
|
datasource.executeUpdate(caseType.replaceTableNames(sql));
|
107
|
return person;
|
108
|
}
|
109
|
}
|