Project

General

Profile

1 41200 katerina.i
package eu.dnetlib.data.claims.migration.handler;
2
3
import eu.dnetlib.data.claims.migration.Result;
4
import eu.dnetlib.data.claims.migration.parser.DMFParser;
5 41350 argiro.kok
import eu.dnetlib.data.claimsDemo.*;
6 41200 katerina.i
import org.xml.sax.SAXException;
7
8
import javax.xml.parsers.ParserConfigurationException;
9 41254 argiro.kok
import javax.xml.xpath.XPathExpressionException;
10
import java.io.BufferedWriter;
11
import java.io.FileWriter;
12 41200 katerina.i
import java.io.IOException;
13 41254 argiro.kok
import java.io.PrintWriter;
14 41200 katerina.i
import java.sql.ResultSet;
15 41254 argiro.kok
import java.sql.Timestamp;
16
import java.util.Date;
17 41200 katerina.i
18
/**
19
 * Created by kiatrop on 5/2/2016.
20
 */
21
public class DMFResultHandler {
22
23
    SqlDAO sqlDAO = null;
24
    QueryGenerator queryGenerator = null;
25
    DMFParser dmfParser = null;
26
27 41350 argiro.kok
    /**
28
     * Given an openaire id decides the datasource that the result was collected from
29
     * Default datasource  is openaire
30
     * @param openaireId
31
     * @return  collectedFrom datasource
32
     */
33
    public static String identifyCollectedFrom(String openaireId){
34
        if(openaireId==null){
35
            return null;
36
        }
37
        if(openaireId.contains("crossref")){
38
            return ClaimUtils.COLLECTED_FROM_CROSSREF;
39
        }else if (openaireId.contains("datacite")){
40
            return ClaimUtils.COLLECTED_FROM_DATACITE;
41
        } else if (openaireId.contains("orcid")){
42
            return ClaimUtils.COLLECTED_FROM_ORCID;
43
        }else{
44
            return ClaimUtils.COLLECTED_FROM_OPENAIRE;
45
        }
46
47
    }
48
49 41200 katerina.i
    private String fetchDMFResult(String id) throws Exception {
50
        ResultSet rs = sqlDAO.executePreparedQuery(queryGenerator.generateSelectDMFByIdQuery(id));
51
        return rs.getString("xml");
52
    }
53
54
    public Result fetchResultByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException {
55 41350 argiro.kok
        return dmfParser.dmf2Result(dmf);
56 41200 katerina.i
    }
57
58
    public Result fetchResultById(String id) throws Exception {
59 41350 argiro.kok
        //TODO check
60
       return  fetchResultByDMF(fetchDMFResult(id));
61
//        return ParsingClaimUtils.getResultFromDMF(fetchDMFResult(id));
62 41200 katerina.i
    }
63
64 41254 argiro.kok
    /**
65
     *
66
     * @param dmf
67
     * @return DOI from DMF - a *valid* one
68
     * @throws IOException
69
     * @throws SAXException
70
     * @throws ParserConfigurationException
71
     * @throws XPathExpressionException
72
     */
73
    public String fetchDoiByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
74
75 41350 argiro.kok
        return checkDoiValidity(dmfParser.getDOIIdentifierFromDMF(dmf));
76 41254 argiro.kok
    }
77
    public String fetchOrcidWorkByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
78 41350 argiro.kok
        return dmfParser.getOrcidworkIdentifierFromDMF(dmf);
79 41254 argiro.kok
    }
80
    public String fetchEmbargoEndDateByDMF(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
81 41350 argiro.kok
        return dmfParser.getEmbargoEndDateFromDMF(dmf);
82 41254 argiro.kok
    }
83
    public String fetchAccessRights(String dmf) throws IOException, SAXException, ParserConfigurationException, XPathExpressionException {
84 41350 argiro.kok
        return dmfParser.getAccessRightsFromDMF(dmf);
85 41254 argiro.kok
    }
86
87
    /**
88
     *
89
     *
90
     * @param doi
91
     * @return DOI String : the given one if it's valid
92
     * @throws Exception
93
     */
94 41444 argiro.kok
    public static String checkDoiValidity(String doi)  {
95 41254 argiro.kok
        if(doi==null){
96
            return null;
97
        }
98
        try{
99
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("invalid_dois.txt", true)));
100
            boolean isValid= SearchUtils.isDoiValid(doi);
101
            if(!isValid&&(doi.length() - (doi.replace("_", "")).length() > 1)){
102
                String transformDoi = doi.replace("_", "-");
103
                isValid=SearchUtils.isDoiValid(transformDoi);
104
                if(isValid){
105
                    Date date= new java.util.Date();
106
                    out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi);
107
                    doi=transformDoi;
108
                }
109
            }else if(!isValid&&(doi.length() - (doi.replace("_", "")).length() == 1)) {
110
                String transformDoi = doi.replace("_", "-");
111
                isValid=SearchUtils.isDoiValid(transformDoi);
112
                if(isValid){
113
                    Date date= new java.util.Date();
114
                    out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with : "+transformDoi);
115
                    doi = transformDoi;
116
                }
117
            }else if(!isValid) {
118
                String transformDoi =doi.replaceAll("\\p{C}", "");
119
                isValid=SearchUtils.isDoiValid(transformDoi);
120
                if(isValid){
121
                    Date date= new java.util.Date();
122
                    out.println(new Timestamp(date.getTime())+" - Invalid doi: "+doi+" replaced with (zero-width-char): "+transformDoi);
123
                    doi = transformDoi;
124
                }
125
            }
126
            out.close();
127
        }catch (IOException e) {
128
            e.printStackTrace();
129
            System.err.println("Couldn't write to file " + "invalid_dois.txt");
130
        }
131
        return doi;
132
    }
133 41350 argiro.kok
134
    public SqlDAO getSqlDAO() {
135
        return sqlDAO;
136
    }
137
138
    public void setSqlDAO(SqlDAO sqlDAO) {
139
        this.sqlDAO = sqlDAO;
140
    }
141
142
    public QueryGenerator getQueryGenerator() {
143
        return queryGenerator;
144
    }
145
146
    public void setQueryGenerator(QueryGenerator queryGenerator) {
147
        this.queryGenerator = queryGenerator;
148
    }
149
150
    public DMFParser getDmfParser() {
151
        return dmfParser;
152
    }
153
154
    public void setDmfParser(DMFParser dmfParser) {
155
        this.dmfParser = dmfParser;
156
    }
157 41200 katerina.i
}