1
|
package eu.dnetlib.data.claims.migration.handler;
|
2
|
|
3
|
import eu.dnetlib.data.claims.migration.ClaimValidation;
|
4
|
import eu.dnetlib.data.claims.migration.entity.*;
|
5
|
import eu.dnetlib.data.claims.migration.parser.DMFParser;
|
6
|
import eu.dnetlib.data.claimsDemo.ClaimUtils;
|
7
|
import eu.dnetlib.data.claimsDemo.QueryGenerator;
|
8
|
import eu.dnetlib.data.claimsDemo.SqlDAO;
|
9
|
|
10
|
import java.util.Date;
|
11
|
import java.util.List;
|
12
|
|
13
|
/**
|
14
|
* Created by kiatrop on 5/2/2016.
|
15
|
*/
|
16
|
public class ClaimHandler {
|
17
|
|
18
|
SqlDAO sqlDAO = null;
|
19
|
QueryGenerator queryGenerator = null;
|
20
|
ResultHandler resultHandler = null;
|
21
|
DMFContextHandler dmfContextHandler = null;
|
22
|
ProjectHandler projectHandler = null;
|
23
|
|
24
|
/**
|
25
|
* Saves a list of claims in DB
|
26
|
* @param claims
|
27
|
*/
|
28
|
public void saveClaims(List<Claim> claims){
|
29
|
for(Claim claim:claims){
|
30
|
try {
|
31
|
saveClaim(claim);
|
32
|
} catch (Exception e) {
|
33
|
e.printStackTrace();
|
34
|
System.err.print("Claim couldn't be saved : "+claim.getId()+"\n"+claim.toString());
|
35
|
}
|
36
|
}
|
37
|
}
|
38
|
public String generateSaveQueryForClaim(Claim claim){
|
39
|
|
40
|
String query= null;
|
41
|
/*if (claim.getSourceType().equals(ClaimUtils.CONTEXT)) {
|
42
|
query = queryGenerator.generateInsertClaimContextQuery(resultHandler.generateSaveQueryForResult(((Result)claim.getTarget())),dmfContextHandler.generateSaveQueryForContext ((Context) claim.getSource()), claim);
|
43
|
} else if (claim.getSourceType().equals(ClaimUtils.PROJECT)) {
|
44
|
query = queryGenerator.generateInsertClaimProjectQuery(resultHandler.generateSaveQueryForResult((Result)claim.getTarget()), projectHandler.generateSaveQueryForProject((Project) claim.getSource()), claim);
|
45
|
} else{
|
46
|
query = queryGenerator.generateInsertClaimResultQuery(resultHandler.generateSaveQueryForResult((Result)claim.getTarget()), resultHandler.generateSaveQueryForResult((Result) claim.getSource()), claim);
|
47
|
}*/
|
48
|
query = queryGenerator.generateInsertFullClaimQuery(claim);
|
49
|
return query;
|
50
|
}
|
51
|
/**
|
52
|
* saves a claim in DB
|
53
|
* @param claim
|
54
|
* @throws Exception
|
55
|
*/
|
56
|
public void saveClaim(Claim claim) throws Exception {
|
57
|
sqlDAO.executeUpdateQuery(generateSaveQueryForClaim(claim));
|
58
|
}
|
59
|
|
60
|
/**
|
61
|
* Gets the main information for a claim relation - builds a claim object
|
62
|
* exports metadata
|
63
|
* and saves the claim relations in the DB
|
64
|
* @param user
|
65
|
* @param date
|
66
|
* @param sourceType
|
67
|
* @param sourceId
|
68
|
* @param sourceCollectedFrom
|
69
|
* @param targetType
|
70
|
* @param targetId
|
71
|
* @param targetCollectedFrom
|
72
|
* @throws Exception
|
73
|
*/
|
74
|
public void buildAndInsertClaim(String user, Date date, String sourceType, String sourceId, String sourceCollectedFrom, String targetType, String targetId, String targetCollectedFrom) throws Exception {
|
75
|
Claim claim = buildClaim(user,date,sourceType,sourceId,sourceCollectedFrom, targetType, targetId, targetCollectedFrom);
|
76
|
ClaimValidation claimValidation = new ClaimValidation();
|
77
|
System.out.print(claim.toString());
|
78
|
if(claimValidation.validateClaim(claim)) {
|
79
|
claim = exportMedatataForClaim(claim);
|
80
|
saveClaim(claim);
|
81
|
}
|
82
|
}
|
83
|
|
84
|
/**
|
85
|
* Gets the main information of a relation claim and
|
86
|
* builds a claim object
|
87
|
* @param user
|
88
|
* @param date
|
89
|
* @param sourceType publication, dataset, project, context
|
90
|
* @param sourceId openaireId, doi or orcid workid
|
91
|
* @param sourceCollectedFrom only for source with type publication, dataset
|
92
|
* @param targetType publication, dataset, project, context
|
93
|
* @param targetId openaireId, doi or orcid workid
|
94
|
* @param targetCollectedFrom only for target with type publication, dataset
|
95
|
* @return a claim object
|
96
|
* @throws Exception
|
97
|
*/
|
98
|
private Claim buildClaim(String user,Date date, String sourceType,String sourceId,String sourceCollectedFrom, String targetType,String targetId,String targetCollectedFrom ) throws Exception {
|
99
|
Claim claim = new Claim();
|
100
|
claim.setUserMail(user);
|
101
|
claim.setDate(date);
|
102
|
//date
|
103
|
claim.setSourceType(sourceType);
|
104
|
claim.setTargetType(targetType);
|
105
|
claim.setSource(buildOpenaireEntity(sourceId,sourceType,sourceCollectedFrom));
|
106
|
claim.setTarget(buildOpenaireEntity(targetId,targetType,targetCollectedFrom));
|
107
|
//TODO from external sources need an OPenaireID
|
108
|
|
109
|
return claim;
|
110
|
|
111
|
}
|
112
|
|
113
|
/**
|
114
|
* Gets the main information of an openaire entity
|
115
|
* and returns a full object
|
116
|
* @param id
|
117
|
* @param type
|
118
|
* @param collectedFrom
|
119
|
* @return openaire Entity (Context, Result, Project)
|
120
|
* @throws Exception
|
121
|
*/
|
122
|
private OpenaireEntity buildOpenaireEntity(String id, String type, String collectedFrom) throws Exception {
|
123
|
if(type==null){
|
124
|
return null;
|
125
|
}
|
126
|
else if(type.equals(ClaimUtils.CONTEXT)){
|
127
|
return DMFContextHandler.fetchContextById(id);
|
128
|
}else if (type.equals(ClaimUtils.PROJECT)){
|
129
|
return projectHandler.fetchProjectByID(id);
|
130
|
}else if (type.equals(ClaimUtils.PUBLICATION)||type.equals(ClaimUtils.DATASET)){
|
131
|
ExternalRecordHandler externalRecordHandler = new ExternalRecordHandler();
|
132
|
if(collectedFrom == null){
|
133
|
return null;
|
134
|
}else if(collectedFrom.equals(ClaimUtils.CROSSREF)){
|
135
|
return externalRecordHandler.fetchResultfromCrossref(id);
|
136
|
}else if (collectedFrom.equals(ClaimUtils.DATACITE)){
|
137
|
return externalRecordHandler.fetchResultfromDatacite(id);
|
138
|
}else if (collectedFrom.equals(ClaimUtils.ORCID)){
|
139
|
return externalRecordHandler.fetchResultfromOrcid(id);
|
140
|
}else if (collectedFrom.equals(ClaimUtils.OPENAIRE)){
|
141
|
IndexResultHandler indexResultHandler = new IndexResultHandler();
|
142
|
return indexResultHandler.fetchResultById(id);
|
143
|
}
|
144
|
}
|
145
|
return null;
|
146
|
}
|
147
|
|
148
|
|
149
|
/**
|
150
|
* Exports the metadata for the source and the target of a claim and sets the proper field
|
151
|
* @param claim
|
152
|
* @return claim with the proper metadata path of the result of source and target
|
153
|
*/
|
154
|
public Claim exportMedatataForClaim(Claim claim){
|
155
|
if(claim.getTargetType().equals(ClaimUtils.DATASET)||claim.getTargetType().equals(ClaimUtils.PUBLICATION)){
|
156
|
String path = resultHandler.exportMetadataFileForResult((Result)claim.getTarget());
|
157
|
((Result) claim.getTarget()).setRecordPath(path);
|
158
|
}
|
159
|
if(claim.getSourceType().equals(ClaimUtils.DATASET)||claim.getSourceType().equals(ClaimUtils.PUBLICATION)){
|
160
|
String path = resultHandler.exportMetadataFileForResult((Result)claim.getSource());
|
161
|
((Result) claim.getSource()).setRecordPath(path);
|
162
|
}
|
163
|
return claim;
|
164
|
|
165
|
}
|
166
|
|
167
|
public void deleteClaim(String user, String claimId){
|
168
|
//TODO
|
169
|
}
|
170
|
|
171
|
public SqlDAO getSqlDAO() {
|
172
|
return sqlDAO;
|
173
|
}
|
174
|
|
175
|
public void setSqlDAO(SqlDAO sqlDAO) {
|
176
|
this.sqlDAO = sqlDAO;
|
177
|
}
|
178
|
|
179
|
public QueryGenerator getQueryGenerator() {
|
180
|
return queryGenerator;
|
181
|
}
|
182
|
|
183
|
public void setQueryGenerator(QueryGenerator queryGenerator) {
|
184
|
this.queryGenerator = queryGenerator;
|
185
|
}
|
186
|
|
187
|
public ResultHandler getResultHandler() {
|
188
|
return resultHandler;
|
189
|
}
|
190
|
|
191
|
public void setResultHandler(ResultHandler resultHandler) {
|
192
|
this.resultHandler = resultHandler;
|
193
|
}
|
194
|
|
195
|
public DMFContextHandler getDmfContextHandler() {
|
196
|
return dmfContextHandler;
|
197
|
}
|
198
|
|
199
|
public void setDmfContextHandler(DMFContextHandler dmfContextHandler) {
|
200
|
this.dmfContextHandler = dmfContextHandler;
|
201
|
}
|
202
|
|
203
|
public ProjectHandler getProjectHandler() {
|
204
|
return projectHandler;
|
205
|
}
|
206
|
|
207
|
public void setProjectHandler(ProjectHandler projectHandler) {
|
208
|
this.projectHandler = projectHandler;
|
209
|
}
|
210
|
}
|