Revision 41166
Added by Argiro Kokogiannaki over 8 years ago
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claims/migration/ClaimValidation.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.data.claims.migration; |
2 | 2 |
|
3 | 3 |
import eu.dnetlib.data.claimsDemo.ClaimUtils; |
4 |
import eu.dnetlib.data.claimsDemo.SearchUtils; |
|
4 | 5 |
|
5 | 6 |
import java.io.BufferedWriter; |
6 | 7 |
import java.io.FileWriter; |
... | ... | |
157 | 158 |
} |
158 | 159 |
return false; |
159 | 160 |
} |
161 |
|
|
162 |
/* |
|
163 |
Checks if the doi is valid. If it is not then replaces the existing DOI with the valid one. |
|
164 |
*/ |
|
165 |
public static void checkForDOI(Result r) throws Exception { |
|
166 |
if(r.getDoi()==null){ |
|
167 |
return ; |
|
168 |
} |
|
169 |
String validDOI=isValidDoi(r.getDoi()); |
|
170 |
if(!validDOI.equals(r.getDoi())){ |
|
171 |
if(r.getXml()!=null) { |
|
172 |
r.setXml(r.getXml().replace(r.getDoi(), validDOI)); |
|
173 |
} |
|
174 |
if(r.getExternal_url()!=null){ |
|
175 |
r.setExternal_url(r.getExternal_url().replace(r.getDoi(), validDOI)); |
|
176 |
} |
|
177 |
r.setDoi(validDOI); |
|
178 |
} |
|
179 |
} |
|
180 |
public static String isValidDoi(String doi) throws Exception { |
|
181 |
if(doi==null){ |
|
182 |
return null; |
|
183 |
} |
|
184 |
try{ |
|
185 |
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("invalid_dois.txt", true))); |
|
186 |
boolean valid=SearchUtils.findDOI(doi); |
|
187 |
if(!valid&&(doi.length() - (doi.replace("_", "")).length() > 1)){ |
|
188 |
String transformDoi = doi.replace("_", "-"); |
|
189 |
valid=SearchUtils.findDOI(transformDoi); |
|
190 |
if(valid){ |
|
191 |
Date date= new java.util.Date(); |
|
192 |
out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi); |
|
193 |
doi=transformDoi; |
|
194 |
} |
|
195 |
}else if(!valid&&(doi.length() - (doi.replace("_", "")).length() == 1)) { |
|
196 |
String transformDoi = doi.replace("_", "-"); |
|
197 |
valid=SearchUtils.findDOI(transformDoi); |
|
198 |
if(valid){ |
|
199 |
Date date= new java.util.Date(); |
|
200 |
out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi); |
|
201 |
doi = transformDoi; |
|
202 |
} |
|
203 |
}else if(!valid) { |
|
204 |
String transformDoi =doi.replaceAll("\\p{C}", ""); |
|
205 |
valid=SearchUtils.findDOI(transformDoi); |
|
206 |
if(valid){ |
|
207 |
Date date= new java.util.Date(); |
|
208 |
out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with (zero-width-char): "+transformDoi); |
|
209 |
doi = transformDoi; |
|
210 |
} |
|
211 |
} |
|
212 |
out.close(); |
|
213 |
}catch (IOException e) { |
|
214 |
e.printStackTrace(); |
|
215 |
System.err.println("Couldn't write to file " + "invalid_dois.txt"); |
|
216 |
} |
|
217 |
return doi; |
|
218 |
} |
|
160 | 219 |
} |
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claims/migration/QueryBuilder.java | ||
---|---|---|
6 | 6 |
import eu.dnetlib.data.claimsDemo.SqlDAO; |
7 | 7 |
import org.apache.commons.io.FileUtils; |
8 | 8 |
import org.apache.log4j.Logger; |
9 |
import org.springframework.context.ApplicationContext; |
|
10 |
import org.springframework.context.support.ClassPathXmlApplicationContext; |
|
11 |
|
|
12 | 9 |
import java.io.IOException; |
13 | 10 |
import java.sql.ResultSet; |
14 | 11 |
import java.io.File; |
... | ... | |
17 | 14 |
* Created by argirok on 12/1/2016. |
18 | 15 |
*/ |
19 | 16 |
/* |
20 |
Query Builder is the class that is responsible for the select queries in the old claims table |
|
21 |
and the insert queries in the new claim tables |
|
17 |
Query Builder is the class that |
|
18 |
-gets the claims from old DB using the proper queries |
|
19 |
-calls the appropriate methods from ClaimBuilder to build a claim |
|
20 |
-does the migration to the new Claim DB |
|
22 | 21 |
|
22 |
|
|
23 | 23 |
*/ |
24 | 24 |
public class QueryBuilder { |
25 | 25 |
|
... | ... | |
46 | 46 |
while(rs.next()){ |
47 | 47 |
// log.info(rs.getString("xml")); |
48 | 48 |
Claim claim= claimBuilder.getConceptDMFClaim(rs); |
49 |
// log.info(claim.toString());
|
|
49 |
log.info(claim.toString()); |
|
50 | 50 |
//log.info(JsonldBuilder.toJsonld(claim)); |
51 | 51 |
if(claimValidation.validateClaim(claim)) { |
52 | 52 |
if (insertToDB) { |
53 |
claim= createXMLFilesForClaim(claim); |
|
54 | 53 |
//log.info(claimBuilder.getQueryInsertClaim(claim)); |
55 |
sqlDAO.executeUpdateQuery(claimBuilder.getQueryInsertClaim(claim));
|
|
54 |
insertClaimInDB(claim);
|
|
56 | 55 |
} |
57 | 56 |
} |
58 | 57 |
} |
... | ... | |
73 | 72 |
log.info(claim.toString()); |
74 | 73 |
if(claimValidation.validateClaim(claim)) { |
75 | 74 |
if (insertToDB) { |
76 |
claim= createXMLFilesForClaim(claim); |
|
77 |
// log.info(claimBuilder.getQueryInsertClaim(claim)); |
|
78 |
sqlDAO.executeUpdateQuery(claimBuilder.getQueryInsertClaim(claim)); |
|
75 |
insertClaimInDB(claim); |
|
79 | 76 |
} |
80 | 77 |
} |
81 | 78 |
} |
82 | 79 |
} |
83 | 80 |
|
84 | 81 |
public void getAndTransformAllClaims(Integer limit, boolean insertToDB) throws Exception { |
85 |
ResultSet rs=sqlDAO.executePreparedQuery("Select * from claims_view limit "+limit);
|
|
82 |
ResultSet rs=sqlDAO.executePreparedQuery(queryGenerator.generateSelectAllClaimsQuery(limit));
|
|
86 | 83 |
transformAllClaims(insertToDB,rs); |
87 | 84 |
} |
88 | 85 |
public void getAndTransformClaimById(String id, boolean insertToDB) throws Exception { |
... | ... | |
96 | 93 |
if(claimType!=null && claimType.equals("rels2actions")){ |
97 | 94 |
log.info("*Relation *"); |
98 | 95 |
Claim claim= claimBuilder.getRelationClaim(rs); |
99 |
//log.info(JsonldBuilder.toJsonld(claim)); |
|
100 | 96 |
log.info(claim.toString()); |
101 | 97 |
if(claimValidation.validateClaim(claim)) { |
102 | 98 |
if (insertToDB) { |
103 |
// claim= createXMLFilesForClaim(claim); |
|
104 |
//log.info(claimBuilder.getQueryInsertClaim(claim)); |
|
105 |
// sqlDAO.executeUpdateQuery((claimBuilder.getQueryInsertClaim(claim))); |
|
99 |
insertClaimInDB(claim); |
|
106 | 100 |
} |
107 | 101 |
} |
108 | 102 |
}else{ |
... | ... | |
113 | 107 |
log.info(claim.toString()); |
114 | 108 |
if(claimValidation.validateClaim(claim)) { |
115 | 109 |
if (insertToDB) { |
116 |
//log.info(claimBuilder.getQueryInsertClaim(claim)); |
|
117 |
// claim= createXMLFilesForClaim(claim); |
|
118 |
// sqlDAO.executeUpdateQuery((claimBuilder.getQueryInsertClaim(claim))); |
|
119 |
} |
|
110 |
insertClaimInDB(claim); |
|
111 |
} |
|
120 | 112 |
} |
121 | 113 |
}else{ |
122 | 114 |
log.info("* DMF *"); |
... | ... | |
126 | 118 |
} |
127 | 119 |
} |
128 | 120 |
public void getAndTransformDMFClaims(Integer limit) throws Exception { |
129 |
ResultSet rs=sqlDAO.executePreparedQuery("Select * from claims_view where type='dmf2actions' and xml NOT ILIKE '%concept%' limit "+limit);
|
|
121 |
ResultSet rs=sqlDAO.executePreparedQuery(queryGenerator.generateSelectDMFClaimsQuery(limit));
|
|
130 | 122 |
while(rs.next()){ |
131 | 123 |
Result r= claimBuilder.getDMFClaim(rs); |
132 | 124 |
log.info(r.toString()); |
133 | 125 |
} |
134 | 126 |
} |
135 |
public Claim createXMLFilesForClaim(Claim claim) throws Exception {
|
|
127 |
public void exportMetadataFilesForClaim(Claim claim) throws Exception {
|
|
136 | 128 |
if(claim.getSourceType().equals(ClaimUtils.PUBLICATION)|| claim.getSourceType().equals(ClaimUtils.DATASET)){ |
137 | 129 |
Result r=(Result)claim.getSource(); |
138 |
String xml=createXMLFile(r);
|
|
130 |
String xml= exportMetadataFileForResult(r);
|
|
139 | 131 |
if(xml!=null){ |
140 | 132 |
r.setXml(xml); |
141 | 133 |
claim.setSource(r); |
... | ... | |
144 | 136 |
} |
145 | 137 |
if(claim.getTargetType().equals(ClaimUtils.PUBLICATION)|| claim.getTargetType().equals(ClaimUtils.DATASET)){ |
146 | 138 |
Result r=(Result)claim.getTarget(); |
147 |
String xml=createXMLFile(r);
|
|
139 |
String xml= exportMetadataFileForResult(r);
|
|
148 | 140 |
if(xml!=null){ |
149 | 141 |
r.setXml(xml); |
150 | 142 |
claim.setTarget(r); |
151 | 143 |
} |
152 | 144 |
|
153 | 145 |
} |
154 |
|
|
155 |
return claim; |
|
156 | 146 |
} |
157 | 147 |
|
158 |
public String createXMLFile(Result result) {
|
|
148 |
public String exportMetadataFileForResult(Result result) {
|
|
159 | 149 |
if(result.getOpenaireId()!=null && result.getXml()!=null){ |
160 | 150 |
try { |
161 | 151 |
FileUtils.writeStringToFile(new File(ClaimUtils.PATHTOSAVEXML + result.getOpenaireId()), result.getXml()); |
... | ... | |
170 | 160 |
|
171 | 161 |
return null; |
172 | 162 |
} |
173 |
|
|
163 |
public void insertClaimInDB(Claim claim) throws Exception { |
|
164 |
String query=null; |
|
165 |
if (claim.getSourceType().equals(ClaimUtils.CONTEXT)) { |
|
166 |
query = queryGenerator.generateInsertClaimContextQuery((Result)claim.getTarget(), (Context) claim.getSource(), claim); |
|
167 |
} else if (claim.getSourceType().equals(ClaimUtils.PROJECT)) { |
|
168 |
query = queryGenerator.generateInsertClaimProjectQuery((Result)claim.getTarget(), (Project) claim.getSource(), claim); |
|
169 |
} else{ |
|
170 |
query = queryGenerator.generateInsertClaimResultQuery((Result)claim.getTarget(), (Result) claim.getSource(), claim); |
|
171 |
} |
|
172 |
if(query!=null){ |
|
173 |
//log.info(query); |
|
174 |
exportMetadataFilesForClaim(claim); |
|
175 |
sqlDAO.executeUpdateQuery(query); |
|
176 |
} |
|
177 |
} |
|
174 | 178 |
public SqlDAO getSqlDAO() { |
175 | 179 |
return sqlDAO; |
176 | 180 |
} |
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claimsDemo/TestClass.java | ||
---|---|---|
60 | 60 |
@Test |
61 | 61 |
public void testJob() throws Exception { |
62 | 62 |
|
63 |
log.info(queryGenerator.generateSelectAllClaimsQuery()); |
|
63 |
log.info(queryGenerator.generateSelectAllClaimsQuery(1));
|
|
64 | 64 |
|
65 | 65 |
|
66 | 66 |
} |
67 | 67 |
|
68 |
|
|
69 |
@Test |
|
70 |
public void executePreparedQuery() throws Exception { |
|
71 |
|
|
72 |
log.info(sqlDAO.executePreparedQuery("Select * from claims limit 1")); |
|
73 |
|
|
74 |
|
|
75 |
} |
|
76 |
|
|
77 |
|
|
78 | 68 |
@Test |
79 | 69 |
public void transformClaims() throws Exception { |
80 | 70 |
queryBuilder.getAndTransformAllClaims(1, false); |
... | ... | |
115 | 105 |
@Test |
116 | 106 |
public void getConceptDMFClaims() throws Exception { |
117 | 107 |
//total 203 |
118 |
queryBuilder.getAndTransformConceptClaims(203, true);
|
|
108 |
queryBuilder.getAndTransformConceptClaims(1, false);
|
|
119 | 109 |
} |
120 | 110 |
@Test |
121 | 111 |
public void testHttpRequest() throws Exception { |
... | ... | |
196 | 186 |
@Test |
197 | 187 |
public void validDoiTest() throws Exception { |
198 | 188 |
//10.1523/JNEUROSCI.2900-11.2012 |
199 |
SearchUtils s= new SearchUtils(); |
|
200 | 189 |
String doi="10.1523/JNEUROSCI.2900-11.2012"; |
201 |
String tr_doi=doi=s.isValidDoi(doi); |
|
202 |
System.out.println("Initial doi:"+doi.length()+" "+tr_doi.length()); |
|
190 |
String tr_doi=doi=ClaimValidation.isValidDoi(doi); |
|
203 | 191 |
System.out.println("Initial doi:"+doi+" "+((doi.equals(tr_doi))?"":" Transformed to"+tr_doi)); |
204 | 192 |
|
205 | 193 |
} |
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claimsDemo/SearchUtils.java | ||
---|---|---|
18 | 18 |
*/ |
19 | 19 |
public class SearchUtils { |
20 | 20 |
// private String searchUrl="http://beta.services.openaire.eu:8380/search/search?action=search"; |
21 |
private String searchUrl="http://services.openaire.eu:8380/search/search?action=search"; |
|
22 |
private String apiUrlForResults="http://api.openaire.eu/search/"; |
|
23 |
private String apiUrlForProjects="http://rudie.di.uoa.gr:8080/dnet-functionality-services-1.2.0-SNAPSHOT/api/"; |
|
24 |
private String crossrefUrl="http://api.crossref.org/works?filter=doi:"; |
|
25 |
private String dataciteUrl="http://data.datacite.org/application/rdf+xml/"; |
|
26 |
private String orcidUrlPrefix="http://pub.orcid.org/"; |
|
27 |
private String orcidUrlSuffix="/orcid-works"; |
|
21 |
private static String searchUrl="http://services.openaire.eu:8380/search/search?action=search";
|
|
22 |
private static String apiUrlForResults="http://api.openaire.eu/search/";
|
|
23 |
private static String apiUrlForProjects="http://rudie.di.uoa.gr:8080/dnet-functionality-services-1.2.0-SNAPSHOT/api/";
|
|
24 |
private static String crossrefUrl="http://api.crossref.org/works?filter=doi:";
|
|
25 |
private static String dataciteUrl="http://data.datacite.org/application/rdf+xml/";
|
|
26 |
private static String orcidUrlPrefix="http://pub.orcid.org/";
|
|
27 |
private static String orcidUrlSuffix="/orcid-works";
|
|
28 | 28 |
private boolean useApi=true; |
29 | 29 |
|
30 |
SearchUtils(){ |
|
30 |
public SearchUtils(){
|
|
31 | 31 |
|
32 | 32 |
} |
33 | 33 |
public String getProjectApiUrl(String id) { |
... | ... | |
99 | 99 |
return response.toString(); |
100 | 100 |
} |
101 | 101 |
// HTTP GET request |
102 |
public String getCrossrefJsonRecord(String doi){ |
|
102 |
public static String getCrossrefJsonRecord(String doi){
|
|
103 | 103 |
String url=crossrefUrl+doi; |
104 | 104 |
URL obj = null; |
105 | 105 |
String responseStr=null; |
... | ... | |
131 | 131 |
} |
132 | 132 |
return responseStr; |
133 | 133 |
} |
134 |
private boolean findDOI(String doi) throws IOException {
|
|
134 |
public static boolean findDOI(String doi) throws IOException {
|
|
135 | 135 |
boolean found=false; |
136 | 136 |
String responseStr=getCrossrefJsonRecord(doi); |
137 | 137 |
if(responseStr!=null){ |
... | ... | |
143 | 143 |
Checks if the the crossref API returns a response for the requested DOI |
144 | 144 |
If there is no such a DOI we try some transformations to resolve an bug in the portal |
145 | 145 |
*/ |
146 |
public String isValidDoi(String doi) throws Exception { |
|
147 |
if(doi==null){ |
|
148 |
return null; |
|
149 |
} |
|
150 |
try{ |
|
151 |
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("invalid_dois.txt", true))); |
|
152 |
boolean valid=findDOI(doi); |
|
153 |
if(!valid&&(doi.length() - (doi.replace("_", "")).length() > 1)){ |
|
154 |
String transformDoi = doi.replace("_", "-"); |
|
155 |
valid=findDOI(transformDoi); |
|
156 |
if(valid){ |
|
157 |
Date date= new java.util.Date(); |
|
158 |
out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi); |
|
159 |
doi=transformDoi; |
|
160 |
} |
|
161 |
}else if(!valid&&(doi.length() - (doi.replace("_", "")).length() == 1)) { |
|
162 |
String transformDoi = doi.replace("_", "-"); |
|
163 |
valid=findDOI(transformDoi); |
|
164 |
if(valid){ |
|
165 |
Date date= new java.util.Date(); |
|
166 |
out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi); |
|
167 |
doi = transformDoi; |
|
168 |
} |
|
169 |
}else if(!valid) { |
|
170 |
String transformDoi =doi.replaceAll("\\p{C}", ""); |
|
171 |
valid=findDOI(transformDoi); |
|
172 |
if(valid){ |
|
173 |
Date date= new java.util.Date(); |
|
174 |
out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with (zero-width-char): "+transformDoi); |
|
175 |
doi = transformDoi; |
|
176 |
} |
|
177 |
} |
|
178 |
out.close(); |
|
179 |
}catch (IOException e) { |
|
180 |
e.printStackTrace(); |
|
181 |
System.err.println("Couldn't write to file " + "invalid_dois.txt"); |
|
182 |
} |
|
183 |
return doi; |
|
184 |
} |
|
146 |
|
|
185 | 147 |
public String getDataciteXmlRecord(String doi) { |
186 | 148 |
String url=dataciteUrl+doi; |
187 | 149 |
URL obj = null; |
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claimsDemo/ParsingClaimUtils.java | ||
---|---|---|
197 | 197 |
} |
198 | 198 |
return r; |
199 | 199 |
} |
200 |
static public Claim getClaimFromConceptDMF(Claim claim, String xml) {
|
|
200 |
static public void getClaimFromConceptDMF(Claim claim, String xml) {
|
|
201 | 201 |
Result r=new Result(); |
202 | 202 |
Context context =new Context(); |
203 | 203 |
|
... | ... | |
218 | 218 |
} |
219 | 219 |
} catch (Exception e) { |
220 | 220 |
e.printStackTrace(); |
221 |
return null; |
|
222 | 221 |
|
223 | 222 |
} |
224 | 223 |
|
225 | 224 |
claim.setTarget(buildResult(r.getOpenaireId(), null,claim.getId(),ClaimUtils.USEAPIRESULTS)); |
226 |
claim.setSource(buildContext(context));
|
|
227 |
return claim;
|
|
228 |
} |
|
229 |
static public Claim getRelationClaim(Claim claim, String xml) throws IOException, SAXException, ParserConfigurationException {
|
|
225 |
buildContext(context);
|
|
226 |
claim.setSource(context);
|
|
227 |
}
|
|
228 |
static public void getRelationClaim(Claim claim, String xml) throws IOException, SAXException, ParserConfigurationException {
|
|
230 | 229 |
String relationType=""; |
231 | 230 |
String sourceId=""; //Annotation source |
232 | 231 |
String targetId=""; //Annotation target |
... | ... | |
253 | 252 |
} |
254 | 253 |
} catch (Exception e) { |
255 | 254 |
e.printStackTrace(); |
256 |
return null; |
|
257 | 255 |
|
258 | 256 |
} |
259 | 257 |
claim.setTarget(buildResult(targetId, getTargetType(relationType),claim.getId(),ClaimUtils.USEAPIRESULTS)); |
... | ... | |
266 | 264 |
} |
267 | 265 |
claim.setTargetType(((Result) claim.getTarget()).getResultType()); |
268 | 266 |
claim.setSourceType(bodyType); |
269 |
return claim;
|
|
270 |
}
|
|
271 |
static public Context buildContext(Context context){
|
|
272 |
if(context!=null&&context.getOpenaireId()!=null){
|
|
273 |
try {
|
|
274 |
context.setTitle(ContextUtils.extractEgiLabel(context.getOpenaireId()));
|
|
275 |
}catch (Exception e){
|
|
276 |
e.printStackTrace();
|
|
277 |
System.err.println("ContextUtils: Couldn't get Egi label for id "+context.getId());
|
|
267 |
}
|
|
268 |
static public void buildContext(Context context){
|
|
269 |
if(context!=null&&context.getOpenaireId()!=null){
|
|
270 |
try {
|
|
271 |
context.setTitle(ContextUtils.extractEgiLabel(context.getOpenaireId()));
|
|
272 |
}catch (Exception e){
|
|
273 |
e.printStackTrace();
|
|
274 |
System.err.println("ContextUtils: Couldn't get Egi label for id "+context.getId());
|
|
275 |
}
|
|
278 | 276 |
} |
279 | 277 |
} |
280 |
return context; |
|
281 |
} |
|
282 | 278 |
static Result buildResult(String id, String type,String claimId,boolean useApi) { |
283 | 279 |
Result body= new Result(); |
284 | 280 |
if (id.contains("|")) { |
... | ... | |
288 | 284 |
body.setResultType(type); |
289 | 285 |
if(useApi){ |
290 | 286 |
//look for a publication |
291 |
body=getResultFromAPI(body, claimId,true);
|
|
287 |
getResultFromAPI(body, claimId,true); |
|
292 | 288 |
String openaireId=body.getOpenaireId(); |
293 | 289 |
String objId=getObjIdentifierFromSearch(openaireId); |
294 | 290 |
if(!body.isFound()){ |
... | ... | |
296 | 292 |
// not found! look for a publication with objId |
297 | 293 |
//if result not found in API with openaireId, search for it with objIdentifier |
298 | 294 |
body.setOpenaireId(objId); |
299 |
body=getResultFromAPI(body, claimId,true);
|
|
295 |
getResultFromAPI(body, claimId,true); |
|
300 | 296 |
body.setOpenaireId(openaireId); |
301 | 297 |
//TODO check which one of the ids we should keep!!!! |
302 | 298 |
} |
303 | 299 |
if(!body.isFound()){ |
304 | 300 |
//if still not found search for Dataset with the id |
305 |
body = getResultFromAPI(body, claimId, false);
|
|
301 |
getResultFromAPI(body, claimId, false); |
|
306 | 302 |
if (!body.isFound() && (objId = getObjIdentifierFromSearch(openaireId)) != null && !openaireId.equals(objId)) { |
307 | 303 |
// still not found!! search for Dataset with the onjId |
308 | 304 |
//if result not found in API with openaireId, search for it with objIdentifier |
309 | 305 |
body.setOpenaireId(objId); |
310 |
body = getResultFromAPI(body, claimId, false);
|
|
306 |
getResultFromAPI(body, claimId, false); |
|
311 | 307 |
body.setOpenaireId(openaireId); |
312 | 308 |
//TODO check which one of the ids we should keep!!!! |
313 | 309 |
} |
... | ... | |
326 | 322 |
} |
327 | 323 |
} |
328 | 324 |
}else { |
329 |
body = getResultFromSearch(body, claimId);
|
|
325 |
getResultFromSearch(body, claimId); |
|
330 | 326 |
} |
331 | 327 |
return body; |
332 | 328 |
} |
333 | 329 |
|
334 |
private static Result getResultFromSearch(Result r,String claimId){
|
|
330 |
private static void getResultFromSearch(Result r,String claimId){
|
|
335 | 331 |
SearchUtils searchUtils= new SearchUtils(); |
336 | 332 |
String searchUri=searchUtils.getResultSearchUrl(r.getOpenaireId()); |
337 | 333 |
if(searchUri==null){ |
338 |
return r;
|
|
334 |
return ; |
|
339 | 335 |
} |
340 | 336 |
System.out.println("Result query: "+searchUri); |
341 | 337 |
try { |
... | ... | |
408 | 404 |
|
409 | 405 |
} catch (Exception e) { |
410 | 406 |
e.printStackTrace(); |
411 |
return null;
|
|
407 |
return ; |
|
412 | 408 |
} |
413 |
return r; |
|
414 | 409 |
} |
415 | 410 |
public static String getObjIdentifierFromSearch(String id){ |
416 | 411 |
SearchUtils searchUtils= new SearchUtils(); |
... | ... | |
447 | 442 |
} |
448 | 443 |
return objIdentifier; |
449 | 444 |
} |
450 |
private static Result getResultFromAPI(Result r,String claimId, boolean isPublication){
|
|
445 |
private static void getResultFromAPI(Result r,String claimId, boolean isPublication){
|
|
451 | 446 |
SearchUtils searchUtils= new SearchUtils(); |
452 | 447 |
String searchUri; |
453 | 448 |
if(isPublication) { |
... | ... | |
456 | 451 |
searchUri = searchUtils.getDatasetApiUrl(r.getOpenaireId()); |
457 | 452 |
} |
458 | 453 |
if(searchUri==null){ |
459 |
return r;
|
|
454 |
return; |
|
460 | 455 |
} |
461 | 456 |
System.out.println("Result query: "+searchUri); |
462 | 457 |
try { |
... | ... | |
536 | 531 |
|
537 | 532 |
} catch (Exception e) { |
538 | 533 |
e.printStackTrace(); |
539 |
return null; |
|
540 | 534 |
} |
541 |
return r; |
|
542 | 535 |
} |
543 |
public static Result getXmlfromDatacite(Result r){
|
|
536 |
public static void getXmlfromDatacite(Result r){
|
|
544 | 537 |
r.setResultType(ClaimUtils.DATASET); |
545 | 538 |
SearchUtils searchUtils= new SearchUtils(); |
546 | 539 |
if(r!=null&&r.getDoi()==null){ |
547 |
return r;
|
|
540 |
return ; |
|
548 | 541 |
} |
549 | 542 |
String xml =searchUtils.getDataciteXmlRecord(r.getDoi()); |
550 | 543 |
if(xml==null){ |
551 |
return r;
|
|
544 |
return ; |
|
552 | 545 |
} |
553 | 546 |
try { |
554 | 547 |
String size=null; |
... | ... | |
574 | 567 |
r.setFound(true); |
575 | 568 |
} catch (Exception e) { |
576 | 569 |
e.printStackTrace(); |
577 |
return null; |
|
578 | 570 |
} |
579 |
return r; |
|
580 | 571 |
} |
581 |
public static Result getJsonfromCrossref(Result r){
|
|
572 |
public static void getJsonfromCrossref(Result r){
|
|
582 | 573 |
SearchUtils searchUtils= new SearchUtils(); |
583 | 574 |
if(r!=null&&r.getDoi()==null){ |
584 |
return r;
|
|
575 |
return ; |
|
585 | 576 |
} |
586 | 577 |
String xml =searchUtils.getCrossrefJsonRecord(r.getDoi()); |
587 | 578 |
if(xml!=null){ |
588 | 579 |
r.setXml(xml); |
589 | 580 |
r.setCollectedFrom(ClaimUtils.COLLECTED_FROM_CROSSREF); |
590 | 581 |
} |
591 |
return r; |
|
592 | 582 |
} |
593 |
public static Result getXmlfromOrcid(Result r){
|
|
583 |
public static void getXmlfromOrcid(Result r){
|
|
594 | 584 |
r.setResultType(ClaimUtils.PUBLICATION); |
595 | 585 |
SearchUtils searchUtils= new SearchUtils(); |
596 | 586 |
if(r!=null&&r.getOrcidworkid()==null){ |
597 |
return r;
|
|
587 |
return ; |
|
598 | 588 |
} |
599 | 589 |
System.out.println("OWI: " + r.getOrcidworkid()); |
600 | 590 |
String orcid=r.getOrcidworkid().substring(0,19); |
... | ... | |
604 | 594 |
System.out.println("OWI: "+orcidworkid); |
605 | 595 |
String xml =searchUtils.getOrcidXmlRecord(orcid); |
606 | 596 |
if(xml==null){ |
607 |
return r;
|
|
597 |
return ; |
|
608 | 598 |
} |
609 | 599 |
try { |
610 | 600 |
String size=null; |
... | ... | |
650 | 640 |
} |
651 | 641 |
} catch (Exception e) { |
652 | 642 |
e.printStackTrace(); |
653 |
return null; |
|
654 | 643 |
} |
655 |
return r; |
|
656 | 644 |
} |
657 | 645 |
public static Project buildProject(String id, String claimId, boolean useAPI){ |
658 | 646 |
Project body=new Project(); |
... | ... | |
661 | 649 |
} |
662 | 650 |
body.setOpenaireId(id); |
663 | 651 |
if(useAPI){ |
664 |
return getProjectFromAPI(body,claimId); |
|
652 |
getProjectFromAPI(body,claimId); |
|
653 |
return body; |
|
665 | 654 |
}else{ |
666 |
return getProjectFromSearch(body, claimId); |
|
655 |
getProjectFromSearch(body, claimId); |
|
656 |
return body; |
|
667 | 657 |
} |
668 | 658 |
|
669 | 659 |
|
670 | 660 |
} |
671 | 661 |
|
672 |
private static Project getProjectFromSearch(Project project, String claimId){
|
|
662 |
private static void getProjectFromSearch(Project project, String claimId){
|
|
673 | 663 |
SearchUtils s=new SearchUtils(); |
674 | 664 |
String searchUri=s.getProjectSearchUrl(project.getOpenaireId()); |
675 | 665 |
if(searchUri==null){ |
676 |
return project;
|
|
666 |
return ; |
|
677 | 667 |
} |
678 | 668 |
System.out.println("Project query: "+searchUri); |
679 | 669 |
try { |
... | ... | |
728 | 718 |
} |
729 | 719 |
|
730 | 720 |
} catch (Exception e) { |
731 |
return null; |
|
732 | 721 |
} |
733 |
return project; |
|
734 | 722 |
} |
735 |
private static Project getProjectFromAPI(Project project, String claimId){
|
|
723 |
private static void getProjectFromAPI(Project project, String claimId){
|
|
736 | 724 |
|
737 | 725 |
|
738 | 726 |
SearchUtils s=new SearchUtils(); |
739 | 727 |
String searchUri=s.getProjectApiUrl(project.getOpenaireId()); |
740 | 728 |
searchUri="http://api.openaire.eu/search//projects?format=xml&openaireParticipantID=dedup_wf_001::82c87f641bb6219626a0ceca81e0d434"; |
741 | 729 |
if(searchUri==null){ |
742 |
return project;
|
|
730 |
return ; |
|
743 | 731 |
} |
744 | 732 |
//TODO the parsing from API |
745 | 733 |
System.out.println("Project query: "+searchUri); |
... | ... | |
806 | 794 |
|
807 | 795 |
} catch (Exception e) { |
808 | 796 |
e.printStackTrace(); |
809 |
return null; |
|
810 | 797 |
} |
811 |
return project; |
|
812 | 798 |
} |
813 | 799 |
} |
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claimsDemo/ClaimBuilder.java | ||
---|---|---|
1 | 1 |
package eu.dnetlib.data.claimsDemo; |
2 | 2 |
|
3 |
import eu.dnetlib.data.claims.migration.Claim; |
|
4 |
import eu.dnetlib.data.claims.migration.Context; |
|
5 |
import eu.dnetlib.data.claims.migration.Project; |
|
6 |
import eu.dnetlib.data.claims.migration.Result; |
|
3 |
import eu.dnetlib.data.claims.migration.*; |
|
7 | 4 |
import org.xml.sax.SAXException; |
8 | 5 |
|
9 | 6 |
import javax.xml.parsers.ParserConfigurationException; |
... | ... | |
20 | 17 |
* Created by argirok on 24/11/2015. |
21 | 18 |
*/ |
22 | 19 |
/* |
23 |
Build operations is the class that is responsible for building of a claim Object
|
|
20 |
ClaimBuilder is the class that is responsible for building a claim Object
|
|
24 | 21 |
given a tupple (rs) from the claim db. |
25 | 22 |
*/ |
26 | 23 |
public class ClaimBuilder { |
... | ... | |
31 | 28 |
|
32 | 29 |
} |
33 | 30 |
|
34 |
public SqlDAO getSqlDAO() { |
|
35 |
return sqlDAO; |
|
36 |
} |
|
37 |
|
|
38 |
public void setSqlDAO(SqlDAO sqlDAO) { |
|
39 |
this.sqlDAO = sqlDAO; |
|
40 |
} |
|
41 |
|
|
42 |
public QueryGenerator getQueryGenerator() { |
|
43 |
return queryGenerator; |
|
44 |
} |
|
45 |
|
|
46 |
public void setQueryGenerator(QueryGenerator queryGenerator) { |
|
47 |
this.queryGenerator = queryGenerator; |
|
48 |
} |
|
49 |
|
|
50 | 31 |
public Result getDMFClaim(ResultSet rs) throws Exception { |
51 | 32 |
String xml = rs.getString("xml"); |
52 | 33 |
Result r = ParsingClaimUtils.getResultFromDMF(xml); |
... | ... | |
58 | 39 |
claim.setDate(rs.getDate("date")); |
59 | 40 |
claim.setUserMail(rs.getString("agent")); |
60 | 41 |
String xml = rs.getString("xml"); |
61 |
claim = ParsingClaimUtils.getClaimFromConceptDMF(claim, xml); |
|
42 |
// claim = |
|
43 |
ParsingClaimUtils.getClaimFromConceptDMF(claim, xml); |
|
62 | 44 |
claim.setTargetType(((Result) claim.getTarget()).getResultType()); |
63 | 45 |
claim.setSourceType(ClaimUtils.CONTEXT); |
64 |
claim=this.enrichClaimFromDMFAndExternalSources(claim); |
|
46 |
// claim= |
|
47 |
this.enrichClaimFromDMFAndExternalSources(claim); |
|
65 | 48 |
return claim; |
66 | 49 |
} |
67 | 50 |
|
... | ... | |
70 | 53 |
claim.setId(rs.getString("id")); |
71 | 54 |
claim.setDate(rs.getDate("date")); |
72 | 55 |
claim.setUserMail(rs.getString("agent")); |
73 |
claim=ParsingClaimUtils.getRelationClaim(claim,rs.getString("xml")); |
|
74 |
claim=this.enrichClaimFromDMFAndExternalSources(claim); |
|
56 |
// claim= |
|
57 |
ParsingClaimUtils.getRelationClaim(claim,rs.getString("xml")); |
|
58 |
// claim= |
|
59 |
this.enrichClaimFromDMFAndExternalSources(claim); |
|
75 | 60 |
return claim; |
76 | 61 |
} |
77 |
public String getQueryInsertClaim(Claim claim) { |
|
78 |
if (claim.getSourceType().equals(ClaimUtils.CONTEXT)) { |
|
79 |
return queryGenerator.generateInsertClaimContextQuery((Result)claim.getTarget(), (Context) claim.getSource(), claim); |
|
80 |
} else if (claim.getSourceType().equals(ClaimUtils.PROJECT)) { |
|
81 |
return queryGenerator.generateInsertClaimProjectQuery((Result)claim.getTarget(), (Project) claim.getSource(), claim); |
|
82 |
} else{ |
|
83 |
return queryGenerator.generateInsertClaimResultQuery((Result)claim.getTarget(), (Result) claim.getSource(), claim); |
|
84 |
} |
|
85 |
} |
|
62 |
|
|
86 | 63 |
@Deprecated |
87 | 64 |
private Claim enrichClaimFromDMF(Claim claim){ |
88 | 65 |
if((claim.getSourceType()==null)||(claim.getSourceType().equals(ClaimUtils.PUBLICATION)||claim.getSourceType().equals(ClaimUtils.DATASET))){ |
89 | 66 |
Result source=(Result)claim.getSource(); |
90 |
claim.setSource(enrichResultFromDMF(claim.getId(), source));
|
|
67 |
enrichResultFromDMF(claim.getId(), (Result) claim.getSource());
|
|
91 | 68 |
claim.setSourceType(((Result) claim.getSource()).getResultType()); |
92 | 69 |
} |
93 | 70 |
if(claim.getTargetType()==null||(claim.getTargetType().equals(ClaimUtils.PUBLICATION)||claim.getTargetType().equals(ClaimUtils.DATASET))){ |
94 | 71 |
Result target=(Result)claim.getTarget(); |
95 |
claim.setTarget(enrichResultFromDMF(claim.getId(),target));
|
|
72 |
enrichResultFromDMF(claim.getId(), (Result) claim.getTarget());
|
|
96 | 73 |
claim.setTargetType(((Result) claim.getTarget()).getResultType()); |
97 | 74 |
} |
98 | 75 |
return claim; |
99 | 76 |
} |
100 |
private Claim enrichClaimFromDMFAndExternalSources(Claim claim){
|
|
77 |
private void enrichClaimFromDMFAndExternalSources(Claim claim){
|
|
101 | 78 |
if((claim.getSourceType()==null)||(claim.getSourceType().equals(ClaimUtils.PUBLICATION)||claim.getSourceType().equals(ClaimUtils.DATASET))){ |
102 |
claim.setSource(enrichResultFromDMF(claim.getId(), (Result)claim.getSource()));
|
|
79 |
enrichResultFromDMF(claim.getId(), (Result) claim.getSource());
|
|
103 | 80 |
if(((Result)claim.getSource()).getOpenaireId().contains("datacite")){ |
104 |
claim.setSource(ParsingClaimUtils.getXmlfromDatacite(((Result)claim.getSource())));
|
|
81 |
ParsingClaimUtils.getXmlfromDatacite(((Result) claim.getSource()));
|
|
105 | 82 |
}else if(((Result)claim.getSource()).getOpenaireId().contains("crossref")){ |
106 |
claim.setSource(ParsingClaimUtils.getJsonfromCrossref((Result) claim.getSource()));
|
|
83 |
ParsingClaimUtils.getJsonfromCrossref((Result) claim.getSource());
|
|
107 | 84 |
} |
108 | 85 |
claim.setSourceType(((Result) claim.getSource()).getResultType()); |
109 | 86 |
} |
110 | 87 |
if(claim.getTargetType()==null||(claim.getTargetType().equals(ClaimUtils.PUBLICATION)||claim.getTargetType().equals(ClaimUtils.DATASET))){ |
111 | 88 |
//Result target=(Result)claim.getTarget(); |
112 |
claim.setTarget(enrichResultFromDMF(claim.getId(),(Result)claim.getTarget()));
|
|
89 |
enrichResultFromDMF(claim.getId(), (Result) claim.getTarget());
|
|
113 | 90 |
if(((Result) claim.getTarget()).getOpenaireId().contains("datacite")){ |
114 |
claim.setTarget(ParsingClaimUtils.getXmlfromDatacite((Result) claim.getTarget()));
|
|
91 |
ParsingClaimUtils.getXmlfromDatacite((Result) claim.getTarget());
|
|
115 | 92 |
}else if(((Result) claim.getTarget()).getOpenaireId().contains("crossref")){ |
116 | 93 |
|
117 |
claim.setTarget(ParsingClaimUtils.getJsonfromCrossref((Result) claim.getTarget()));
|
|
94 |
ParsingClaimUtils.getJsonfromCrossref((Result) claim.getTarget());
|
|
118 | 95 |
} |
119 | 96 |
claim.setTargetType(((Result) claim.getTarget()).getResultType()); |
120 | 97 |
} |
121 |
return claim; |
|
122 | 98 |
} |
123 |
private Result enrichResultFromDMF(String claimId, Result r){
|
|
99 |
private void enrichResultFromDMF(String claimId, Result r){
|
|
124 | 100 |
try { |
125 | 101 |
/*if(r.getCollectedFrom().contains("::openaire")){ |
126 | 102 |
return r; |
127 | 103 |
}*/ |
128 |
r=checkForDOI(r);
|
|
104 |
ClaimValidation.checkForDOI(r);
|
|
129 | 105 |
Result dmfResult=this.getDMFClaimById(r.getOpenaireId()); |
130 | 106 |
if(dmfResult!=null){ |
131 | 107 |
if(r.getResultType()==null){ |
... | ... | |
166 | 142 |
System.err.println("Couldn't write to file " + "enriched_results.txt"); |
167 | 143 |
} |
168 | 144 |
} |
169 |
r=checkForDOI(r);
|
|
145 |
ClaimValidation.checkForDOI(r);
|
|
170 | 146 |
//if type is still null => decide on provider |
171 | 147 |
if(r.getResultType()==null){ |
172 | 148 |
if(r.getCollectedFrom()!=null) { |
... | ... | |
187 | 163 |
} |
188 | 164 |
} |
189 | 165 |
} |
190 |
return r; |
|
191 |
} catch (Exception e) { |
|
166 |
} catch (Exception e) { |
|
192 | 167 |
e.printStackTrace(); |
193 |
return r; |
|
194 |
} |
|
168 |
} |
|
195 | 169 |
} |
196 |
/* |
|
197 |
Checks if the doi is valid. If it is not then replaces the DOI with the valid one. |
|
198 |
*/ |
|
199 |
private Result checkForDOI(Result r) throws Exception { |
|
200 |
if(r.getDoi()==null){ |
|
201 |
return r; |
|
202 |
} |
|
203 |
SearchUtils s= new SearchUtils(); |
|
204 |
String validDOI=s.isValidDoi(r.getDoi()); |
|
205 |
if(!validDOI.equals(r.getDoi())){ |
|
206 |
if(r.getXml()!=null) { |
|
207 |
r.setXml(r.getXml().replace(r.getDoi(), validDOI)); |
|
208 |
} |
|
209 |
if(r.getExternal_url()!=null){ |
|
210 |
r.setExternal_url(r.getExternal_url().replace(r.getDoi(), validDOI)); |
|
211 |
} |
|
212 |
r.setDoi(validDOI); |
|
213 |
} |
|
214 |
return r; |
|
215 |
} |
|
170 |
|
|
216 | 171 |
public Result getDMFClaimById(String resultId) throws Exception { |
217 | 172 |
ResultSet rs=sqlDAO.executePreparedQuery(queryGenerator.generateSelectDMFByIdQuery((resultId))); |
218 | 173 |
Result r =null; |
... | ... | |
221 | 176 |
} |
222 | 177 |
return r; |
223 | 178 |
} |
179 |
|
|
180 |
public SqlDAO getSqlDAO() { |
|
181 |
return sqlDAO; |
|
182 |
} |
|
183 |
|
|
184 |
public void setSqlDAO(SqlDAO sqlDAO) { |
|
185 |
this.sqlDAO = sqlDAO; |
|
186 |
} |
|
187 |
|
|
188 |
public QueryGenerator getQueryGenerator() { |
|
189 |
return queryGenerator; |
|
190 |
} |
|
191 |
|
|
192 |
public void setQueryGenerator(QueryGenerator queryGenerator) { |
|
193 |
this.queryGenerator = queryGenerator; |
|
194 |
} |
|
224 | 195 |
} |
modules/uoa-claims -demo/claims-demo/src/main/java/eu/dnetlib/data/claimsDemo/QueryGenerator.java | ||
---|---|---|
277 | 277 |
} |
278 | 278 |
//TODO Argiro here you can set up your mostly used queries and call them from the SQLDAO class |
279 | 279 |
// without having to change them in your test methods |
280 |
public String generateSelectAllClaimsQuery() { |
|
281 |
return " Select * from claims where id = ?";
|
|
280 |
public String generateSelectAllClaimsQuery(Integer limit ) {
|
|
281 |
return " Select * from claims "+(limit>0?" limit "+limit:"");
|
|
282 | 282 |
|
283 | 283 |
} |
284 | 284 |
public String generateSelectDMFClaimsQuery(Integer limit) { |
285 |
return " Select * from claims_view where type='dmf2actions' and xml NOT ILIKE '%<oaf:concept%' limit "+limit; |
|
286 |
|
|
285 |
return " Select * from claims_view where type='dmf2actions' and xml NOT ILIKE '%<oaf:concept%' "+(limit>0?" limit "+limit:""); |
|
287 | 286 |
} |
288 | 287 |
public String generateSelectDMFByIdQuery(String id) { |
289 | 288 |
return " Select * from claims_view where type='dmf2actions' and xml NOT ILIKE '%<oaf:concept%' and resultid='"+id+"' order by date desc limit 1"; |
290 | 289 |
} |
291 | 290 |
public String generateSelectConceptDMFClaimsQuery(Integer limit) { |
292 |
return " Select * from claims_view where ( type='dmf2actions' or type='updates2actions' ) and xml LIKE '%<oaf:concept%' limit "+limit;
|
|
291 |
return " Select * from claims_view where ( type='dmf2actions' or type='updates2actions' ) and xml LIKE '%<oaf:concept%' "+(limit>0?" limit "+limit:"");
|
|
293 | 292 |
} |
294 | 293 |
public String generateSelectRelationClaimsQuery(Integer limit) { |
295 |
return " Select * from claims_view where type='rels2actions' limit "+limit;
|
|
294 |
return " Select * from claims_view where type='rels2actions' "+(limit>0?" limit "+limit:"");
|
|
296 | 295 |
|
297 | 296 |
} |
298 | 297 |
public String generateSelectRelationClaimsQuery(String startId, String endId, Integer limit) { |
299 |
return " Select * from claims_view where type='rels2actions' and id>= "+startId+" and id <="+endId+ " order by id limit "+limit;
|
|
298 |
return " Select * from claims_view where type='rels2actions' and id>= "+startId+" and id <="+endId+ " order by id " +(limit>0?" limit "+limit:"");
|
|
300 | 299 |
|
301 | 300 |
} |
301 |
//used just for Testing |
|
302 | 302 |
public String generateSelectRelationClaimsWithResultidLikeQuery(String resultidLike, int limit) { |
303 |
return " Select * from claims_view where type='rels2actions' and resultid like '%"+resultidLike+"%' limit " +limit ;
|
|
303 |
return " Select * from claims_view where type='rels2actions' and resultid like '%"+resultidLike+"%' " +(limit>0?" limit "+limit:"") ;
|
|
304 | 304 |
|
305 | 305 |
} |
306 | 306 |
public static String generateSelectClaimByIdQuery(String id) { |
Also available in: Unified diff
keep Refactoring project......